求大神帮在PWM调光基础上加个流水灯流水灯程序

求大神帮在PWM调光基础上加个流水灯流水灯程序,第1张

这个程序呢。。。好忙啊。很捉急。。。跑马灯什么的单片机表示压力会很大。。这里插一下。那里插一下。显示一闪而过还在子程序里面delay个5ms。。。

如果你想数码管跑马的话。。那。。

在全局定义一个unsigned char h,j

在interrupt 1里面

if(j<20&&a==1)h++

else j=0

j++

主程序里

Display(b)搞成Display(h)

想笔画跑马灯。

Display()里的数组换掉就可以了。

51单片机普通IO口怎么实现多路PWM?

Atmel 51单片机不带PWM功能,只有自己用定时器做;

STC 51的有带PWM功能。

实现循环右移流水灯?

左移

for (i = 0 i < 8 i++)

{

    P1 = ~(1 << i)

    Delay(1000) 

}

右移

for (i = 8 i > 0 i--)

{

    P1 = ~(1 << i)

    Delay(1000)  

}

#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

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存