第九屆藍橋杯微控制器設計與開發專案決賽有這一部分:
「s7 :定義為引數"設定"按鍵,按下此按鍵,進入電壓閾值引數設定介面(圖6), 在閾值設定介面下,s6"回顯"按鍵定義為閾值調整功能(備註:非閾值設定介面下,s6按鍵為回顯功能),每次按下s6,電壓閾值增加0.1v,長按0.8秒以上,可實現快速增加功能(備註:電壓閾值設定範圍:0.1v~5.0v),閾值調整完成後,再次按下s7按鍵,退出"設定"介面(圖6),返回資料顯示介面。」
如何利用定時器區分長按和短按?
設定兩類變數
1.檢測當前狀態變數 (如flag_key_1,count_t)
他們會隨著按鍵的狀態隨時發生變化
2.記錄當前狀態變數 (如flag_key_2,time_dat)
用於記錄第一種變化,便於後續的資料處理
短按s7點亮l1,短按s7點亮l2,短按s6點亮l3,短按s6點亮l4
衡量長按短按的時間自擬
(硬體平台:北京國信長天科技ct107d 微控制器綜合實訓平台)
按鍵處理函式:
void
scanf_key()
while
(s6 ==0)
if((s7 !=0)
||(s6 !=0)
)}
定時器中斷服務函式:
void
time_ser
()interrupt 3
else count_t =0;
}
資料處理函式(此處是點亮led):
void
led_show()
else
if(time_dat >=10)
break
;case2:
if((time_dat <=10)
&&(time_dat >=1)
)else
if(time_dat >=10)
break
;}
xbyte[
0x8000
]= led_dat;
flag_key_2 =0;
//處理完畢之後flag_key_2要清零
}
#include
#include
"absacc.h"
unsigned
char code nixietube_date=
;unsigned
char led_dat =
0xff;
sbit s7 = p3^0;
sbit s6 = p3^1;
unsigned
int count_t =
0,time_dat=0;
void
nixietube_show()
;void
delay
(unsigned
int t)
;unsigned
char flag_key_1 =
0,flag_key_2 =0;
void
nixietube_byte_show
(unsigned
char pos,
unsigned
char value)
void
delay
(unsigned
int t)
void
system_init()
void
time_init()
//定時器1初始化
/*******************************==
這裡的變數有2類
1.檢測當前狀態變數 (如flag_key_1,count_t)
他們會隨著按鍵的狀態隨時發生變化
2.記錄當前狀態變數 (如flag_key_2,time_dat)
用於記錄第一種變化
******************************==*/
void
nixietube_show()
//可以用這個函式看按鍵的狀態
void
time_ser
()interrupt 3
else count_t =0;
}void
scanf_key()
while
(s6 ==0)
if((s7 !=0)
&&(s6 !=0)
)}void
led_show()
else
if(time_dat >=10)
break
;case2:
if((time_dat <=10)
&&(time_dat >=1)
)else
if(time_dat >=10)
break
;}
xbyte[
0x8000
]= led_dat;
flag_key_2 =0;
//處理完畢之後flag_key_2要清零
}void
main()
}
微控制器 按鍵定時器檢測 短按 長按
通過使用定時器計數的方法來分辨按鍵的 短按 長按 檢測到引腳被拉低 按鍵按下為低電平,沒有按下為高電平 延時10毫秒 濾波 引腳還是被拉低 確定按鍵被按下 設定按鍵按下標誌 開啟定時器,開始計數 定時器中有乙個全域性變數用於記錄計數值 直到引腳被拉高 按鍵被釋放將為高電平 關閉定時器 檢測按鍵按下標...
2020藍橋杯省賽微控制器2
xbye寫法由於暫時不了解其內部工作原理,在國信長天2020版本的51板子上 p42 p44與按鍵相連。如果用xbyte數碼管顯示雖然方便但如果在中斷中有矩陣鍵盤寫法的按鍵掃瞄,使p42 p44強制拉低或拉高 會出現亂七八糟的的不可預判的bug,如數碼管不可顯示 矩陣鍵盤失效。推薦直接用p埠寫法,在...
藍橋杯微控制器第三屆國賽 門禁系統
1.不要把超聲波程式寫在中斷裡面。如果把超聲波程式寫在中斷裡面的話,可能就不會及時的檢測到溢位標誌,在我開始驗證 的時候出現的現象是最後乙個數碼管閃爍,然後把超聲波寫在主函式裡面就解決了問題。2.程式裡面經常呼叫的 寫在函式裡面,會大大減少 量和重複 並且利於檢查以及 美觀。如寫eeprom和讀ee...