找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3460|回复: 12
打印 上一主题 下一主题
收起左侧

stc15w408as四只按键控制四只LED 单片机程序问题

[复制链接]
跳转到指定楼层
楼主
ID:17109 发表于 2017-12-9 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ll13536121668 于 2017-12-19 15:58 编辑

现在的是按一次打开LED灯、再按一次关LED灯      改点动方式    键按下,led灯亮,松开,led灯关。   、各位师傅请帮小弟看看程序还须增加什么语句能实现点动方式开关LED灯劳烦大家谢谢

单片机源程序:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit key1=P1^3;                //按键1定义
  5. sbit key2=P1^2;                //按键2定义
  6. sbit key3=P1^1;                //按键3定义
  7. sbit key4=P1^0;                //按键4定义
  8. sbit led1=P3^6;                //led1端口
  9. sbit led2=P3^5;                //led2端口
  10. sbit led3=P3^4;                //led3端口
  11. sbit led4=P3^3;                //led4端口

  12. /********按键扫描程序*************/
  13. void key_scan()
  14. {
  15.         static bit key1_sign,key2_sign,key3_sign,key4_sign;//静态位变量按键自锁标志
  16.         static uint count1,count2,count3,count4;//静态计数变量                        
  17.         
  18.         if(key1==0)                                                        //检测按键1按下
  19.         {
  20.                 if(key1_sign==0)
  21.                 {
  22.                         count1++;                                        //消抖计数1自+1
  23.                         if(count1>=1000)                        //按主循环周期100~2000调整
  24.                         {
  25.                                 key1_sign=1;                        //按键1自锁标志置1
  26.                                 led1=~led1;                         //led1取反                        
  27.                         }
  28.                 }
  29.         }
  30.         else                                                                //按键1抬起
  31.         {
  32.                 key1_sign=0;                                         //按键1自锁标志清0
  33.                 count1=0;                                                //消抖计数1清0
  34.         }

  35.         if(key2==0)        //检测按键1按下
  36.         {
  37.                 if(key2_sign==0)
  38.                 {
  39.                         count2++;                                        //消抖计数2自+1
  40.                         if(count2>=1000)                        //按主循环周期100~2000调整
  41.                         {
  42.                                 key2_sign=1;                        //按键2自锁标志置1
  43.                                 led2=~led2;                         //led2取反                        
  44.                         }
  45.                 }
  46.         }
  47.         else                                                                //按键2抬起
  48.         {
  49.                 key2_sign=0;                                        //按键2自锁标志清0
  50.                 count2=0;                                                //消抖计数2清0
  51.         }

  52.         if(key3==0)                                                        //检测按键1按下
  53.         {
  54.                 if(key3_sign==0)
  55.                 {
  56.                         count3++;                                        //消抖计数1自+1
  57.                         if(count3>=1000)                        //按主循环周期100~2000调整
  58.                         {
  59.                                 key3_sign=1;                        //按键3自锁标志置1
  60.                                 led3=~led3;                         //led3取反                        
  61.                         }
  62.                 }
  63.         }
  64.         else                                                                //按键3抬起
  65.         {
  66.                 key3_sign=0;                                        //按键3自锁标志清0
  67.                 count3=0;                                                //消抖计数3清0
  68.         }

  69.         if(key4==0)                                                        //检测按键1按下
  70.         {
  71.                 if(key4_sign==0)
  72.                 {
  73.                         count4++;                                        //消抖计数4自+1
  74.                         if(count4>=1000)                        //按主循环周期100~2000调整
  75.                         {
  76.                                 key4_sign=1;                        //按键4自锁标志置1
  77.                                 led4=~led4;                         //led4取反                        
  78.                         }
  79.                 }
  80.         }
  81.         else                                                                //按键4抬起
  82.         {
  83.                 key4_sign=0;                                        //按键4自锁标志清0
  84.                 count4=0;                                                //消抖计数4清0
  85.         }
  86. }
  87. /************主程序************/
  88. void main()
  89. {
  90.         while(1)
  91.         {
  92.                 key_scan();                                                //按键扫描程序
  93.         }
  94. }
复制代码


4个独立按键控制4个LED.zip

20.98 KB, 下载次数: 29

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:260572 发表于 2017-12-12 12:29 | 只看该作者
判断行不行
回复

使用道具 举报

板凳
ID:260696 发表于 2017-12-12 15:51 | 只看该作者
判断按键有没有松开。
回复

使用道具 举报

地板
ID:17109 发表于 2017-12-12 16:00 | 只看该作者

改点动方式    按一次开LED灯     放手就关LED灯   、各位师傅请帮小弟看看程序还须增加什么语句能实现点动方式开关LED灯劳烦大家谢谢
回复

使用道具 举报

5#
ID:17109 发表于 2017-12-12 16:27 | 只看该作者
lxmxyw 发表于 2017-12-12 15:51
判断按键有没有松开。

按一次开LED灯    松开就关LED灯
回复

使用道具 举报

6#
ID:17109 发表于 2017-12-12 16:29 | 只看该作者
lxmxyw 发表于 2017-12-12 15:51
判断按键有没有松开。

增加什么语句能实现点动方式开关LED
回复

使用道具 举报

7#
ID:260727 发表于 2017-12-12 16:46 来自手机 | 只看该作者
ll13536121668 发表于 2017-12-12 16:29
增加什么语句能实现点动方式开关LED

对不起兄弟,这个不会。我是小白,试试能不能挣点黑
回复

使用道具 举报

8#
ID:256523 发表于 2017-12-12 17:58 | 只看该作者
对不起兄弟,这个不会。我是小白,试试能不能挣点黑
回复

使用道具 举报

9#
ID:260765 发表于 2017-12-12 18:03 | 只看该作者
对不起兄弟,这个不会。我是小白,试试能不能挣点黑
回复

使用道具 举报

10#
ID:260784 发表于 2017-12-12 19:05 | 只看该作者
改为点动方式可以在每个else语句内清完标志后增加一条语句:ledx=0;//
回复

使用道具 举报

11#
ID:260784 发表于 2017-12-12 19:18 | 只看该作者
在每个else语句清完标志后增加:led(x)=0;或着led(x)=1;//根据硬件电路选择
回复

使用道具 举报

12#
ID:260871 发表于 2017-12-12 21:54 | 只看该作者
试试多加一个类似消抖的判断
回复

使用道具 举报

13#
ID:17109 发表于 2017-12-13 10:47 | 只看该作者
rongshubaihe 发表于 2017-12-12 19:05
改为点动方式可以在每个else语句内清完标志后增加一条语句:ledx=0;//

师傅你好:在   else语句什样增加一条语句:ledx=0;//     可以修改粘贴上传戴图看看吗   劳烦师傅 谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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