c51键盘程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=17; //num=17代表:数组中第17的数。
dula=1; //打开段选
P0=0; //给P0一个值
dula=0; //关闭段选
wela=1; //打开位选锁存器的工作方试就
P0=0xc0; //给P0一个值
wela=0;//关闭位选
while(1)
{
display(keyscan()); // 两个函数的调用先用keyscan函数}
}
void display(uchar aa) //函数的调用被调用函数
{
dula=1; //打开段选
P0=table[aa-1]; //给P0一个值,在table数组中调用值给P0。
然后P0就有数显视
dula=0; //关闭段选
}
uchar keyscan()
{
1111000 P3=0xfe; //给P3口一个初值高四位都为1 只有最低一位是0 temp=P3; //定义的一个数temp 接收P3的口收回的值
temp=temp&0xf0; //然后用P3口接回来的值与给P3口定义的值进行与。
“与”有零则为零。
while(temp!=0xf0) //与出来的值与原来的值比较。
如果有变化说明有键按下。
{
delay(5); //延时一会。
防止抖动
temp=P3; //接收P3的口收回的值
temp=temp&0xf0; //再与一次,确认
while(temp!=0xf0) //“与”出来的值与原来的值比较。
如果有变化说明有键按下则进入这个while中
{ //如果与出来的值等oxfo则说明值为假。
不会执行这个while
temp=P3; //用P3的口收回的值看看是什么数,使用swith函数
switch(temp) //然后就是使用switch函数
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0) //目的为了走出上一个while,作用:判断P3口中还有没有键被按下
{//如果p3口的值与11110000不等就明是真的。
就是再执行以下的值
temp=P3; //还接收P3口收回的值;
temp=temp&0xf0; // 再与我们给点的数与然后再到0xf0比较
}
}
}
11111101 P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
11111011 P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
11110111 P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;
}。