找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机单键长按,单击、双击及三击响应程序请教

[复制链接]
楼主
ID:715652 发表于 2020-5-31 23:03 | 显示全部楼层
#include<reg51.h>
sbit KEY=P1^0;  //检测端口
int t0=0; //按键次数变量
void DelayMs(int x)  //延时
{
        int i;
        while(x--) for(i=0;i<120;i++);
}
int KEY_SCAN(bit a)  //按键检测
{
        int t=0;
        if(!a)
        {
                DelayMs(5);
                while(!a)        t=++t%50,DelayMs(50);  //按键时长
                t0=++t0%4;   //按键次数
        }
        if(t0==1 && t<5)        return 1;   //单击
        if(t0==2 && t<5)        return 2;   //双击
        if(t0==3 && t<5)        return 3;   //三击
        if(t>5)                return 4;  //长按
        return 0;
}
void main()
{
        int i=0,j=0;
        while(1)
        {
                i=KEY_SCAN(KEY);  //会进行覆盖
                DelayMs(100);
                j++;
                if(j==20)        t0=0;   //长时间不按,清除按键次数为0
        }
}
回复

使用道具 举报

沙发
ID:715652 发表于 2020-5-31 23:12 | 显示全部楼层
  1. #include<reg51.h>
  2. sbit KEY=P1^0;  
  3. int t0=0;
  4. void DelayMs(int x)  
  5. {
  6.         int i;
  7.         while(x--) for(i=0;i<120;i++);
  8. }
  9. int KEY_SCAN(bit a)  
  10. {
  11.         int t=0;
  12.         if(!a)
  13.         {
  14.                 DelayMs(5);
  15.                 while(!a)        t=++t%50,DelayMs(50);  //按键的时长
  16.                 t0=++t0%4;   
  17.         }
  18.         if(t0==1 && t<5)        return 1;   //单击
  19.         if(t0==2 && t<5)        return 2;   //双击
  20.         if(t0==3 && t<5)        return 3;   //三击
  21.         if(t>5)                return 4;  //长按
  22.         return 0;
  23. }
  24. void main()
  25. {
  26.         int i=0,j=0;
  27.         while(1)
  28.         {
  29.                 i=KEY_SCAN(KEY);  //按键返回的值会覆盖
  30.                 DelayMs(100);
  31.                 j++;
  32.                 if(j==20)        t0=0;   //长时间不按键,清除按键次数
  33.         }
  34. }
  35. //希望有用,我也是新手!
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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