找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13751|回复: 14
收起左侧

单片机按键长按,短按,连按的程序,希望对新手有所帮助~

  [复制链接]
ID:188935 发表于 2017-8-25 16:55 | 显示全部楼层 |阅读模式
毕业不久的我,分享一个按键实现单击、双击、长按
0.png

单片机源程序如下:
  1. #include <define.h>

  2. bit b_1ms_t;

  3. void PWM_led(void);
  4. void deplay(void);
  5. void key_on(void);
  6. void PWM_Int(void);
  7. void ad_int(void);
  8. void ad_on(void);

  9. void Init_System(void)
  10. {
  11.         WDTR = 0x5A;
  12.         CLKSEL = 0x06;
  13.         CLKCMD = 0x69;
  14.         CKCON = 0x10;
  15.        
  16.         P0M = 0xd0;
  17.         P0UR = 0x00;
  18.        
  19.         P1M = 0xe0;
  20.         P1UR = 0x05;
  21.        
  22.         P2M = 0x03;
  23.         P2UR = 0x00;
  24.        
  25.         led = 0;
  26. }

  27. void Time_int(void)
  28. {
  29.         TMOD = 0x55;
  30.         TCON0 = 0x22;
  31.        
  32.         TH0 = 0xff;
  33.         TL0 = 0xce;
  34.        
  35.         TH1 = 0xfc;
  36.         TL1 = 0x18;
  37.        
  38.         EAL = 1;
  39.         ET0 = 1;
  40.         TR0 = 1;
  41.         ET1 = 1;
  42.         TR1 = 1;
  43. }

  44. void PWM_Int(void)
  45. {
  46.         PW1M |= 0x20;
  47.         PW1CH = 0x20;
  48.        
  49.         PW1YH = 0x1f;    //T
  50.         PW1YL = 0x40;
  51.        
  52.         PW1DH = 0x00;    //duty
  53.         PW1DL = 0x00;
  54.        
  55.         PW1BH = PW1DH;
  56.     PW1BL = PW1DL;
  57. }

  58. void ad_int(void)
  59. {
  60.         P1CON = 0x08;
  61.         VREFH = 0x03;
  62.         ADR = 0x50;
  63.         ADM |= 0x03;
  64. }

  65. void main(void)
  66. {
  67.         Init_System();
  68.         Time_int();
  69.         PWM_Int();
  70.         ad_int();
  71.         while(1)
  72.         {
  73.                 if(b_1ms_t)     
  74.                 {
  75.                         b_1ms_t = 0;
  76.                         WDTR = 0x5A;
  77.                         deplay();     
  78.                         key_on();
  79.                         PWM_led();
  80.                         ad_on();
  81.                 }   
  82.         }
  83. }

  84. void Time0_Init() interrupt ISRTimer0
  85. ……………………

  86. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:







按键长按 短按 连按
展开

按键长按 短按 连按

商品类型:
全新商品
剩余时间:
 
1.00 元   附加 3 黑币

1.00 元 附加 5 黑币

anjian(dan shuang chang).zip

74.84 KB, 下载次数: , 下载积分: 黑币 -5

评分

参与人数 1黑币 +5 收起 理由
tieq1952 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:218360 发表于 2017-8-30 08:13 | 显示全部楼层
这个很,好,一直不知道怎么写这个按键的问题,谢谢
回复

使用道具 举报

ID:188935 发表于 2017-8-31 11:13 | 显示全部楼层
打杂的 发表于 2017-8-30 08:13
这个很,好,一直不知道怎么写这个按键的问题,谢谢

不客气,互相学习
回复

使用道具 举报

ID:151348 发表于 2017-8-31 16:33 | 显示全部楼层
用定时器?感觉用状态机好些
回复

使用道具 举报

ID:188935 发表于 2017-9-1 08:51 | 显示全部楼层
imxuheng 发表于 2017-8-31 16:33
用定时器?感觉用状态机好些

状态机?
回复

使用道具 举报

ID:64017 发表于 2017-12-6 19:23 | 显示全部楼层
用定时器?感觉用状态机好些
回复

使用道具 举报

ID:30057 发表于 2017-12-13 01:54 | 显示全部楼层
不客气,互相学习
回复

使用道具 举报

ID:241686 发表于 2017-12-13 10:04 | 显示全部楼层
不错,感谢楼主
回复

使用道具 举报

ID:248373 发表于 2017-12-13 10:26 来自手机 | 显示全部楼层
不错不错
回复

使用道具 举报

ID:253767 发表于 2017-12-13 17:38 | 显示全部楼层
这个很有用
回复

使用道具 举报

ID:99056 发表于 2017-12-28 10:20 来自手机 | 显示全部楼层
用定时器?感觉用状态机好些
回复

使用道具 举报

ID:70953 发表于 2018-1-9 09:32 | 显示全部楼层
很好,就是没有币
回复

使用道具 举报

ID:275345 发表于 2018-2-7 08:11 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:508457 发表于 2019-4-19 16:45 | 显示全部楼层
新人初到贵宝地,如果楼主能在后面加个注解就更加完美了。
回复

使用道具 举报

ID:59300 发表于 2023-9-5 17:02 | 显示全部楼层
很棒的文章,我是个新手急需学习,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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