10秒定时炸弹

51单片机定时计数器应用
#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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值