?? 4x4key.c
字號:
#include <reg51.h>
#include <intrins.h>
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned int
#define key P1
// P1.0-P1.3 為橫行
// P1.4-P1.7 為豎列
uchar key_value,temp;
bit key_check();//
void keyvalue();//
void main()
{
key=0xff;
key_value=0;
LCD_init();
LCD_disp_string(0,0,"key_value");
while(1)
{if(key_check())
{
keyvalue();
if(key_value>9)
{
key_value+=7;
}
LCD_write_char(0,1,key_value+'0') ;
}
}
}
bit key_check()
{uchar temp1,temp2;
temp=0;
key=0x0f;
temp1=key;
if(temp1!=0x0f) // 如果有按鍵按下,temp1就不等于0x0f
{
delay_ms(10); // 去抖動
temp1=key; // 在次檢查是否有按鍵按下,以免由其他干擾引起的錯誤判斷
if(temp1!=0x0f)
{
key=0xf0; // 讓列為高電平,行為低電平
temp2=key;
temp=temp1|temp2; // temp等于讓行為低電平列為高電平時key的值或上讓行為高電平列為低電平時key的值
do
{
key=0x0f;
} // 等待按鍵釋放
while(key!=0x0f);
delay_ms(10); //延時去抖
}
}
if(temp!=0)
{
return 1;
} // 有按鍵按下 返回 1
else
{
return 0;
}
}
void keyvalue()
{
switch(temp) // 對鍵值的判斷
{
case 0xee: key_value=0; break;
case 0xde: key_value=1; break;
case 0xbe: key_value=2; break;
case 0x7e: key_value=3; break;
case 0xed: key_value=4; break;
case 0xdd: key_value=5; break;
case 0xbd: key_value=6; break;
case 0x7d: key_value=7; break;
case 0xeb: key_value=8; break;
case 0xdb: key_value=9;break;
case 0xbb: key_value=10;break;
case 0x7b: key_value=11;break;
case 0xe7: key_value=12;break;
case 0xd7: key_value=13;break;
case 0xb7: key_value=14;break;
case 0x77: key_value=15;break;
default: key_value=0; break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -