新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 狀態(tài)機(jī)方式按鍵掃描單片機(jī)程序

狀態(tài)機(jī)方式按鍵掃描單片機(jī)程序

作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
這是從http://www.51hei.com/bbs/dpj-19294-1.html這個(gè)單片機(jī)做的收音機(jī)里面截取出來的一個(gè)子程序,完整的代碼和adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=17&is_app=0&jk=66a41a025f30382d&k=%D4%AD%C0%ED%CD%BC&k0=%D4%AD%C0%ED%CD%BC&kdi0=0&luki=3&n=10&p=baidu&q=98059059_cpr&rb=0&rs=1&seller_id=1&sid=2d38305f21aa466&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fmcu%2F1974%2Ehtml&urlid=0" id="5_nwl" mpid="5" target="_blank">原理圖可從原帖下載.

/*-----------狀態(tài)機(jī)方式按鍵掃描-----------*/
/*------------外部晶振為 12MHz-----------*/
/*--------最后修改2011.02.26--------------*/
#include "STC12C5620AD.H"
#include "Key_Scan.H"
#define Key_Mask 0x0f //屏蔽不用的按鍵,不用的按鍵用0屏蔽

本文引用地址:http://m.butianyuan.cn/article/201612/325014.htm

/********************** 聲明外部變量**************************/
extern uchar Work_Mode; //From Main.c
/********************** 按鍵掃描讀取**************************/
uchar Key_Scan(void)
{
static uchar Key_State=0; //定義按鍵狀態(tài)
uchar Key_Press;
uchar Key_Return=0x00; //定義按鍵返回的鍵值
Key_Press=Key_Input&Key_Mask;//讀按鍵I/O電平
switch(Key_State)
{
case 0: // 按鍵初始態(tài)
if (Key_Press!=Key_Mask)
Key_State=1; // 鍵被按下,狀態(tài)轉(zhuǎn)換到鍵確認(rèn)態(tài)
break;
case 1: // 按鍵確認(rèn)態(tài)
if (Key_Press==Key_Input&Key_Mask)
{
Key_Return=Key_Press; // 按鍵仍按下且鍵值鍵值,按鍵確認(rèn)輸出
BEEP_DRV=1; // 驅(qū)動(dòng)蜂鳴器
Key_State=2;// 狀態(tài)轉(zhuǎn)換到鍵釋放態(tài)
}
else
Key_State=0;// 按鍵已抬起或改變,并轉(zhuǎn)換到按鍵初始態(tài)
break;
case 2:
if (Key_Press==Key_Mask)
{
Key_State=0;//按鍵已釋放,轉(zhuǎn)換到按鍵初始態(tài)
BEEP_DRV=0;// 關(guān)閉蜂鳴器
}
else
if(Work_Mode==1)
{
Key_Return=Key_Press|0x09; // 只有調(diào)臺(tái)模式并且只有>>| 和 |<< 才能連按
BEEP_DRV=0;// 關(guān)閉蜂鳴器
}
else
BEEP_DRV=0;// 關(guān)閉蜂鳴器
break;
}
return Key_Return;
}



評(píng)論


技術(shù)專區(qū)

關(guān)閉