标题: 不使用定时器的简易单片机呼吸灯代码 [打印本页]

作者: zhengaohui    时间: 2018-11-27 09:47
标题: 不使用定时器的简易单片机呼吸灯代码
没有用到定时器,代码简易,效果也还行。
使用的是atc89c52RC,P1^1口接led,P1^1口位高电平小灯亮起,代码如下:
  1. #include "reg52.h"
  2. void delay(int t)
  3. {
  4. while(t--);
  5. }
  6. int main(void)
  7. {
  8. int c=400;//定义周期
  9. int h,l;//定义高电平低电平highlow
  10. while(1)
  11. {
  12. for(h=1;h<=c;h++)
  13. {
  14. P1=0x01;
  15. delay(h);
  16. P1=0x00;
  17. l=c-h;
  18. delay(l);
  19. }//高电平逐渐增加
  20. for(l=1;l<=c;l++)
  21. {
  22. P1=0x00;
  23. delay(l);
  24. P1=0x01;
  25. h=c-l;
  26. delay(h);
  27. }//低电平逐渐增加
  28. }
  29. }
复制代码
我也是偶然看到这个方法的,感觉还行分享出来。
首先我们定义了一个delay,接着是main主函数,在主函数里定义死循环,while里面用了for循环,目的是为了增加占空比,先让小灯置位高电平,延时h秒,接着低电平,延时L秒,就这样模拟了PWM的占空比,就有了高电平比例逐渐上升又逐渐下降的效果。
不喜勿喷,还是新手。
管理员求黑币!!!


作者: 牧阿木    时间: 2018-12-14 11:14
你好,我想问一下这个延时函数为什么这样写啊?我有这样的延时函数void delay (uint ms) {uchar us;  while(ms--)  {for(us=124;us>0;us--);}  }小灯就一直亮不会出现呼吸的效果
作者: 158925    时间: 2019-1-8 16:06
牧阿木 发表于 2018-12-14 11:14
你好,我想问一下这个延时函数为什么这样写啊?我有这样的延时函数void delay (uint ms) {uchar us;  while ...

你的灯不是不呼吸。只是你的延时写的时间写的比较长。

作者: 158925    时间: 2019-1-8 16:07
牧阿木 发表于 2018-12-14 11:14
你好,我想问一下这个延时函数为什么这样写啊?我有这样的延时函数void delay (uint ms) {uchar us;  while ...

void delay10us(void)   //误差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
}

作者: 演绎那些年    时间: 2019-1-8 19:12
厉害了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1