独闷闷网

 找回密码
 立即注册
搜索

学习笔记之按键扫描_学“手把手教你单片机架构”

查看数: 10283 | 评论数: 6 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-1-30 17:06

正文摘要:

—————***********************************————— 志 很早就知道鸿哥的这篇大作(连载中...)从业将近十年!手把手教你单片机程序框架。,自己惰性很大,做事沉不下心来; 看到群里高手如云,内心嫉妒且 ...

回复

重庆-风雪 发表于 2015-2-5 19:57:18
说的好!
mctrix 发表于 2015-1-31 08:50:25
mctrix 发表于 2015-1-31 08:49
第二:是“按键”。其实就是对按键扫描功能的代码实现。
    在鸿哥的描述中按键分为独立按键和矩阵按 ...

为什么代码老是,粘不全
  1. //1.按下、松开对应信号有无
  2. if (key_sr == 1) //按钮松开,对应信号无
  3. {
  4.     ucKeyStatus = 0;
  5. }
  6. else

  7.      ucKeyStatus = 1 //按钮按下,对应信号有



  8. //2.以上我们只是抓了个有、无状态,现在我们抓上升沿状态
  9. if (key_sr ==1)
  10. {
  11.     ucKeyStatus = 0;
  12. }
  13. else if (ucKeyStatus == 0) //按钮按下的瞬间信号无-->其实就是这个状态,要上升沿就是要从0再到1
  14. {
  15.      ucKeyStatus = 1;
  16.      ucKeySec = 1; //触发了上升沿状态
  17. }


  18. //3.那么下降沿呢?同样
  19. if (key_sr == 0)
  20. {
  21.     ucKeyStatus = 1; //按钮按下,对应信号有
  22. }
  23. else if (ucKeyStatus ==1) //按钮松开瞬间,信号由有到无--就是下降沿
  24. {
  25.     uckeyStatus =0;
  26.     ucKeyStec = 2; //按键触发下降沿
  27. }


  28. //4.按键按下时,按键松开时,其实最简单,第一个代码就是
  29. if (key_sr == 1) //按键松开
  30. {
  31.     ucKeyStatus = 0;
  32.     ucKeySec = 3; //按键松开一直触发
  33. }
  34. else
  35. {
  36.     ucKeyStatus = 1;
  37.     ucKeySec = 4; //按键按下,一直触发
  38. }
复制代码
mctrix 发表于 2015-1-31 08:49:19
    第二:是“按键”。其实就是对按键扫描功能的代码实现。
    在鸿哥的描述中按键分为独立按键和矩阵按键(其实都一回事);按键有上升沿触发;有单击触发,双击触发,按键长短按触发,按键按住加速匀速触发等。

独立按键:
    A.独立按键之按键单击触发

        这里个人感觉最重要的就是一个按键单击触发:为什么?因为简单,所以好理解,其他按键触发都是在此基础上的修改:
            按键单击触发可以分解为两个重点:按键上升沿获取;按键防抖动;
            1.按键上升沿获取:其实是单片机对需求的c语言翻译。“按钮按下,蜂鸣器嘀一声”---->蜂鸣器什么时候响,按钮按下的时候。是按下一直响吗?是按钮一直按,松开的时候响吗?都不是,是按钮刚按下,蜂鸣器就动作。其实我们在听到这句话的时候,如果没听过单片机的话,肯定不会想那么多,什么上升沿,下降沿,”按下,蜂鸣器响不就成了“。但是对于单片机来说,你就是要分解的这么细,按钮按下到松开,对它来说有很多步骤。问题来了,如何获取按键上升沿呢?我们回想下,什么是上升沿,就是信号有无到有这个状态;那我们抓这个状态不就成立,当然前提是你给单片机的能区分这个“有”和“无”,先附上代码:
  1. //1.按下、松开对应信号有无
  2. if (key_sr == 1)      //按钮松开,对应信号无
  3. {
  4.     ucKeyStatus = 0;
  5. }
  6. else
复制代码
       未完待续。


jianhong_wu 发表于 2015-1-30 20:56:16
mctrix 发表于 2015-1-30 17:15
不能修改吗?。。。
编辑比较乱!!!“三区一线”代码不知道怎么不全

很好的分享。果断加精。
mctrix 发表于 2015-1-30 17:15:37
不能修改吗?。。。
编辑比较乱!!!“三区一线”代码不知道怎么不全
  1. void main()
  2. {
  3.     initial_myself();                                //第一区:初始化单片机
  4.     delay_long(100);                           //分割线:等待外围上电稳定
  5.     initial_peripheral();                       //第二区:初始化外围
  6.     while (1)                                      //第三区:循环扫描非中断应用函数
  7.     {
  8.         device_function();
  9.     }
  10. }
复制代码


QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-5-11 20:12 , Processed in 0.198277 second(s), 21 queries .

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