}
switch(key_h)
{
case 0xee:P0=~smgduan[15];break;
case 0xde:P0=~smgduan[14];break;
case 0xbe:P0=~smgduan[13];break;
case 0x7e:P0=~smgduan[12];break;
case 0xed:P0=~smgduan[11];break;
case 0xdd:P0=~smgduan[10];break;
case 0xbd:P0=~smgduan[9];break;
case 0x7d:P0=~smgduan[8];break;
case 0xeb:P0=~smgduan[7];break;
case 0xdb:P0=~smgduan[6];break;
case 0xbb:P0=~smgduan[5];break;
case 0x7b:P0=~smgduan[4];break;
case 0xe7:P0=~smgduan[3];break;
case 0xd7:P0=~smgduan[2];break;
case 0xb7:P0=~smgduan[1];break;
case 0x77:P0=~smgduan[0];break;
}
}
}
}
void main()
{
u8 key_l,key_h;
while(1)
{
P1=0xf0;
key_l=P1;
if(key_l!=0xf0)
{
delay(10);
if(key_l!=0xf0)
{
key_l=key_l|0x0f;
P1=key_l;
key_h=P1;
}
}
x++;
x%=16;
switch(key_h)
{
case 0xee:P0=~smgduan[x];break;
case 0xde:P0=~smgduan[x];break;
case 0xbe:P0=~smgduan[x];break;
case 0x7e:P0=~smgduan[x];break;
case 0xed:P0=~smgduan[x];break;
case 0xdd:P0=~smgduan[x];break;
case 0xbd:P0=~smgduan[x];break;
case 0x7d:P0=~smgduan[x];break;
case 0xeb:P0=~smgduan[x];break;
case 0xdb:P0=~smgduan[x];break;
case 0xbb:P0=~smgduan[x];break;
case 0x7b:P0=~smgduan[x];break;
case 0xe7:P0=~smgduan[x];break;
case 0xd7:P0=~smgduan[x];break;
case 0xb7:P0=~smgduan[x];break;
case 0x77:P0=~smgduan[x];break;
}
}
}作者: zhb2004xp 時(shí)間: 2020-10-31 08:19
你應(yīng)該使用的是數(shù)碼管顯示鍵值來驗(yàn)證效果,這樣是看不出來是否有松手檢測(cè)效果的。你的程序沒有松手檢測(cè),表面看是按了一次(按下時(shí)間較長(zhǎng)),顯示也是對(duì)應(yīng)的鍵值,其實(shí)程序是一直在循環(huán)并輸出這個(gè)鍵值;有了松手檢測(cè),則按一次,不管按下時(shí)間多長(zhǎng),程序只經(jīng)過了1次循環(huán),也只輸出1次該鍵值;
在有些場(chǎng)景中必須有松手檢測(cè)的:
例如一個(gè)設(shè)備4個(gè)按鍵,分別是開機(jī)、關(guān)機(jī)、累加和累減,明顯的開機(jī)和關(guān)機(jī)的按鍵可以不用松手檢測(cè),這個(gè)按鍵就是一個(gè)效果,開機(jī)或關(guān)機(jī),不管按下多少次都無所謂;但是累加和累減就必須有松手檢測(cè),他的效果是重復(fù)并累計(jì)的,如果沒有松手檢測(cè),你按下一次,會(huì)出現(xiàn)累加或累減多次的效果。作者: wps10025 時(shí)間: 2020-10-31 10:46
嗯,明白了。謝謝各位的解釋。