找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机LED灯出现不灭或一直闪烁怎么解决?

查看数: 6025 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-3-4 14:18

正文摘要:

#include<reg52.h>      //52系列单片机头文件 #define uchar unsigned char     //宏定义 #define uint unsigned int sbit led1=P2^0;sbit led2=P2^1; sbit led3 ...

回复

ID:471161 发表于 2019-3-5 16:45
wulin 发表于 2019-3-4 18:05
这样写就没有问题了

C:\Users\Administrator\Desktop\12.jpg想加多个按键依次点亮LED循环怎么写
ID:484376 发表于 2019-3-5 09:28
写的很详细,感谢分享!
ID:484462 发表于 2019-3-4 19:59
是不是 延时太短了
ID:10947 发表于 2019-3-4 18:48
每个分支里,亮灯1秒后灭灯
ID:213173 发表于 2019-3-4 18:05
这样写就没有问题了
  1. #include<reg52.h>      //52系列单片机头文件
  2. #define uchar unsigned char     //宏定义
  3. #define uint unsigned int

  4. sbit led1=P2^0;
  5. sbit led2=P2^1;
  6. sbit led3=P2^2;
  7. sbit led4=P2^3;
  8. sbit led5=P2^4;
  9. sbit led6=P2^5;
  10. sbit led7=P2^6;
  11. sbit led8=P2^7;
  12. sbit led9=P3^0;

  13. sbit key1=P3^1;
  14. sbit key2=P3^2;
  15. sbit key3=P3^3;
  16. sbit key4=P3^4;

  17. uchar flag;
  18. //uchar flag2;
  19. /*************************延时函数*****************************/

  20. void delay1ms(uint y)
  21. {
  22.         uint j;
  23.         while(y--)
  24.         for(j=0;j<120;j++);
  25. }

  26. /*************************子函数******************************/

  27. void keyscan()
  28. {
  29.         if(key1==0)  //确认按键是否被按下
  30.         {
  31.                 delay1ms(5);    //延时消抖动
  32.                 if(key1==0)     //消抖后在判断按键是否按下
  33.                 {
  34.                         if(flag<9)
  35.                                 flag++;
  36.                         switch(flag)
  37.                         {
  38.                                 case 1:led1=0;break;
  39.                                 case 2:led2=0;break;
  40.                                 case 3:led3=0;break;
  41.                                 case 4:led4=0;break;
  42.                                 case 5:led5=0;break;
  43.                                 case 6:led6=0;break;
  44.                                 case 7:led7=0;break;
  45.                                 case 8:led8=0;break;
  46.                                 case 9:led9=0;break;
  47.                         }
  48.                         while(!key1);   //等待按键释放
  49.                 }
  50.         }
  51.         if(key2==0)                                //确认按键是否被按下
  52.         {
  53.                 delay1ms(5);    //延时消抖动
  54.                 if(key2==0)     //消抖后在判断按键是否按下
  55.                 {
  56.                         if(flag>0)
  57.                                 flag--;
  58.                         switch(flag)
  59.                         {
  60.                                 case 0:led1=1;break;
  61.                                 case 1:led2=1;break;
  62.                                 case 2:led3=1;break;
  63.                                 case 3:led4=1;break;
  64.                                 case 4:led5=1;break;
  65.                                 case 5:led6=1;break;
  66.                                 case 6:led7=1;break;
  67.                                 case 7:led8=1;break;
  68.                                 case 8:led9=1;break;
  69.                         }
  70.                         while(!key2);   //等待按键释放
  71.                 }
  72.         }
  73. }

  74. /*************************主函数******************************/

  75. void main()
  76. {
  77.         while(1)
  78.         {
  79.                 keyscan();
  80.         }
  81. }


复制代码

评分

参与人数 1黑币 +1 收起 理由
魔法少女 + 1 赞一个!

查看全部评分

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表