//你的程序改起来好辛苦,从新写了个,你试试
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0;
uchar bai,shi,ge;
uint code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //共阴极数码管
void delay(uchar xms)//x毫秒的延时程序,你的延时程序问题太大了,while不是那么用的
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display()//显示程序
{
P3=0xff;//清屏
delay(5);
P3=0xfe;//位选
P2=table[bai];
delay(5);
P3=0xff;
delay(5);
P3=0xfd;
P2=table[shi];
delay(5);P3=0xff;
delay(5);
P3=0xfb;
P2=table[ge];
delay(5);
}
void keyboard()//键盘扫描程序
{
if(k1==0)
{
delay(10);
if(k1==0)
{
while(!k1);//等待按键释放
ge++;
if(ge>9)
{
ge=0;
shi++;
}
if(shi>9)
{
shi=0;
bai++;
}
if(bai>9)
{
ge=0;
shi=0;
bai=0;
}
}
}
}
void main()
{
bai=0;
shi=0;
ge=0;
while(1)
{
display();
keboard();
}
|