#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={ //共阴数码管编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07, //0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit duan=P2^6; //段码
sbit wei=P2^7; //位码
sbit D1=P3^6; //输出1
sbit D2=P3^7; //输出2
sbit key1=P1^0; //按键1
sbit key2=P1^1; //按键2
uint num1,num2,num3,num4,numdis;
void delayms(uint); //定义延时时间变量
void display1(uint numdis1) //第一个四位数码管显示
{
uint bai1,shi1,ge1;
bai1=numdis1/100;
shi1=numdis1%100/10;
ge1=numdis1%10;
duan=1;
P0=table[bai1];
duan=0;
P0=0xff; //百位
wei=1;
P0=0xfd;
wei=0;
delayms(3);
duan=1;
P0=table[shi1];
duan=0;
P0=0xff; //十位
wei=1;
P0=0xfb;
wei=0;
delayms(3);
duan=1;
P0=table[ge1];
duan=0;
P0=0xff; //个位
wei=1;
P0=0xf7;
wei=0;
delayms(3);
}
void display2(uint numdis2) //第二个四位数码管显示
{
uint bai2,shi2,ge2;
bai2=numdis2/100;
shi2=numdis2%100/10;
ge2=numdis2%10;
duan=1;
P0=table[bai2];
duan=0;
P0=0xff; //百位
wei=1;
P0=0xdf;
wei=0;
delayms(3);
duan=1;
P0=table[shi2];
duan=0;
P0=0xff; //十位
wei=1;
P0=0xbf;
wei=0;
delayms(3);
duan=1;
P0=table[ge2];
duan=0;
P0=0xff; //个位
wei=1;
P0=0x7f;
wei=0;
delayms(3);
}
void delayms(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
}
void keyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0) //按键1按下,启动定时器0同时输出1接通,
{ //且数码管005分钟倒计时
while(!key1);
TR0=1;
D1=0;
num2=5; //数码管显示005分钟
}
}
if(key2==0)
{
delayms(10);
if(key2==0) //按键2按下,启动定时器1同时输出2接通,
{ //且数码管005分钟倒计时
while(!key2);
TR1=1;
D2=0;
num4=5; //数码管显示005分钟
}
}
}
void main()
{
init();
while(1)
{
keyscan();
display1(num2);
display2(num4);
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num1++;
if(num1==1200) //如果到了1200次,说明1分钟时间到
{
num1=0; //num1清零
num2--;
if(num2==0) //如果计时到零
{
TR0=0; //定时器0关闭
D1=1; //输出关闭
}
}
}
void T1_time() interrupt 3
{
TH1=(65536-45872)/256; //重装初值
TL1=(65536-45872)%256;
num3++;
if(num3==1200) //如果到了1200次,说明1分钟时间到
{
num3=0; //num3清零
num4--;
if(num4==0) //如果计时到零
TR1=0; //定时器0关闭
D2=1; //输出关闭
}
}
|