单片机用33矩阵键盘显示数字0~9

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include //文件包含
#define uint unsigned int
#define uchar unsigned char //宏定义,方便使用


uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90}; //数码管显示编码
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=0;
P0 = 0xc0 ;

while(1)
{
display(keyscan()); //调用键盘扫描子函数
}
}


/*************************显示子函数**********************************/

void display(uchar aa)
{

P0=table[aa];

}

/************************键盘扫描子函数*******************************/

uchar keyscan()
{
P1=0xfe; //P1赋值,低位送0
temp=P1; //temp读回P1的值,
temp=temp&0xe0; //屏蔽 temp低5位,只看高3位列控是否发声变化
while(temp!=0xe0) //不等,说明第一行有键按下
{ //延时去抖
delay(5); //再检测
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0) //果真有键按下,
{ //把P1给temp,检测按键位置
temp=P1;
switch(temp)
{
case 0xf6:num=1;
break;
case 0xee:num=2;
break;
case 0xde:num=3;
break;

}
while(temp!=0xe0) //一次按键检测,松手跳出循环
{
temp=P1;
temp=temp&0xe0;
}
}
}

P1=0xfd; //检测第二列
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf5:num=4;
break;
case 0xed:num=5;
break;
case 0xdd:num=6;
break;

}
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}


P1=0xfb;
temp=P1; //检测第三列
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf3:num=7;
break;
case 0xeb:num=8;
break;
case 0xdb:num=9;
break;

}
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}

return num; //返回检测结果,

}

相关文档
最新文档