#include<reg52.h>
#define DataPort P0
sbit LATCH1=P2^0;
sbit LATCH2=P2^1;
sbit SPK = P1^0;
void DelayUs2x(unsigned char t);//函数声明
void DelayMs(unsigned char t);
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 共阴显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
void Display(unsigned char FirstBit,unsigned char Num);
//void delay(unsigned int t) ;
unsigned char TempData[8];
unsigned int num = 10;
unsigned char flag;
unsigned char overflag;
unsigned char count;
void time0_isr(void) interrupt 1
{
unsigned char i;
i++;
ET0 = 0;
TH0 = 0X3C;
TL0 = 0XB0;
if(i <= 18)
{
flag = 0;
}
else
{
flag = 1;
if(i == 20)
{
i = 0;
flag = 0;
num--;
if(num > 10)
{
overflag = 1;
num = 0;
}
}
}
ET0 = 1;
}
void time1_isr(void) interrupt 3
{
ET1 = 0;
TH1 = 0XFC;
TL1 = 0X18;
TempData[0] = dofly_DuanMa[num/10];
TempData[1] = dofly_DuanMa[num%10];
Display(6,2);
ET1 = 1;
}
void exit0_isr(void) interrupt 0
{
EX0 = 0;
ET0 = 1;
EX0 = 1;
}
void main(void)
{
unsigned char i;
TMOD = 0X11;
TH1 = 0XFC;
TL1 = 0X18;
TH0 = 0X3C;
TL0 = 0XB0;
EA = 1;
ET0 = 0;
TR0 = 1;
ET1 = 1;
TR1 = 1;
EX0 = 1;
IT0 = 1;
while(1)
{
if(flag == 1 || overflag == 1)
{
for(i = 0; i < 10; i++)
{
DelayMs(1);
SPK = ~SPK;
}
}
}
}
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i = 0;
/*for(i = 0; i < Num; i++)
{*/
DataPort= 0x00;
LATCH1=1;
LATCH1=0;
DataPort=dofly_WeiMa[i+FirstBit];
LATCH2=1;
LATCH2=0;
DataPort = TempData[i];
LATCH1=1;
LATCH1=0;
/*DelayUs2x(200);
}*/
i++;
if(i == Num)
i = 0;
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
10秒定时炸弹

最新推荐文章于 2023-08-14 22:33:24 发布