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

如题所述

3*3只能显示9个数,就1~9吧,程序在下面,还有,你能不能给点分,谢谢

#include <reg52.h>
sbit duan=P3^3;//段码选通位-控制74HC573
sbit wei=P3^4;//位码选通位-控制74HC573

#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0~7
0x88,0x83,0xA7,0xA1,0xBF,0xB6};//a,b,c,d,-,-//共阳数码管代码
code table1[]={0x02,0x01,0x08,0x04,0x20,0x10,0x80,0x40};//0~7依次位码表
uchar num,temp;
void delay(uchar z)
{
uint x,y; //局部变量,只在当前函数有效
for(x=200;x>0;x--)
{
for(y=z;y>0;y--);
}
}
void main()
{

while(1)
{
P1=0xf7; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0)//若不等于0xf0,即为有按键按下,执行while语句
{
delay(5); //防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{

temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0x77:num=1;//显示1
break;
case 0xb7:num=2;//显示2
break;
case 0xd7:num=3;//显示3
break;
case 0xe7:num=10;//显示a
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
duan=1;
P0=table[num];
duan=0;
wei=1;
P0=0x40;
wei=0;

}
}

P1=0xfb; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0) //若不等于0xf0,即为有按键按下,执行while语句
{
delay(5); //防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{

temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0x7b:num=4;//显示4
break;
case 0xbb:num=5;//显示5
break;
case 0xdb:num=6;//显示6
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
duan=1;
P0=table[num];
duan=0;
wei=1;
P0=0x40;
wei=0;

}
}

P1=0xfd; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0) //若不等于0xf0,即为有按键按下,执行while语句
{
delay(5);//防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{
temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0x7d:num=7;//显示7
break;
case 0xbd:num=8;//显示8
break;
case 0xdd:num=9;//显示9
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
duan=1;
P0=table[num];
duan=0;
wei=1;
P0=0x40;
wei=0;

}
}

}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-22
3*3=9,
0~9=10。。。。。
第2个回答  2009-10-22
相似回答