找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14775|回复: 28
收起左侧

单片机通过单个按键按下时间(长短按键)执行不同功能

  [复制链接]
ID:225732 发表于 2017-11-8 14:46 | 显示全部楼层 |阅读模式
如果要节省单片机IO口,可以用一个按键,通过判断按下的时间来执行不同的子程序,自己闲来无事随意写了个,可能不够精简,但是功能都有,proteus仿真能出来,三种按键时间,短时间按下LED1亮,中等长度时间LED2亮,长时间按下LED3亮,具体按多久,自己稍微体会下就能把握

单片机长短按键仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long
  6. sbit keyback=P1^0;
  7. sbit k=P1^4;
  8. sbit key1=P1^1;
  9. sbit key2=P1^2;
  10. sbit key3=P1^3;
  11. static uint i=0;
  12. uchar keystay=0x00;
  13. uchar T0RH;
  14. uchar T0RL;

  15. void configtimer0(uchar ms)
  16. {
  17. ulong tmp;
  18. tmp=11059200/12;
  19. tmp=(ms*tmp)/1000;
  20. tmp=65536-tmp+10;
  21. T0RH=(unsigned char)(tmp>>8);
  22. T0RL=(unsigned char)tmp;
  23. TMOD &=0xF0;
  24. TMOD |=0x01;
  25. TH0=T0RH;
  26. TL0=T0RL;
  27. ET0=1;
  28. TR0=1;
  29. }


  30. void Judge(uint num)
  31. {
  32. if((5<num)&&(num<=50))
  33. {                                          
  34. key1=0;
  35. key2=1;
  36. key3=1;
  37. i=0;
  38. }
  39. if((50<num)&&(num<=120))
  40. {
  41. key2=0;
  42. key1=1;
  43. key3=1;
  44. i=0;
  45. }
  46. if(num>120)
  47. {
  48. key3=0;
  49. key1=1;
  50. key2=1;
  51. i=0;
  52. }
  53. }



  54. main()
  55. {
  56. EA=1;
  57. configtimer0(10);
  58. while(1)
  59. {
  60.   if((keystay&0xFF)==0x00)
  61. {
  62. Judge(i);
  63.           }
  64.          }
  65. }



  66. void keyscan()
  67. {
  68. keystay=(keystay<<1) | (!keyback);
  69. }
  70.   
  71. void interrupt_timer0()interrupt 1
  72. {
  73. TH0=T0RH;
  74. TL0=T0RL;
  75. keyscan();
  76. if((keystay&0xFF)==0xFF)
  77. {
  78.   i++;
  79.   
  80.   if(i>400)
  81.   {
  82.    i=0;
  83.          }
  84. …………
  85. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

全部资料51hei下载地址:
长短按键.rar (68.63 KB, 下载次数: 221)

评分

参与人数 2黑币 +57 收起 理由
zqy181818 + 7
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2017-11-8 17:27 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:130231 发表于 2017-11-8 20:39 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:130231 发表于 2017-11-8 20:45 | 显示全部楼层
楼主请教一下void configtimer0(uchar ms)是什么函数。也就是它的作用。
回复

使用道具 举报

ID:247636 发表于 2017-11-10 09:11 来自手机 | 显示全部楼层
好东西,谢谢楼主分享!
回复

使用道具 举报

ID:244951 发表于 2017-11-12 10:25 | 显示全部楼层
非常详细,学习了!!!
回复

使用道具 举报

ID:249116 发表于 2017-11-13 22:21 | 显示全部楼层
非常详细,学习了!!!
回复

使用道具 举报

ID:247166 发表于 2017-11-14 00:03 来自手机 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:323951 发表于 2018-5-28 14:10 | 显示全部楼层
好东西,谢谢楼主分享!
回复

使用道具 举报

ID:323951 发表于 2018-5-28 15:51 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:292815 发表于 2018-8-27 10:33 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:403447 发表于 2018-10-16 08:22 | 显示全部楼层
对我等初学者,有莫大的帮助,感谢楼主。
回复

使用道具 举报

ID:437990 发表于 2018-12-14 14:31 | 显示全部楼层
zqy181818 发表于 2017-11-8 20:45
楼主请教一下void configtimer0(uchar ms)是什么函数。也就是它的作用。

相当于把中断装初值 以及各类中断的启动 写成一个函数 用于中断初始化 方便调用
回复

使用道具 举报

ID:437990 发表于 2018-12-21 19:28 | 显示全部楼层
void keyscan()
{
keystay=(keystay<<1) | (!keyback);
}

  if((keystay&0xFF)==0x00)

请问这两个有前辈可以解释一下吗?看不太懂。。。
回复

使用道具 举报

ID:429906 发表于 2018-12-21 19:39 | 显示全部楼层

好东西,谢谢楼主分享!
回复

使用道具 举报

ID:451762 发表于 2018-12-21 19:54 | 显示全部楼层
楼主牛逼
回复

使用道具 举报

ID:262034 发表于 2018-12-22 09:02 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

ID:446902 发表于 2018-12-22 13:23 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:164189 发表于 2019-2-21 14:12 | 显示全部楼层
来学习的
回复

使用道具 举报

ID:462433 发表于 2019-3-7 21:08 | 显示全部楼层
程序中的i是干嘛的呀?
回复

使用道具 举报

ID:166284 发表于 2019-4-18 11:58 | 显示全部楼层
扫描函数 能解释一下吗
回复

使用道具 举报

ID:166284 发表于 2019-4-18 11:58 | 显示全部楼层
s26250 发表于 2018-12-21 19:28
void keyscan()
{
keystay=(keystay

这个我也没看懂,同求
回复

使用道具 举报

ID:634487 发表于 2019-11-3 16:39 | 显示全部楼层
谢谢  下个学习下
回复

使用道具 举报

ID:634898 发表于 2019-11-3 20:18 | 显示全部楼层
这个很高端  谢谢楼主分享
回复

使用道具 举报

ID:230975 发表于 2019-11-4 10:11 | 显示全部楼层
zqy181818 发表于 2017-11-8 20:45
楼主请教一下void configtimer0(uchar ms)是什么函数。也就是它的作用。

给定时器初始化,赋值
回复

使用道具 举报

ID:85743 发表于 2019-11-14 01:19 | 显示全部楼层

非常详细,学习了!!!51黑有你更精彩!!!
回复

使用道具 举报

ID:91521 发表于 2019-11-14 11:19 | 显示全部楼层
不实用,不能实现到达时间不松按键也相应
回复

使用道具 举报

ID:76612 发表于 2021-10-17 09:17 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:6467 发表于 2023-11-6 17:00 | 显示全部楼层
好资料,51黑有你更精彩!!! 就是需要这方面的指导;谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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