#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unisgned int
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7;
sbit beep=P3^7;
uchar code shu[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
uchar DisplayData[16];
uchar time=10,m;
bit j=0;
void delay(uchar i)
{
while(i--);
}
void init()
{
TMOD|=0x01;
TH0=0xfc;
TL0=0x18;
EA=1;
ET0=1;
TR0=1;
}
void DigDisplay()
{
uchar i;
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//顯示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//顯示第7位
}
P0=DisplayData[i];//發送段碼
delay(1); //間隔一段時間掃描
P0=0x00;//消隱
}
}
void main()
{
init();
while(1)
{
DigDisplay();
if(j==0)
{
if(!k1){j=1;delay(1000);if(!k1){while(!k1);m=1;}}
if(!k2){j=1;delay(1000);if(!k2){while(!k2);m=2;}}
if(!k3){j=1;delay(1000);if(!k3){while(!k3);m=3;}}
if(!k4){j=1;delay(1000);if(!k4){while(!k4);m=4;}}
if(!k5){j=1;delay(1000);if(!k5){while(!k5);m=5;}}
if(!k6){j=1;delay(1000);if(!k6){while(!k6);m=6;}}
if(!k7){j=1;delay(1000);if(!k7){while(!k7);m=7;}}
if(!k8){j=1;delay(1000);if(!k8){while(!k8);m=8;}}
}
if(j==1)
{
TR0=0;
DisplayData[0]=shu[m];
beep=~beep;
}
}
}
void t0() interrupt 1
{
static unsigned int i=0;
TH0=0xfc;
TL0=0x18;
i++;
if(i==1000) //1s
{
i=0;
time--;
}
DisplayData[6]=shu[time/10];
DisplayData[7]=shu[time%10];
if(time==0)TR0=0;
}