keil uVision4界面:
#include<reg51.h>
#define uchar unsigned char
unsigned char key;
//8位共阳极数码管位控码表
uchar code dis_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//共阳极数码管段码表:1至8
uchar code seg1[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
//共阳极数码管段码表:5201314
uchar code seg2[]={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 duo() //函数功能:键盘扫描
{
P1=0xff;
if((P1&0x0f)!=0x0f)
{
delay(10); //消抖
if(P1==0xfe)
key=1;
if(P1==0xfd)
key=2;
}
}
void shu1()
{
int a;
for(a=0;a<8;a++)
{
P0=seg1[a]; //P0口输出段码
P2=dis_code[a]; //P2口输出位控码
delay(5);
P2=0x00; //消影
}
}
void shu2()
{
int a;
for(a=0;a<7;a++)
{
P0=seg2[a]; //P0口输出段码
P2=dis_code[a]; //P2口输出位控码
delay(5);
P2=0x00; //消影
}
}
void main() //主函数
{
key=0;
while(1)
{
duo();
switch(key)
{
case 1:shu1();break;
case 2:shu2();break;
}
}
}
proteus仿真界面: