#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^0;
sbit wela=P3^1;
sbit keyport=P3^2;
#define keystate0 0 //按键第一次按下状态
#define keystate1 1 //按键按下确认状态
#define keystate2 2
char keystate=2; //按键状态初始化为按键无动作状态
uint num1=0,num2=0;
uchar temp[8]=0; //从高位到低位对应数码管从左到右
void delayms(uint x) //1ms
{
uint y,z;
for(y=x;y>0;y--)
for(z=111;z>0;z--);
}
uchar code table[]={ //共阳数码管
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void smg()
{
dula=0;
wela=0;
P2=0x01;
wela=1;
wela=0;
P2=table[temp[7]];
dula=1;
dula=0;
delayms(1);
P2=0x02;
wela=1;
wela=0;
P2=table[temp[6]];
dula=1;
dula=0;
delayms(1);
P2=0x04;
wela=1;
wela=0;
P2=table[temp[5]];
dula=1;
dula=0;
delayms(1);
P2=0x08;
wela=1;
wela=0;
P2=table[temp[4]];
dula=1;
dula=0;
delayms(1);
P2=0x10;
wela=1;
wela=0;
P2=table[temp[3]];
dula=1;
dula=0;
delayms(1);
P2=0x20;
wela=1;
wela=0;
P2=table[temp[2]];
dula=1;
dula=0;
delayms(1);
P2=0x40;
wela=1;
wela=0;
P2=table[temp[1]];
dula=1;
dula=0;
delayms(1);
P2=0x80;
wela=1;
wela=0;
P2=table[temp[0]];
dula=1;
dula=0;
delayms(1);
}
void proc()
{
temp[0]=num1%10;
temp[1]=num1%100/10;
temp[2]=num1%1000/100;
temp[3]=num1/1000;
temp[4]=num2%10;
temp[5]=num2%100/10;
temp[6]=num2%1000/100;
temp[7]=num2/1000;
}
char keyscan()
{
switch(keystate)
{
case keystate0: //keystate0,第一次检测到按键按下状态,下一状态为keystate1(按键按下确认状态)
keystate=keystate1;
return 0;
case keystate1: //keystate1,按键按下确认状态,下一状态为keystate2(按键无动作状态)
if(!keyport)
{
keystate=keystate2;
while(!keyport);
return 1;
}
else
keystate=keystate2;
return 0;
case keystate2: //keystate2,按键无动作状态,下一状态为keystate0(第一次检测到按键按下状态)
if(!keyport)
{
keystate=keystate0;
}
else
keystate=keystate2;
return 0;
}
}
void main()
{
while(1)
{
if(keyscan())
{
num1++;
if(num1>=10000)
{
num1=0;
num2++;
if(num2>=10000)
{
num2=0;
}
}
proc();
}
smg();
}
}
评论2
最新资源