前瞻知识
1.如何生成stc的头文件
直接点保存文件到你建的目录下方就行了,就可以直接使用这个头文件了
2.按键知识
这个是按键的原理图
可以简单的理解成,按下按键的时候,按的那个按键为**“0”**
没按下的“1”就行了
所以我们写程序的时候根据这个逻辑写就行了
写矩阵的时候先行后列或者先列后行的判断是哪一个按键就行了
keyscan是什么
我们只用判断keyscan的值就可以判断是那个按键按下了,这个只是一个变量
你想叫啥就直接命名就行了,不一定要一模一样
列矩阵按键写法
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
char anjian()
{
int keyscan;
P3=0x0f;P42=P44=0; //注意这种写法,头文件是用stc生成的
if(s4==0||s5==0||s6==0||s7==0)
{
delay(10); //消抖
P34=P35=P42=P44=1;
P44=0; //如果是P44这行按下了
if(s4==0) keyscan=4; //如果是s4这个按键按下了
else if(s5==0) keyscan=5; //如果是s5这个按键按下了
else if(s6==0) keyscan=6; //如果是s6这个按键按下了
else if(s7==0) keyscan=7; //如果是s7这个按键按下了
P42=0;
if(s4==0) keyscan=8;
else if(s5==0) keyscan=9;
else if(s6==0) keyscan=10;
else if(s7==0) keyscan=11;
P35=0;
if(s4==0) keyscan=12;
else if(s5==0) keyscan=13;
else if(s6==0) keyscan=14;
else if(s7==0) keyscan=15;
P34=0;
if(s4==0) keyscan=16;
else if(s5==0) keyscan=17;
else if(s6==0) keyscan=18;
else if(s7==0) keyscan=19;
}
P3=0x0f;P42=P44=0;
while(s4==0||s5==0||s6==0||s7==0); //消抖
return keyscan;
}
}
行矩阵按键写法
//这个和列矩阵差不多
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C4=P3^4;
sbit C3=P3^5;
sbit C2=P4^2;
sbit C1=P4^4;
char key_scan()
{
int i;
{
R1=0;
R2=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)i=0;
else if(C2==0)i=1;
else if(C3==0)i=2;
else if(C4==0)i=4;
R2=0;
R1=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)i=5;
else if(C2==0)i=6;
else if(C3==0)i=7;
else if(C4==0)i=8;
R3=0;
R2=R1=R4=1;
C1=C2=C3=C4=1;
if(C1==0) i=8;
else if(C2==0)i=9;
else if(C3==0)i=10;
else if(C4==0)i=11;
R4=0;
R2=R3=R1=1;
C1=C2=C3=C4=1;
if(C1==0)i=12;
else if(C2==0)i=13;
else if(C3==0)i=14;
else if(C4==0)i=15;
}
return i;
}
矩阵键盘写法
void key_scan()
{
R1=0;
R2=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
//自己添加的按键按下后的代码
}
else if(C2==0)
{
while(C2==0);
//自己添加的按键按下后的代码
}
else if(C3==0)
{
while(C3==0);
//自己添加的按键按下后的代码
}
else if(C4==0)
{
while(C4==0);
//自己添加的按键按下后的代码
}
R2=0;
R1=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
//自己添加的按键按下后的代码
}
else if(C2==0)
{
while(C2==0);
//自己添加的按键按下后的代码
}
else if(C3==0)
{
while(C3==0);
//自己添加的按键按下后的代码
}
else if(C4==0)
{
while(C4==0);
//自己添加的按键按下后的代码
}
R3=0;
R2=R1=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
//自己添加的按键按下后的代码
}
else if(C2==0)
{
while(C2==0);
//自己添加的按键按下后的代码
}
else if(C3==0)
{
while(C3==0);
//自己添加的按键按下后的代码
}
else if(C4==0)
{
while(C4==0);
//自己添加的按键按下后的代码
}
R4=0;
R2=R3=R1=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
//自己添加的按键按下后的代码
}
else if(C2==0)
{
while(C2==0);
//自己添加的按键按下后的代码
}
else if(C3==0)
{
while(C3==0);
//自己添加的按键按下后的代码
}
else if(C4==0)
{
while(C4==0);
//自己添加的按键按下后的代码
}
}
独立按键写法1
比较推荐这个写法
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
char anjian()
{
char keyanjian;
if(s4==0||s5==0||s6==0||s7==0)
{
delay(10);
if(s4==0)keyanjian=4;
else if (s5==0)keyanjian=5;
else if (s6==0)keyanjian=6;
else if (s7==0)keyanjian=7;
}while(s4==0||s5==0||s6==0||s7==0);
return keyanjian;
}
独立按键写法2
sbit s6=P3^1;
void anjian()
{
if(s6 == 0)
{
delay(100);
if(s6==0)
{
EA=~EA;
while(s6 == 0);
{
//自己添加的按键按下后的代码
}
}
}
//后面以此类推