|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請問大家4x4矩陣鍵盤掃描兩個按鍵同時按下的程序應(yīng)該如何編寫 |
| 作者:zhangna01 欄目:單片機 |
我只是知道一個按鍵的掃描程序是這個,兩鍵同時按下,應(yīng)該如何修改呢?謝謝大家,請幫幫忙! JIANPAN: L1: MOV R3,#0F7H MOV R1,#00H L2: MOV A,R3 MOV P2,A MOV A,P2 MOV R4,A SETB C MOV R5,#04H L3: RLC A JNC KEYIN INC R1 DJNZ R5,L3 MOV A,R3 SETB C RRC A MOV R3,A JC L2 JMP L1 KEYIN: MOV R7,#20 D2: MOV R6,#248 DJNZ R6,$ DJNZ R7,D2 MOV A,R1 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV R2,A XRL A,#42H JZ ZHUANGO ............... |
| 2樓: | >>參與討論 |
| 作者: conwh 于 2006/6/29 22:02:00 發(fā)布:
雙鍵(相當(dāng)于SHIFT)可以作為特殊處理 |
|
| 3樓: | >>參與討論 |
| 作者: xwj 于 2006/6/29 22:39:00 發(fā)布:
行列掃描鍵盤可以準(zhǔn)確檢測出雙鍵按下,再多就無法區(qū)分了 //給你個很久以前的程序,希望你能看得懂 #include <reg52.h> #define uLONG unsigned LONG #define uint unsigned int #define uCHAR unsigned CHAR extern void delay(unsigned int x); unsigned CHAR Tab_key[]= //行列式鍵盤映射 {0x00, //無鍵按下 '7','8','9','/', '4','5','6','*', '1','2','3','-', 'C','0','=','+', //下面為按'C'同時再按的鍵: '7','8','9','/', '4','5','6','*', '1','2','3','-', '0','=','+',}; // P1口行列式鍵盤 // #define KEYPIN_L P1 // 定義鍵掃描列端口為 P1低四位輸入 // #define KEYPIN_H P1 // 定義鍵掃描行端口為 P1高四位掃描輸出 // // P1口行列式鍵盤 // //公用函數(shù) unsigned CHAR Keyscan(void); // 鍵掃描函數(shù) // //內(nèi)部私有函數(shù) unsigned CHAR fnKeycode(unsigned CHAR key); // 根據(jù)鍵盤映射表輸出順序鍵值 // /* // P1口行列式鍵盤 // extern unsigned CHAR Keyscan(void); // 鍵掃描函數(shù) // */ // P1口行列式鍵盤 // //---------------------------------------------------------------------------// unsigned CHAR Keyscan(void) // 鍵掃描函數(shù) // { unsigned CHAR sccode,recode,keytemp = 0; KEYPIN_L = KEYPIN_L|0x0f; // P1低四位為列線輸入 // KEYPIN_H = KEYPIN_H&0x0f; // P1高四位為行線發(fā)全零掃描碼 // if ((KEYPIN_L&0x0f) != 0x0f) { delay(10); // 延時 10 MS 消抖 // if ((KEYPIN_L&0x0f) != 0x0f) { sccode = 0xef; // 逐行掃描碼初值(1110 1111) // while(sccode != 0xff) //將掃描4次,keytemp為每次鍵值相 或的值 // { KEYPIN_H = sccode; // 輸出行掃描碼 // if ((KEYPIN_L&0x0f) != 0x0f) // 本行有鍵按下 // { recode = (KEYPIN_L&0x0f)|0xf0; // 只要低位,高位置1 // keytemp |= (~sccode)+(~recode); //特征碼(高位為列P3,低位為行KEYPIN_H) // } sccode = (sccode << 1)|0x01; | |
| 4樓: | >>參與討論 |
| 作者: zhangna01 于 2006/6/30 19:10:00 發(fā)布:
看不太懂,不過謝了 |
|
| 5樓: | >>參與討論 |
| 作者: xwj 于 2006/6/30 19:15:00 發(fā)布:
這樣都說看不懂只說明你根本就沒仔細看! 否則真的只能懷疑你的智力了 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |