按鍵掃描C語言思路
阿新 • • 發佈:2018-12-11
按鍵掃描(支援連續按)的一般思路
u8 KEY_Scan(void)
{
if(KEY按下)
{
delay_ms(10);//延時10-20ms,防抖。
if(KEY確實按下)
{
return KEY_Value;
}
return 無效值;
}
}
按鍵掃描(不支援連續按)的一般思路
static 關鍵字
定義一個靜態變數,兼具靜態儲存的區域性變數。和自動變數具有相同的作用域,但當包含這些變數的函式完成工作時,它們並不消失
u8 KEY_Scan(void)
{
static u8 key_up=1;
if(key_up && KEY按下)
{
delay_ms(10);//延時,防抖
key_up=0;//標記這次key已經按下
if(KEY確實按下)
{
return KEY_VALUE;
}
}else if(KEY沒有按下) key_up=1;
return 沒有按下
}
static u8 key_up=1; 語句並不是函式的一部分,因為靜態變數和全域性變數在程式調入記憶體是就已經就位了。執行函式是static u8 key_up=1; 看起來是跳過了。key_up的儲存類是空連線的靜態。
函式中 static u8 key_up=1; 定義後,當KET_Scan執行結束後,key_up並不消失,而是保留了賦予的0值,函式下一次執行時仍舊是執行0值
按鍵掃描(兩種模式合二為一)的一般思路
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;
if(mode==1) key_up=1;//支援連續按
if(key_up && KEY按下)
{
delay_ms(10);//延時,防抖
key_up=0;//標記這次key已經按下
if(KEY確實按下)
{
return KEY_VALUE;
}
}else if(KEY沒有按下) key_up=1 ;
return 沒有按下
}
支援連續按時,在if(key_up && KEY按下)判斷語句外,key_up 都會等於1,一直返回KEY_VALUE,
不支援連續按,if(mode==1) key_up=1;失效,按下一次後,key_up=0,不會返回KEY_VALUE。