赞
踩
顾名思义,“定时炸弹”即是通过一段时间的计时,让炸弹引爆,这样的原理在生活中也有许多类似的应用,而自己做的只是计时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;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。