自己写的一个左右流水灯+蜂鸣器的程序,还请指点!
时间:10-02
整理:3721RD
点击:
看了郭老师的第二节课,自己研究了成了左右流水灯+蜂鸣器响,成功!非常高兴,但是源代码有点乱,请大侠们指点一下,是否还有优化的方法!
还有就是发现这个程序有点小问题,从LED1走到LED8后,声音同步,返回也正常!但是当执行完一次后,循环第二次的时候,蜂鸣器会在LED1的处连续快速的响两次,百思不得其解!
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp;
sbit fmq=P1^5;
uchar c;
void delay();
void main()
{
temp=0xfe;
P3=temp;
for(c=7;c>0;c--)
{
fmq=0;
temp=_crol_(temp,1);
delay();
P3=temp;
fmq=1;
}
temp=0x7f;
P3=temp;
for(c=7;c>0;c--)
{
fmq=0;
temp=_cror_(temp,1);
delay();
P3=temp;
fmq=1;
}
}
void delay()
{
uint x,y;
for(x=100;x>0;x--)
for(y=600;y>0;y--);
你好 你在主函数里面加一个while(1)死循环 这样避免程序跑飞哈 我试了一下 就没有出现这种情况了!
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar temp;
- sbit fmq=P1^5;
- uchar c;
- void delay();
- void main()
- { while(1)
- {temp=0xfe;
- P3=temp;
- for(c=7;c>0;c--)
- {
- fmq=0;
- temp=_crol_(temp,1);
- delay();
- P3=temp;
- fmq=1;
- }
- temp=0x7f;
- P3=temp;
- for(c=7;c>0;c--)
- {
- fmq=0;
- temp=_cror_(temp,1);
- delay();
- P3=temp;
- fmq=1;
- }
- }
- }
- void delay()
- {
- uint x,y;
- for(x=100;x>0;x--)
- for(y=600;y>0;y--); }
非常 感谢
嗯,后来我修改了一下
也是加了一个WHILE(1)大循环
确实没问题了
呵呵 没事哈
延时尽量不要用软件延时程序,浪费系统CPU 可以考虑 定时器中断实现延时
