由于感應(yīng)按鍵跟使用的電源、接觸方式、隔離介質(zhì)不同,很多工程師使用專用感應(yīng)按鍵IC。選擇專用IC的一個(gè)總要原因是由于專用IC只要調(diào)節(jié)一個(gè)外部元件就可以。針對(duì)這些特點(diǎn)編寫了針對(duì)海爾的HR7P201的MCU感應(yīng)按鍵庫(kù)。設(shè)計(jì)要求:1、初次使用只要簡(jiǎn)單選擇相關(guān)感應(yīng)按鍵通道 和靈敏度。其它參數(shù)庫(kù)文件內(nèi)部使用默認(rèn)設(shè)計(jì)就使用2、針對(duì)高端用戶庫(kù)文件可以支持LED和感應(yīng)按鍵復(fù)用,感應(yīng)按鍵跟LED驅(qū)動(dòng)iC的通信線復(fù)用,感應(yīng)按鍵跟LCD驅(qū)動(dòng)IC復(fù)用特點(diǎn)3、調(diào)試函數(shù)??梢苑奖阌脩粼陂_發(fā)時(shí),查看每個(gè)通道的情況 。方便更精準(zhǔn)的使用感應(yīng)按鍵。 一、最簡(jiǎn)易的測(cè)試程序 void main()
{
clr_ram();//清內(nèi)存 while(1) { //感應(yīng)按鍵通道任意選擇 TK_SET(0,25);//開啟感應(yīng)按鍵通道0,靈敏度為25 TK_SET(6,,25);//開啟感應(yīng)按鍵通道6,靈敏度為25 TK_SET(7,25);//開啟感應(yīng)按鍵通道7,靈敏度為25 if(TKCTL==2)//感應(yīng)按鍵轉(zhuǎn)換完 { TK_READ_DATA();//讀感應(yīng)按鍵結(jié)果
TK_START();//啟動(dòng)感應(yīng)按鍵
} TK_MANAGE();//感應(yīng)按鍵處理函數(shù) KEY_OK=TK_RETUN_SINGLE();//感應(yīng)按鍵所有鍵讀出結(jié)果 }
一、感應(yīng)按鍵通道選擇和靈敏度設(shè)置
void TK_SET(unsigned char NUM,unsigned charSENSITIVITY)
TK_SET是感應(yīng)按鍵通道設(shè)定函數(shù)
NUM是通道值,HR7P201有14個(gè)通道分別是TK0到TK13。NUM的值范圍為0到13.0代表TK0,13代表TK13.
SENSITIVITY是靈敏度,建議賦值為(5-80)
比如選用感應(yīng)按鍵0,靈敏度為20;感應(yīng)鍵9,靈敏度為25;
TK_SET(0,20);
TK_SET(9,25);
二、感應(yīng)按鍵基線更新速度設(shè)置
void TK_BASELINE_SPEED(unsigned charTK_BASE_UP_SPEED,unsigned charTK_BASE_DOWN_SPEED,unsigned charTK_BASE_OK_SPEED);
TK_BASELINE_SPEED是基線更新速度函數(shù)
TK_BASE_UP_SPEED是向上更新速度,一般取值為(5-40);默認(rèn)為20;
在滿足緩慢按下手感情況下,值越小越好。便于環(huán)境自適應(yīng)。
TK_BASE_DOWN_SPEED向下更新速度,一般取值為(5-40);默認(rèn)為20;
在滿足手按住按鍵上電后再次按下手感情況下,值越大越好。
TK_BASE_OK_SPEED相等更新速度,一般取值為(5-40);默認(rèn)為20;
在滿足上電后馬上操作情況下,值越大越好。
三、感應(yīng)按鍵系統(tǒng)初始化
void TK_SYS_CONFIG(unsigned char TK_single_ack_SPEED,unsigned char TK_strongest_ack_SPEED,unsigned char TK_AP,unsigned char TK_CLK);
TK_SYS_CONFIG是系統(tǒng)選項(xiàng)
TK_single_ack_SPEED是多鍵相應(yīng)速度,一般取值(1-20)默認(rèn)為4;
多鍵按下相應(yīng)速度,相當(dāng)于普通按鍵的濾波次數(shù)。在滿足手感情況下,值越大越好。
TK_strongest_ack_SPEED是最強(qiáng)鍵相應(yīng)速度,一般取值(1-20)默認(rèn)為4;
最強(qiáng)鍵按下相應(yīng)速度,相當(dāng)于普通按鍵的濾波次數(shù)。在滿足手感情況下,值越大越好。最強(qiáng)鍵是在感應(yīng)按鍵潮濕情況下,單個(gè)輸出的有效鍵
TK_AP是感應(yīng)按鍵的放大倍數(shù),取值范圍是(1-255);默認(rèn)為20;
TK_CLK是最多按鍵有效數(shù)和感應(yīng)模塊頻率,高四位為感應(yīng)按鍵最多按鍵有效數(shù)(默認(rèn)值為14),低四位為感應(yīng)模塊頻率默認(rèn)值為1
高四位設(shè)定(2-14):
1、 在調(diào)試階段設(shè)定為14
2、 沒有組合鍵高四位設(shè)定為2
3、 有組合鍵設(shè)定為組合鍵數(shù)加1.比如是兩個(gè)鍵的組合鍵設(shè)定為3.
低四位的設(shè)定(0-3):
1、 用示波器看感應(yīng)按鍵的波形,在波形不變形的情況下數(shù)值越小越好
2、 查看按鍵結(jié)果,在數(shù)值不變情況下,數(shù)值越小越好。查看按鍵結(jié)果使用函數(shù)unsigned intTK_RETUN_RAWDATA(unsigned char NUM);
四、感應(yīng)按鍵轉(zhuǎn)換結(jié)果讀出函數(shù)
void TK_READ_DATA();
感應(yīng)按鍵轉(zhuǎn)換完利用本函數(shù)保存轉(zhuǎn)換結(jié)果
五、感應(yīng)按鍵通道啟動(dòng)函數(shù)
void TK_START();
啟動(dòng)感應(yīng)按鍵工作
六、感應(yīng)按鍵處理函數(shù)
void TK_MANAGE();
感應(yīng)按鍵處理函數(shù)。建議1毫秒調(diào)用一次。
七、感應(yīng)按鍵軟復(fù)位函數(shù)
voidTK_REST(void);
調(diào)用本函數(shù),感應(yīng)按鍵自動(dòng)復(fù)位學(xué)習(xí)環(huán)境參數(shù)。
八、調(diào)試函數(shù)
unsigned char TK_RETUN_DELTA(unsigned char NUM);
感應(yīng)按鍵變化量讀出函數(shù),NUM的值范圍為0到13.0代表TK0,13代表TK13.
14為最大變化量。
本函數(shù)是為了設(shè)定感應(yīng)按鍵靈敏度,在實(shí)際系統(tǒng)調(diào)試時(shí)按下按鍵讀出相應(yīng)按鍵變化量取本值的1/2作為感應(yīng)按鍵的靈敏度值。
unsigned int TK_RETUN_RAWDATA(unsigned char NUM);
感應(yīng)按鍵原始值讀出函數(shù)。NUM的值范圍為0到13.0代表TK0,13代表TK13.
九、輸出函數(shù)
unsigned char TK_RETUN_strongest();
感應(yīng)按鍵最強(qiáng)值讀出結(jié)果。單鍵有效的時(shí)候建議使用本函數(shù)輸出的結(jié)果。TK0有效輸出為1,TK2有效輸出為3.
unsigned int TK_RETUN_SINGLE();
感應(yīng)按鍵多鍵輸出結(jié)果。TK0輸出在BIT0,TK1輸出在BIT1,TK13輸出在BIT13.
有組合鍵時(shí)利用本輸出結(jié)果。建議在有組合鍵時(shí)加上長(zhǎng)按有效。 void main()
{
clr_ram();//清內(nèi)存
TK_SET(0,25);//開啟感應(yīng)按鍵通道0,靈敏度為25
TK_SET(6,,25);//開啟感應(yīng)按鍵通道6,靈敏度為25
TK_SET(7,25);//開啟感應(yīng)按鍵通道7,靈敏度為25
TK_BASELINE_SPEED(10,10,10);//
//TK_BASELINE_SPEED是基線更新速度函數(shù)
//TK_BASE_UP_SPEED是向上更新速度,一般取值為(5-40);
//TK_BASE_DOWN_SPEED向下更新速度,一般取值為(5-40);
//TK_BASE_OK_SPEED相等更新速度,一般取值為(5-40);
//建議本函數(shù)放主循環(huán)里
TK_SYS_CONFIG(4,4,20,0x21);//TK_SYS_CONFIG(4,4,20,0xf1);
//TK_SYS_CONFIG是系統(tǒng)選項(xiàng)
//TK_single_ack_SPEED是多鍵相應(yīng)速度,一般取值(1-20)
//TK_strongest_ack_SPEED是最強(qiáng)鍵相應(yīng)速度,一般取值(1-20)
//TK_AP是感應(yīng)按鍵的放大倍數(shù),取值范圍是(1-255);
//TK_CLK是感應(yīng)模塊頻率,0xf`1(最多支持15鍵),
while(1)
{
CLR_WDT()
TK_MANAGE();//感應(yīng)按鍵處理函數(shù),每1MS調(diào)用一次
// TK_RETUN_DELTA(9);//感應(yīng)按鍵變化量讀出函數(shù),NUM是通道
// TK_RETUN_DELTA(10);//感應(yīng)按鍵變化量讀出函數(shù),NUM是通道
//TK_RETUN_DELTA(11);//感應(yīng)按鍵變化量讀出函數(shù),NUM是通道
//TK_RETUN_SINGLE();//感應(yīng)按鍵所有鍵讀出結(jié)果
i=TK_RETUN_strongest();//感應(yīng)按鍵最強(qiáng)值讀出結(jié)果
}