久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)按鍵單擊雙擊長(zhǎng)按程序 [打印本頁(yè)]

作者: 李尋歡123    時(shí)間: 2022-12-20 12:36
標(biāo)題: 單片機(jī)按鍵單擊雙擊長(zhǎng)按程序
如何實(shí)現(xiàn)一個(gè)按鍵多種功能,這里介紹了按鍵單擊,雙擊,長(zhǎng)按,源代碼,親測(cè)有效,模塊獨(dú)立,包括.c和.h文件
my_key.c
  1. /**                                       
  2.   * @file    my_key.c                                       
  3.   * @author  xxb                                       
  4.   * @version V1.0                                       
  5.   * @date    07/29/                                      
  6.   * @brief   This file provides all the KEY firmware functions.                                       
  7.   */                                         
  8. #define KEY_GLOBAL                                       
  9.                                        
  10. #include "..\inc\my_key.h"                                       
  11. #include "..\inc\my_led.h"                                       
  12.                                                                         
  13. /****************************************************************************                                       
  14. 【功能說明】按鍵掃描程序                                       
  15. ****************************************************************************/                                          
  16.                                        
  17. U8  Key_Scan(void)                                       
  18. {                                       
  19.                                        
  20.         U8 key_val=NO_KEY;                                
  21.                                        
  22.         //這里添加讀口線的代碼
  23. //        if(!_pa0)
  24. //        {
  25. //                key_val=MyKEY_NAME1;
  26. //        }
  27. //        else if(!_pa2)
  28. //        {
  29. //                key_val=MyKEY_NAME2;
  30. //        }                                
  31.         return (key_val);                                
  32.                                        
  33. }                                       
  34.                                        
  35. /****************************************************************************                                       
  36. 【功能說明】獲取鍵值                                       
  37. ****************************************************************************/                                         
  38.                                        
  39. U8 Get_KeyValue(void)                                       
  40. {                                       
  41.         U8 new_val;                                
  42.         U8 ret=NO_KEY;                                
  43.         static U8  press_time=0;                                
  44.                                        
  45.         new_val=Key_Scan();                        //掃描按鍵               
  46.         switch (key_state)                                
  47.         {                                
  48.                 case 0:                        
  49.                 if(new_val<NO_KEY)   //如果有鍵按下,轉(zhuǎn)到狀態(tài)1。                        
  50.                 {                        
  51.                         old_val=new_val;               
  52.                         press_time=0;               
  53.                         key_state=1;               
  54.                 }                        
  55.                 break;                        
  56.                                        
  57.                 case 1:                        
  58.                 if (old_val==new_val)  //確實(shí)有鍵按下(消抖)                        
  59.                 {                        
  60.                         key_state=2;                                
  61.                 }                        
  62.                 else key_state=0;                        
  63.                 break;        

  64.                 case 2:                        
  65.                 if (old_val==new_val)                  //繼續(xù)按著開始計(jì)時(shí)               
  66.                 {                                
  67.                         if(++press_time>=100)        //100x10=1000MS
  68.                         {        
  69.                                 ret=new_val+10;                //在短按鍵值基礎(chǔ)上加10就是長(zhǎng)按
  70.                                 key_state=3;
  71.                         }        
  72.                 }                        
  73.                 else                                                //松開了返回短按        
  74.                 {               
  75.                         ret=new_val;                        //返回短按        
  76.                         key_state=3;        
  77.                 }                        
  78.                 break;                        
  79.                                        
  80.                 case 3:                                                
  81.                 if (new_val==NO_KEY)         //如果松開鍵                        
  82.                 {                        
  83.                         key_state=4;                   //轉(zhuǎn)到狀態(tài)4 (消抖)               
  84.                 }                        
  85.                 break;                        
  86.                                        
  87.                 case 4:                        
  88.                 if (new_val==NO_KEY)         //如果確實(shí)松開                        
  89.                 {                        
  90.                 key_state=0;                   //轉(zhuǎn)到狀態(tài)0                        
  91.                 }                        
  92.                 else   key_state=3;                        
  93.                 break;                        
  94.         }                                
  95.         return (ret);                                
  96. }                                       
  97.                                        
  98. /**                                       
  99.   * @brief  KEY Process program        (10MS調(diào)一次,最短不能低于5MS,最長(zhǎng)不大于32MS)                                
  100.   * @param  None                                       
  101.   * @retval None                                       
  102.   */                                       
  103. void Key_Process(void)                                       
  104. {                                       
  105.                                 
  106.         U8 key_val=Get_KeyValue();                                
  107.         switch(key_val)               
  108.         {
  109.                 case MyKEY_NAME1:
  110.                 //短按鍵1處理        
  111.                 break;
  112.                
  113.                 case MyKEY_NAME2:
  114.                 //短按鍵2處理               
  115.                 break;
  116.                
  117.                 case MyKEY_NAME1_LONG:
  118.                 //長(zhǎng)按鍵1處理               
  119.                 break;
  120.         }               
  121.         
  122.                
  123. }                                          
復(fù)制代碼


my_key.h
  1. /**
  2.   * @file    my_key.h
  3.   * @author  xxb
  4.   * @version V1.0
  5.   * @date    07/29/2017
  6.   * @brief   This file contains all the functions prototypes for the KEY firmware
  7.   */
  8. #ifndef __MY_KEY_H__
  9. #define __MY_KEY_H__



  10. #include "..\inc\cpu.h"


  11. #ifdef  KEY_GLOBAL
  12. #define KEY_EXT
  13. #else
  14. #define KEY_EXT     extern
  15. #endif

  16. #define NO_KEY     0xFF

  17. #define MyKEY_NAME1                        1
  18. #define MyKEY_NAME2                        2




  19. #define MyKEY_NAME1_LONG        MyKEY_NAME1+10



  20. KEY_EXT U8 key_state;
  21. KEY_EXT U8 old_val;


  22. void Key_Process(void);



  23. #endif
復(fù)制代碼



作者: joe069    時(shí)間: 2023-2-24 16:09
51有你更精彩,收藏了
作者: jovew    時(shí)間: 2023-2-24 19:38
..\inc\my_led.h" 這個(gè)文件沒有,可以發(fā)一下嗎?
程序有錯(cuò)誤!






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品久久久久香蕉网 | 亚洲狠狠 | 久草免费福利 | 日本在线免费 | 久久极品| 免费在线观看av网址 | 欧美日韩视频 | 亚洲国产精品成人综合久久久 | 午夜影晥 | 国产亚洲网站 | 在线不卡视频 | 精品国产aⅴ | 日韩在线观看网站 | av中文天堂| 亚洲国产精品视频一区 | 精品丝袜在线 | 免费一级毛片 | 国产精品视频一区二区三区四区国 | 最近中文字幕在线视频1 | 日韩在线xx | 国产精品乱码一二三区的特点 | 涩涩导航| 999久久久久久久久 国产欧美在线观看 | 一区二区小视频 | 国产在线视频三区 | 成人毛片视频免费 | 男女啪啪高潮无遮挡免费动态 | 天天插天天狠天天透 | 国产在线视频一区二区 | 国产婷婷色一区二区三区 | 国产高清一区二区三区 | 羞羞的视频免费在线观看 | 一区二区视频在线观看 | 国产a区 | 亚洲 中文 欧美 日韩 在线观看 | 91精品国产日韩91久久久久久 | 色综合久| 欧美成人a| 国产做a爱片久久毛片 | 狠狠操av| 成人免费视频网站在线观看 |