📄 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 + -