提交的時候很完整,怎么出來就顯示不全了,重新提交一下:
- #include <intrins.h>
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define KEY_LENGTH 16
- uchar code TableKeyData[2][KEY_LENGTH] = {
- {0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7,0x7e, 0x7d, 0x7b, 0x77},
- {'1', '4', '7', '.', '2', '5', '8', '0', '3', '6', '9', '=', '+', '-', '*', '/'}};
- #define ID_KEY_DATA 0
- #define ID_KEY_NAME 1
- // @12.000MHz
- void Delay10ms(void) {
- uchar i, j;
- i = 20;
- j = 113;
- do {
- while (--j) {
- }
- } while (--i);
- }
- uchar KeyScan(void) {
- uchar ucData;
- uchar i;
- // 全部列下拉
- P2 = 0x0f;
- _nop_();
- ucData = P2;
- if (ucData == 0x0f) {
- return KEY_LENGTH;
- }
- Delay10ms();
- // 確定無抖動干擾
- if (P2 != ucData) {
- return KEY_LENGTH;
- }
- // 釋放列下拉,轉換為當前按鍵的行下拉
- P2 = ucData | 0xf0;
- _nop_();
- // 讀取鍵值
- ucData = P2;
- Delay10ms();
- // 確定按鍵唯一準確
- if (P2 != ucData) {
- return KEY_LENGTH;
- }
- // 查表確定按鍵索引(ID),查到有效ID則退出,否則索引等于KEY_LENGTH
- for (i = 0; i < KEY_LENGTH; i++) {
- if (ucData == TableKeyData[ID_KEY_DATA][i]) {
- break;
- }
- }
- // 重置全部列下拉
- P2 = 0x0f;
- _nop_();
- // 等待按鍵釋放
- while (P2 != 0x0f) {
- }
- // 返回按鍵ID
- return i;
- }
- void main(void) {
- uchar ucKey;
- while (1) {
- ucKey = KeyScan();
- if (ucKey < KEY_LENGTH) {
- P1 = ucKey; // 臨時測試,用P1觀察結果
- // 可以送顯示結果,或者串口發送結果,或用swicth執行按鍵任務...
- // LcdDisplay(0, 0, TableKeyData[ID_KEY_NAME][ucKey]);
- }
- }
- }
復制代碼
|