求一个89c52单片机的呼吸灯程序 要边呼吸边移动的 就是相当于呼吸灯流水灯结合

8位LED的

第1个回答  推荐于2016-07-20
#include <reg51.h> // 包含头文件

// 延时函数
// 参数 in 为延时的时间长度(单位时间很短,大约一条指令的时间)
void delay(unsigned int in)
{
unsigned int i;
for(i=0;i<100;i++) {;}
}

// 由暗变亮的子函数
// 参数 ledn 为点第几位的灯
void off_on(unsigned char ledn)
{
unsigned int i,j;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
if(i<=j)
{ // 模拟pwm的低电平输出
P0 = 0;
}
else
{ // 模拟PWM的高电平输出
P0 = 1<<ledn;
}
delay(10); // 这里的延时 根据灯的情况自己调整
}
}
}

// 由亮变暗的子函数
// 参数 ledn 为点第几位的灯
void on_off(unsigned char ledn)
{
unsigned int i,j;
for(i=100;i>1;i--)
{
for(j=0;j<100;j++)
{
if(i<=j)
{ // 模拟pwm的低电平输出
P0 = 0;
}
else
{ // 模拟PWM的高电平输出
P0 = 1<<ledn;
}
delay(10); // 这里的延时 根据灯的情况自己调整
}
}
}

// 主程序开始
void main()
{
unsigned char ledn;
while(1)
{
for(ledn=0;ledn<8;ledn++)
{
off_on(ledn);
on_off(ledn);
}
}
}

这个程序我简单测试了一下,效果还好,不知道这个效果是不是您想要的?
说明一下啊,我这个程序是高电平点的灯,就是P0口在输出高电平的时候灯才会亮,
如果调试程序的时候看见各个灯的亮暗顺序反了的话,仅仅需要调换一下亮暗的顺序或者改一下输出的电平关系就可以了。追问

你好 先谢谢这位大哥啦
然后我吧程序烧写到我的板上面就是有一种情况 第一个灯在闪烁然后后面七个灯是一直亮着的 0 0 这是什么情况

追答

是不是我的延时给的太长了,把那两行delay注释掉看看呢?

本回答被提问者采纳

求一个89c52单片机的呼吸灯程序 要边呼吸边移动的 就是相当于呼吸灯流水...
{ \/\/ 模拟PWM的高电平输出 P0 = 1<<ledn;} delay(10); \/\/ 这里的延时 根据灯的情况自己调整 } } } \/\/ 由亮变暗的子函数 \/\/ 参数 ledn 为点第几位的灯 void on_off(unsigned char ledn){ unsigned int i,j;for(i=100;i>1;i--){ for(j=0;j<100;j++){ i...

求大神一个关于89c52单片机用S0键来启动和停止流水灯的程序,在这里先感...
if(Start_flag)\/\/如果启动流水灯 { DispFlashLED();\/\/流水灯 } else {

相似回答