找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14662|回复: 19
收起左侧

求助:51单片机一个独立按键实现三个功能思路?

  [复制链接]
ID:155507 发表于 2018-3-13 06:41 | 显示全部楼层
我给你来个试试

  1. /*******************************************************
  2. |一个按键两种功能,就是短按一下LED灯亮,
  3. |再按一下灭,长按2秒另一个LED亮,再按一下灭
  4. |
  5. *******************************************************/
  6. #include <reg52.h>
  7. #include <intrins.h>
  8. #define uint unsigned int //宏定义:unit=unsigned int
  9. #define uchar unsigned char

  10. sbit led1=P1^0;
  11. sbit led2=P1^1;

  12. sbit s=P3^5;

  13. uchar flag1,flag2;

  14. void delay(uint);
  15. void keyscan();

  16. void main()
  17. {
  18.         while(1)
  19.         {
  20.                 keyscan();

  21.         }
  22. }
  23. void keyscan()
  24. {
  25.         uint j;
  26.         j=0;
  27.         s=1;
  28.         if(flag1==1||flag2==1)
  29.         {        
  30.                 if(!s)
  31.                 {
  32.                         delay(5);
  33.                         if(!s)
  34.                         {
  35.                                 while(!s);
  36.                                 flag1=0;
  37.                                 flag2=0;
  38.                                 led1=1;
  39.                                 led2=1;
  40.                         }
  41.                 }
  42.         }
  43.         else
  44.         {
  45.                 if(!s)
  46.                 {
  47.                         delay(5);
  48.                         if(!s)
  49.                         {
  50.                                 while(s==0 && j<30000)
  51.                                 {
  52.                                         //        delay(5);
  53.                                         j++;
  54.                                 }
  55.                                
  56.                                 if (j>=30000)
  57.                                 {
  58.                                         flag2=1;
  59.                                         led2=0;
  60.                                         while(!s);        
  61.                                 }
  62.                                 else
  63.                                 {
  64.                                         flag1=1;
  65.                                         led1=0;
  66.                                 }
  67.                                
  68.                                
  69.                         }
  70.                 }
  71.         }        
  72. }
  73. void delay(uint z)
  74. {
  75.         //1ms延时
  76.         uint i,j;
  77.         for(i=z;i>0;i--)
  78.         for(j=110;j>0;j--);
  79. }

复制代码

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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