微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 自己写的一个左右流水灯+蜂鸣器的程序,还请指点!

自己写的一个左右流水灯+蜂鸣器的程序,还请指点!

时间: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)死循环  这样避免程序跑飞哈  我试了一下  就没有出现这种情况了!

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar temp;
  6. sbit fmq=P1^5;
  7. uchar c;
  8. void delay();
  9. void main()
  10. {         while(1)        
  11.           {temp=0xfe;
  12.           P3=temp;
  13.           for(c=7;c>0;c--)
  14.           {
  15.               fmq=0;
  16.                 temp=_crol_(temp,1);
  17.                 delay();
  18.                 P3=temp;
  19.                 fmq=1;
  20.              }
  21.          temp=0x7f;
  22.           P3=temp;
  23.           for(c=7;c>0;c--)
  24.           {
  25.               fmq=0;
  26.                 temp=_cror_(temp,1);
  27.                 delay();
  28.                 P3=temp;
  29.                 fmq=1;
  30.       }         
  31. }
  32. }
  33. void delay()
  34. {
  35.         uint x,y;
  36.         for(x=100;x>0;x--)
  37.            for(y=600;y>0;y--);        }

复制代码

非常 感谢
   嗯,后来我修改了一下
  也是加了一个WHILE(1)大循环  
  确实没问题了

呵呵  没事哈  

延时尽量不要用软件延时程序,浪费系统CPU  可以考虑 定时器中断实现延时

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top