平時在開發簡單的工程應用時,會應用引腳資源少一些的mcu,這時要做稍複雜一些的使用者互動功能選項時,就需要單個按鍵實現更多的功能,這時就需要按鍵實現短按、長按、連按功能,以下說明這些功能的實現方法,應用場合在按鍵資源不足無法使用矩陣鍵盤的情況下。
給出的示例**以stc15f系微控制器實現,硬體環境為觸控ic輸出訊號,實際可以應用到輕觸按鍵等任何需要消抖的按鍵需求;
硬體配置:
sbit touchpad_1 =p1^
6;sbit touchpad_2 =p1^
7;sbit touchpad_3 =p1^
5;
單次掃瞄:
u8 touchpadscan_oneshoot
(void
)
實踐步驟-1):首先初始化定時器用於對按鍵按下時間以及連按間隔時間進行計時
定義按鍵按下計時值以及連按間隔時間進行計時值
u16 xdata touchpadactcounter =0;
//觸控計時
u16 xdata touchpadcontinuecnt =0;
//連按間隔計時
定時器初始化
void
(void
)
計時執行
void
timer0_rountine
(void
) interrupt timer0_vector
}
#define timedef_touchpresscontinue 350
//連按間隔時間設定,單位:ms
typedef enum
keycfrm_type;
普通長短按觸發邏輯封裝
void
touchpad_functiontrignormal
(u8 statuspad, keycfrm_type statuscfm)
#endif
switch
(statuspad)
break
;default
:break;}
}break
;case press_shortcnt:
#endif
switch
(statuspad)
break
;default
:break;}
}break
;case press_longa:
#endif
switch
(statuspad)
break
;case2:
break
;case4:
break
;default
:break;}
}break
;case press_longb:
#endif
switch
(statuspad)
break
;case2:
break
;case4:
break
;default
:break;}
}break
;default
:break;}
}
連按觸發邏輯封裝
void
touchpad_functiontrigcontinue
(u8 statuspad, u8 loopcount)
#endif
switch
(statuspad)
break
;case4:
break
;default
:break;}
}break
;case2:
break
;default
:break;}
}break
;case4:
break
;case4:
break
;default
:break;}
}break
;default
:break;}
}
具體業務邏輯
void
touchpad_scan
(void
)else}if
(contertemp > touchcfrmloop_longb && contertemp <= touchcfrmloop_max)}}
}}else}if
(!touchpadcontinuecnt && presscontinueget)
touchpad_temp =0;
} funtrig***_longa =0;
funtrig***_longb =0;
touchpadactcounter =0;
keypress_*** =0;
}}
至此,業務邏輯程式**實現結束,以上**針對按鍵功能對原工程進行剝離整理,若有需要,可檢視博主原工程更為詳細完整**:
同時,以上示例中的列印輸出為串列埠引腳印射輸出,與實際通訊串列埠內部串列埠暫存器共用,這樣做可以節省一點記憶體,具體實現也看檢視原工程.
嵌入式應用選擇合適的微控制器
準備所需硬體介面列表 使用微控制器的基本硬體框圖,準備乙份微控制器需要支援的所有外設介面的列表。微控制器中有兩種常見的介面型別需要列出。第一種是通訊介面,這些是外圍裝置,如usb,spi,i2c,uart等。這些都極大地擾亂了微控制器需要支援多少程式空間。第二種介面是 數字輸入和輸出 a到d 模擬到...
從微控制器到嵌入式
1 什麼是微控制器?微控制器是乙個控制系統,接收管腳中斷輸入,進行一些簡單的邏輯操作,對記憶體或flash進行訪問,再輸出到管腳 2 什麼是嵌入式?嵌入式有linux核心 linux核心功能有 程序管理 記憶體管理 檔案系統管理 裝置驅動 網路管理 3 微控制器和嵌入式有什麼共同點?都是靠中斷驅動,...
嵌入式 微控制器之間的區別
今天在qq群裡,有個看起來資歷豐富的前輩問了乙個問題,嵌入式和微控制器是不是一回事,這個問題提的很好。對於嵌入式方向領域,我最近一直也在想這些底層基礎的概念問題。然而在網上查詢一些前輩的回答,概念太過於深奧,又是那種千篇一律的回答。不能從中學到很多東西。不單是指這一概念,我個人覺得概念不應該弄得過於...