4716|2

108

帖子

3806

TA的资源

等待验证会员

楼主
 

按键处理与按键防抖动例子 [复制链接]

本帖最后由 paulhyde 于 2014-9-15 09:37 编辑

  1. /*****************************************************
  2. 本程序的目标是这样的:
  3. 1:不使用INTn中断功能,按键接在普通IO上
  4. 2:由定时器T/C2每隔一段时间检测按键一次, 并具有防抖动功能
  5. 3:每点击按键一次,在按键松开后,变量A=A+1
  6. 4:如果按键按下后不放,则每隔 n ms 就做A=A+1运算一次
  7. 5:在按键按下期间,CPU除了处理按键外,还必须能正常运行主程序
  8. 6:本程序的系统时钟是1MHz
  9. *****************************************************/
  10. #include
  11. #include
  12. #include
  13. unsigned char A,B;
  14. unsigned char n;
  15. bit step1, step2, step3,step4; //使用几个位变量记忆按键状态
  16. //***************************************************
  17. interrupt [10] void TC2_OVF(void)
  18. {
  19. if(n<255) n++;
  20. if(PIND.2==1 && n>8) step1=1; //按键松开一定时间后开始进入可用状态
  21. if(PIND.2==0 && step1) {step1=0; step2=1; n=0;} //按键由可用状态进入到按下状态
  22. if(PIND.2==1 && step2) {step2=0; step3=1; n=0;} //按键由按下状态进入到松开状态
  23. //-------------------------------------------------
  24. //按键按下后...
  25. if(step2)
  26. {
  27. n++;
  28. if(n>60) //如果按下超过一定时间
  29. {
  30. A+=1;
  31. n=40;
  32. step4=1;
  33. }
  34. }
  35. //-------------------------------------------------
  36. if(step3) //按键松开后...
  37. {
  38. step3=0;
  39. if(step4) step4=0; else A+=1;
  40. }
  41. }
  42. //***************************************************
  43. //www.avrdiy.com panxiaoyi
  44. void main(void)
  45. {
  46. PORTB&=209;
  47. DDRB|=46; //设置单片机的4个LCD引脚输出0
  48. lcd_init(); //lcd初始化
  49. lcd_cls(); //清屏,光标回位
  50. DDRD.2=0;
  51. PORTD.2=1; //PD2设置为输入,上拉电阻有效(接按键)
  52. TCCR2B|=4; //T/C2采用系统时钟的64分频
  53. #asm("sei"); //全局中断使能
  54. TIMSK2|=1; //T/C2计数溢出中断使能
  55. while (1)
  56. {
  57. B+=1;
  58. lcd_gotoxy(12,1);
  59. lcd_putsf("AVRDIY.COM",10);
  60. lcd_gotoxy(15,3);
  61. lcd_putchar(B/100+48); //显示变量B
  62. lcd_putchar(B/10%10+48);
  63. lcd_putchar(B%10+48);
  64. lcd_gotoxy(52,3);
  65. lcd_putchar(A/100+48); //显示变量A
  66. lcd_putchar(A/10%10+48);
  67. lcd_putchar(A%10+48);
  68. };
  69. }
复制代码

 

此帖出自电子竞赛论坛

最新回复

本帖最后由 paulhyde 于 2014-9-15 09:37 编辑 参考一下看看,实验中也曾经遇到过这种问题    详情 回复 发表于 2010-3-1 18:54
点赞 关注
 
 

回复
举报

1861

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
本帖最后由 paulhyde 于 2014-9-15 09:37 编辑

我最近在学习FPGA,那个VHDL语言去控制键盘,我就遇到了防抖动的问题,还没有解决呢!我也得好好做做了,

 

此帖出自电子竞赛论坛
个人签名有目的的学习是最有效的学习!
 
 
 

回复

720

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
本帖最后由 paulhyde 于 2014-9-15 09:37 编辑

参考一下看看,实验中也曾经遇到过这种问题

 

此帖出自电子竞赛论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表