STM32 pwm控制呼吸灯 呼吸三次然后灯熄灭的程序怎么写

STM32 pwm控制呼吸灯 呼吸三次然后灯熄灭的程序怎么写,第1张

在PWM定时器溢出中断里动态改变 PWM的占空比 ,比如定时器时16位的话 ,可以这么写

static uint16 duty = 1//控制占空比

每次中断里

duty += 200//根据呼吸时间去山袜顶概述

占空比控制寄存器 = duty

如此进行3次以后 ,关闭PWM定时器

次数可以定羡瞎义另外一个变量

static char counter = 0

if(duty>2^16-1)counter++

duty一直增加,溢出后会重兄唯空新变小

#include<REG52.h>

typedef unsigned char int8

typedef unsigned int int16

sbit led=P1^0//P1^0口控制LED灯

int16 t,aint8 b //电平宽度变化控制变量,毕拍控制电平宽度,b=0变长,b=1变短

void InitTimer(void)//定时器初始化

{

TMOD = 0x11

EA = 1 //总中断手行羡:开

TH0 = 0xff//T1计时器计数器初始化

TL0 = 0xce

TH1 = 0xb1//T1计时器计数器初始化

TL1 = 0xe0

ET0 = 1//T0中断:开

ET1 = 1//T1中断:开

TR0 = 1//T0计时:启动

TR1 = 1//T1计时:启动

}

void main()

{

t=0

a=0

b=0//使用变量前的初始化

InitTimer()

while(1)

{

if(t<a)//t<a时打开LED灯

led=0

elseled=1//关灯

f(t>80)t=0//t置零,要改呼吸频率就改掉“80”这个数还有下面的一个“80”也一起改

}

}

void Timer0Interrupt(void) interrupt 1 //T0中断,用来控制PWM电平,每50微秒,t自带蚂加一次

{

TH0 = 0xff

TL0 = 0xce

t++

}

void Timer1Interrupt(void) interrupt 3//T1中断,控制PWM电平宽度,使电平宽度由短变长,又由长变短循环,造成呼吸效果

{

TH1 = 0xb1

TL1 = 0xe0 //每20毫秒增加1个单位的呼吸长度

if(b==0)

{

a++

if(a==80) //改掉可以改呼吸频率

b=1

} else {

a--

if(a==0)b=0

}

}

#include<reg52.h>  

//端口定义

sbit RED    =    P2^0//红光控制端,0点亮 

sbit GREEN  =    P2^1//绿光控制端,0点亮 

sbit BLUE   =    P2^2//蓝光控制端,0点亮

//函数声明

void Delay(unsigned int t)  

void RGB(unsigned char R ,unsigned char G ,unsigned char B) 

//主函数

void main (void)

{   

    RED = 1  GREEN = 1  BLUE = 1 

    //开始时先关闭LED,当然由于单片机上电就输出 1 ,所以可不写               

    while (1)         //主循环

    {

        //7色光依陵坦次逐渐变亮

        //改变调用顺序可以改变颜色先后次序

        RGB(1,1,0)

        RGB(1,0,1)

        RGB(1,0,0)

        RGB(0,1,1)

        RGB(0,1,0)

        RGB(0,0,1)

        RGB(0,0,0)

    }

}

 

void Delay(unsigned int t)

{

 while(--t)

}

//7色光依次逐渐变亮

RGB(unsigned char R ,unsigned char G ,unsigned char B)

{

    unsigned int pwm , set = 500         

    for(pwm=1pwm<setpwm++)

    { 

             RED    = 1        //熄灭LED 

             GREEN  = 1

             BLUE   = 1 

             Delay(set-pwm)//延时长度,500次循环中从599减至1

             RED    = R        逗汪皮

             GREEN  = G

             BLUE   = B        

             Delay(pwm)//延时长度,500次循环中从1加至599

    }

}

//改变set可以改变变化快慢

//同理你可以写出7色逐渐变暗的程序

这里的程序只是提供一个思路,你如果直接复制粘贴的话会出现格式错误

把每两行中间的空行删掉一般就可消除格式错误

如果再有什么小问题根据编译信息提示稍作修改就行

串电阻的话一般这样算:

R = [ U - U(LED) ] / I

U是LED和电阻总的电压,U(LED)是LED工作电压,I 是LED工作电流,一般10--20mA

电流大小取的适山差中就行了,再计算要串联的电阻值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12473189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存