keil uVision4界面:
#include<reg51.h>//包含8051单片机寄存器定义的头文件
unsigned char key;
//共阳极0至9数据组
unsigned char tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳极5201314数据组
unsigned char tab2[]={0x92,0xa4,0xc0,0xf9,0xb0,0xf9,0x99};
void delay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
void key_scan() //函数功能:键盘扫描
//第一步:判断是否有按键被按下
//将接有4个按键的P2口低4位(P2.0-P2.3)写入"1",使P2口低4位为输入状态
//然后读入低4位的电平,只要有1位不为"1",则说明有键按下
{
P2=0xff;
//读入的P2口低4位各按键的状态,按位“与”运算后的结果不是0x0f
if((P2&0x0f)!=0x0f) //表明低4位必有1位是"0",说明有键按下
{
delay(10); //第二步:消抖
//第三步:获得键值。确认有键按下时,可采用扫描的方法
//来判断哪个键按下,并获取键值
if(P2==0xfe)
key=1;
if(P2==0xfd)
key=2;
if(P2==0xfb)
key=3;
if(P2==0xf7)
key=4;
}
}
void shu1_show() //函数功能:共阳极数码管显示0至9
{
int a;
for(a=0;a<10;a++)
{
P0=tab1[a];
delay(500);
}
}
void shu2_show() //函数功能:共阳极数码管显示5201314
{
int a;
for(a=0;a<7;a++)
{
P0=tab2[a];
delay(500);
}
}
void main() //主函数
{
key=0; //键值初始化为0
while(1)
{
key_scan(); //调用键盘扫描函数
switch(key)
{
case 1:P0=0x82;break; //键值为1,共阳数码管显示6
case 2:P0=0x8E;break; //键值为2,共阳数码管显示F
case 3:shu1_show();break; //键值为3,共阳数码管显示0至9
case 4:shu2_show();break; //键值为4,共阳数码管显示5201314
}
}
}
proteus仿真界面:
![](https://img-blog.csdnimg.cn/img_convert/af4255cc6b548926d1ab41207add5904.png)