“定时炸弹”

         顾名思义,“定时炸弹”即是通过一段时间的计时,让炸弹引爆,这样的原理在生活中也有许多类似的应用,而自己做的只是计时10s后,让蜂鸣器发出响声,不会是真的炸弹啦。具体的思路:

(1)分别创建好用来在发光数码管上显示具体数字和用来位选的数组(十六进制形式)

(2)编写出计时为1s的代码函数和用来延迟时间的函数,方便主函数中进行调用

(3)动态的显示数码管上的数字,设置好计时方式(代码中用到了方式0和方式1)

(4)当时间满足要求后,给蜂鸣器一个方波,让蜂鸣器发出声响

下面是实现的代码和图片:

#include<reg51.h>
#include <intrins.h>   

#define dataport    P2  
#define sbitchoice  P0

sbit beel = P1^5;   

unsigned char code LED1[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}   ;	 //0-9
unsigned char code LED2[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}  ;  //0-7	 位选
unsigned char temp ;

void delay(unsigned char i)
{
	unsigned char j,k ;
	for(j=0;j<150;j++)
	{
		for(k=0;k<i;k++)
		{
			; 
		}
	}
}

void interface(unsigned char first, unsigned char num)
{
      unsigned char i ;
	  for(i = 0 ; i < num ; i++ )
	  {
	      sbitchoice = LED2[i+first] ;
		  dataport = LED1[temp]	  ;
		  delay(1)	 ;
	  }
}

void delayls()//1s	
{
    unsigned char i ;

	for(i = 0 ;i<20;i++)
	{
	    TH0 = 0X3c ;
		TL0 = 0Xb0 ;
		TR0 = 1 ;
		while(!TF0);
		TF0 = 0 ;
	}

}

void main()
{
     unsigned int count = 5 ;
     unsigned int counter = 0 ; 
     EA = 1  ;
     ET1 = 1 ;
	 TMOD = 0x11;  
     TH0 = 0x3C;
     TL0 = 0xB0;
     TR0 = 1;     
     while(1)
	 {
	       delayls() ;
		   temp =  9 - counter ;
		   counter++ ;
		   interface(0,1)	;
		   if(temp == 0)
		   {
		         TH1 = 0XFF;
                 TL1 = 0X0C;
                 TR1 = 1;
				 while(count--)	 //响五秒
				 {
				     delayls();
				 }
				 TR1 = 0;
                 while(1);
				 /*while(1)	  //通过延时让蜂鸣器响
				 {
				        beel = ~beel;
				        delay(1)	 ;
				 }*/
		   }
	 }
}

void disbeel()      interrupt  3
{
    TH1 = 0XFF;
    TL1 = 0X0C;
    beel = ~beel;
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值