久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
十分好用的4*4矩陣鍵盤掃描程序
[打印本頁]
作者:
hutians
時間:
2015-2-10 20:39
標題:
十分好用的4*4矩陣鍵盤掃描程序
十分好用的4*4矩陣鍵盤掃描程序,更重要的是程序十分的簡短,幾行代碼就解決了4*4 掃描取鍵值,防抖動 ,此程序運用了一個很巧妙的算法!上程序供大家研究,此程序經過改進,可以實現長按鍵識別 組合按鍵識別。如果有哪里不夠好 也請大家指出。程序算法先自己研究,初學者如果看不明白,貼子頂起來,我給大家解釋!把文本格式奉上 直接復制到你的程序里。
volatile unsigned char CF[4]; //按鍵觸發標志(表示4列,每一列同一行的
//值是一樣的但列標不一樣來區分不同列的鍵)
volatile unsigned char KeyVal;//鍵值
code unsigned char KeyOut[4] = {0xef,0xdf,0xbf,0x7f}; //4X4按輸出端控制
#define KEY P2 //P2口作為4*4矩陣鍵盤輸入
/*
**描述:新型4X4按鍵掃描程序 放在1ms-10ms中斷內使用(十分穩定不需要再寫消抖程序)
**備注:按鍵彈起時 keyVal = 0 單鍵按下 keyVal 有16個值,你自己程序可以針對不同值
**進行不同程序操作 keyVal單鍵值分別為
**0x11,0x12,0x14,0x18,
**0x21,0x22,0x24,0x28,
**0x31,0x32,0x34,0x38,
**0x41,0x42,0x44,0x48,
*/
void Key_Head()
{
unsigned char ReadData[4];
static unsigned char i;
if(++i>=4)i=0;
KEY = KeyOut[i]|0x0f; //忽略低4位
ReadData[i] = (KEY|0xf0)^0xff; //忽略高4位 取反
CF[i] = ReadData[i] & (ReadData[i] ^ Cont[i]);
Cont[i] = ReadData[i];
//輸出鍵值
switch(CF[i])//第i列
{
case 0x08: KeyVal = (i<<4+8);break;
case 0x04: KeyVal = (i<<4+4);break;
case 0x02: KeyVal = (i<<4+2);break;
case 0x01: KeyVal = (i<<4+1);break;
default:KeyVal = 0;break;
}
}
復制代碼
作者:
zlkj
時間:
2015-6-21 05:48
謝謝!希望學習完整程序。
作者:
hbljcxl
時間:
2015-6-30 21:57
樓主好,程序好精練,中間有好多地方看不懂,但是復制下來,在程序中試了你的程序,發現少定義了Cont[i]數組,加上后,程序也不成功,請教在主函數中如何調用 你的函數,多謝了!
作者:
大頭5374
時間:
2016-4-26 15:05
這個程序可以直接拿來輸入數值嗎
作者:
瑾年Higher
時間:
2019-5-17 17:55
還煩請樓主解釋一下
作者:
zhangxinwu
時間:
2020-2-20 00:54
用不了啊!咋回事啊!
作者:
xuyubin
時間:
2020-2-23 16:12
本帖最后由 xuyubin 于 2020-2-26 09:28 編輯
/*-------------------------------------------------------------------------
功能:矩陣鍵盤掃描程序,每經過10ms循環,進行一次4種可能的鍵值判斷,由索引I控制,經過4輪
便可判斷出所有可能的鍵值,(由程序執行的間隔來產生消抖作用,減少了程序執行時間)
**備注:無按鍵按下時 Key_Val = 0
單個鍵按下 Key_Val 有16個值
**0x01,0x02,0x04,0x08
**0x11,0x12,0x14,0x18,
**0x21,0x22,0x24,0x28,
**0x31,0x32,0x34,0x38,
可根據判斷出的鍵值代表不同的按鍵按下
---------------------------------------------------------------------------*/
uchar Key_Judge()
{
static uchar Key_Code[4]; //每輪按鍵掃描后鍵值處理后數組
static uchar Key_Code_Store[4]; //每輪按鍵掃描后鍵值處理后儲存的數組,以偏在下輪程序中對比確認鍵值
static uchar Key_Val; //按鍵掃描程序返回的鍵值
static uchar ReadData[4]; //按鍵讀出后,數據處理后的暫存數組
static uchar i; //每輪按鍵判斷處理索引
uchar key_Return=99;
if(++i>=4) i=0; //每輪判斷后,索引都+1,經過4輪后又自動恢復至0;
Key_Input = KeyOut
|0x0f; //再第I輪,按設計好的數組,對高4位的進行拉低,判斷16個鍵值,需要循環4輪
ReadData
= (Key_Input|0xf0)^0xff; //重新讀取KEY_Input口,忽略高4位 異或取反后得出按鍵按下時后被拉低的位
Key_Code
= ReadData
& (ReadData
^ Key_Code_Store
);
//通過與上一循環周期前(4輪,40ms)前儲存的按鍵讀取值做對比,不同且為非0值,則表示按鍵按下持續超過40
//如相同或都是為0,則得出的值為0,表示沒有按鍵按下,或者按鍵一直被按住情況
Key_Code_Store
= ReadData
;
//儲存第i輪到按鍵讀取值,以便下一循環周期(4輪,40ms)后對比用
switch(Key_Code
) //將第i輪按鍵讀取值附上i輪索引值,以便產生16個可能的鍵值供判斷按鍵用
{
case 0x08: Key_Val = (i<<4)+8;break;
case 0x04: Key_Val = (i<<4)+4;break;
case 0x02: Key_Val = (i<<4)+2;break;
case 0x01: Key_Val = (i<<4)+1;break;
default:Key_Val = 0;break;
}
作者:
wsh791
時間:
2020-2-23 21:58
學習了謝謝
作者:
wengjiamin
時間:
2021-1-9 09:07
樓主好,程序好精練,中間有好多地方看不懂,但是復制下來,在程序中試了你的程序,發現少定義了Cont[i]數組,加上后,程序也不成功,請教在主函數中如何調用 你的函數,多謝了!
在定時器1ms-10ms中斷中進行調用
作者:
wengjiamin
時間:
2021-1-9 09:11
//反轉法掃描4*4鍵盤程序
void keyscan(void) //鍵盤掃描函數
{ unsigned char n,m;
P1=0xf0;//全行掃描
n=P1; //讀列的狀態
n&=0xf0;//屏蔽掉行的狀態
P1=0x0f;//全列掃描
m=P1;//讀行的狀態
m&=0x0f;//屏蔽掉列的狀態
n=n|m;
switch(n)
{
case(0xee):display(3);break; //1110_1110
case(0xde):display(2);break; //1101_1110
case(0xbe):display(1);break; //1011_1110
case(0x7e):display(0);break; //0111_1110
case(0xed):display(7);break; //1110_1101
case(0xdd):display(6);break; //1101_1101
case(0xbd):display(5);break; //1011_1101
case(0x7d):display(4);break; //0111_1101
case(0xeb):display(11);break; //1110_1011
case(0xdb):display(10);break; //1101_1011
case(0xbb):display(9);break; //1011_1011
case(0x7b):display(8);break; //0111_1011
case(0xe7):display(15);break; //1110_0111
case(0xd7):display(14);break; //1101_0111
case(0xb7):display(13);break; //1011_0111
case(0x77):display(12);break; //0111_0111
}
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品免费
|
精品亚洲一区二区三区
|
国产一区二区三区视频
|
欧美一级艳片视频免费观看
|
青草网
|
亚洲国产精
|
福利影院在线观看
|
手机看片在线
|
午夜精品国产精品大乳美女
|
日韩亚洲天堂
|
日韩国产欧美
|
日本不卡在线播放
|
国产成人在线免费视频
|
国产乱码精品一区二区三
|
国产在线不卡
|
综合久久久
|
99热国产在线
|
91成人在线观看喷潮蘑菇
|
日韩专区在线
|
亚洲一区二区国产精品
|
精品伊人
|
日韩av影片
|
日日日干干干
|
五月婷婷综合网
|
日韩视频免费大全中文字幕
|
婷婷丁香六月
|
国产乡下妇女做爰视频
|
亚洲精品久久久久久久久久久
|
久久久久久一区二区
|
精品国产精品三级精品av网址
|
黄色小说视频网站
|
亚洲狠狠干
|
www.色综合
|
欧美国产精品一区二区
|
在线一区二区三区
|
av黄色在线
|
成人免费视频观看视频
|
91精品91久久久中77777
|
午夜视频在线播放
|
麻豆国产一区二区三区四区
|
久热伊人
|