📄 反转矩阵键盘.c
字号:
#include<reg51.h>
#define Key P1
#define Display P2
unsigned char key;
unsigned char code LEDCODE[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳
void delay(void);
unsigned char keyscan();
unsigned char disp(unsigned char key);
void main(void)
{
unsigned char keycode,num;
while(1)
{
num=keyscan();
delay();
keycode=disp(num);
Display=LEDCODE[keycode];
}
}
void delay(void)
{
unsigned char i;
for(i=0;i<200;i++){}
}
unsigned char keyscan(void)
{
unsigned char code_h; //行扫描值
unsigned char code_l; //列扫描值
Key=0xf0;
if((Key&0xf0)!=0xf0)
{
delay();
if((Key&0xf0)!=0xf0)
{
code_h=0xFE; //扫描第一列
while((code_h&0x10)!=0xf0)
{
Key=code_h;
if((Key&0xf0)!=0xf0)
{
code_l=(Key&0xf0|0x0f);
return((~code_h)+(~code_l));
}
else
code_h=(code_h<<1)|0x01;
}
}
}
}
unsigned char disp(unsigned char temp)
{
switch(temp)
{
case 0x11: temp=0;break;
case 0x12: temp=1;break;
case 0x14: temp=2;break;
case 0x18: temp=3;break;
case 0x21: temp=4;break;
case 0x22: temp=5;break;
case 0x24: temp=6;break;
case 0x28: temp=7;break;
case 0x41: temp=8;break;
case 0x42: temp=9;break;
case 0x44: temp=10;break;
case 0x48: temp=11;break;
case 0x81: temp=12;break;
case 0x82: temp=13;break;
case 0x84: temp=14;break;
case 0x88: temp=15;break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -