基于清翔QX-MCS51单片机的模拟定时炸弹,可用于wargame下场,可为其定制一个Molle套件将其挂载于战术背心之上。目前功能基本完成,能设置8档倒数时间。自定义倒数时间以及蜂鸣器加速响鸣功能尚未完善。键盘扫描、数码管显示等函数皆摘自清翔单片机实验例程。

小白第一次写博客还不太懂,有什么不对的还望大佬海涵。

​//可设定定时炸弹程序
//功能:
//按S6~13选择时间,分别为30、60、90、120、150、180、210、240秒
//只需按一次时间选择键,随后按S2以启动,将自动倒计时
//倒计时结束后爆炸,请在安全区域操作,否则会有生命危险#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit BEEP = P2^3;//蜂鸣器低电平有效
sbit WE = P2^7;//数码管位选
sbit DU = P2^6;//数码管段选
uchar KeyValue = 0;//按键值//共阴数码管段选表0-9
uchar  code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};void delay(uint z)//毫秒级软件延时
{uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);
} //数码管动态显示函数,最高显示255
void display(uchar i)
{uchar bai, shi, ge;bai = i / 100; //236 / 100  = 2shi = i % 100 / 10;   //236 % 100 / 10 = 3ge  = i % 10;//236 % 10 =6//第一位数码管       P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[bai];//DU = 0;//锁存段选数据delay(5);//第二位数码管P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFD; //1111 1101WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[shi];//DU = 0;//锁存段选数据delay(5);//第三位数码管P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFB; //1111 1011WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[ge];//DU = 0;//锁存段选数据delay(5);
}//键盘扫描函数。键值从左到右从上到下从0开始以1递增
void KeyScan()
{//4*4矩阵键盘扫描P3 = 0XF0;//列扫描if(P3 != 0XF0)//判断按键是否被按下{delay(10);//软件消抖10msif(P3 != 0XF0)//判断按键是否被按下{switch(P3) //判断那一列被按下{case 0xe0:  KeyValue = 0;  break;//第一列被按下case 0xd0:    KeyValue = 1;  break;//第二列被按下case 0xb0:    KeyValue = 2;  break;//第三列被按下case 0x70:    KeyValue = 3;  break;//第四列被按下 }P3 = 0X0F;//行扫描switch(P3) //判断那一行被按下{case 0x0e:KeyValue = KeyValue;break;//第一行被按下case 0x0d:KeyValue = KeyValue + 4;break;//第二行被按下case 0x0b:KeyValue = KeyValue + 8;break;//第三行被按下case 0x07:KeyValue = KeyValue + 12;break;//第四行被按下 }while(P3 != 0X0F);//松手检测   }}P3 = 0XFF;//独立按键扫描if(P3 != 0XFF){delay(10);//软件消抖10msif(P3 != 0XFF){switch(P3) //判断那一行被按下{case 0xfe:   KeyValue = 16; break;//S2被按下case 0xfd: KeyValue = 17; break;//S3被按下case 0xfb: KeyValue = 18; break;//S4被按下case 0xf7: KeyValue = 19; break;//S5被按下 }while(P3 != 0XFF);//松手检测            }   }
}//定时器0初始化
void timer0Init()
{TR0 = 1;   //启动定时器0TMOD = 0X01; //定时器工作模式1,16位定时器计数模式TH0 = 0x4b;//(65535-46082)/256 高八位TL0 = 0xfd; //(65535-46082)%256 定时50ms,50ms=50000μs 50000/1.085=46082 低八位
}void main()//主函数,负责倒计时、数码管显示、蜂鸣器提示
{   uint TimeInput = 0;//键盘输入按键值uchar mSec, Sec;//毫秒和秒储存变量while(KeyValue!=16){KeyScan();switch(KeyValue){case 0:TimeInput = 30; break;//半分钟case 1:TimeInput = 60; break;//一分钟case 2:TimeInput = 90; break;//一分半case 3:TimeInput = 120; break;//两分钟case 4:TimeInput = 150; break;//两分半case 5:TimeInput = 180; break;//三分钟case 6:TimeInput = 210; break;//三分半case 7:TimeInput = 240; break;//四分钟default:KeyValue = 16;//强制S2以开始倒计时}}KeyValue = 16;/*主要过程,倒计时*/timer0Init();//定时器0初始化while(1){if(TF0 == 1)//判断是否溢出{TF0 = 0;//软件清零溢出标志位TH0 = 0x4b;TL0 = 0xfd; //定时50msmSec++;//50ms到if(mSec == 20){mSec = 0;Sec++;//1秒时间到BEEP = 0;delay(50);BEEP = ~BEEP;}                 }display(TimeInput-Sec); //数码管显示函数if(Sec > TimeInput)//倒计时结束{Sec = 0;//秒清零 BEEP = 0;//长鸣WE = 1;//打开位选锁存器P0 = 0X00; //选通所有数码管WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = 0Xff;//全亮DU = 0;//锁存段选数据while(1);}}
}  ​

【单片机小白屑作】基于清翔QX-MCS51单片机的精简版定时炸弹相关推荐

  1. 单片机小白学步系列(三) 偶遇51单片机

    单片机有很多种,比较常见的有51单片机,AVR,MSP430,PIC,STM32等.现在我将从比较简单易学的51单片机说起,带领大家进入单片机的精彩世界. 20世纪80年代美国Intel公司推出MCS ...

  2. 清翔电子51单片机PWM理解

    /********************************************************************************* * [编写时间]: 2014年3月 ...

  3. 两位动态数码管电子秒表c语言,清翔电子51单片机6课动态显示数码管作业秒表...

    单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟单片机数码管电子钟 相关下载链接://download. ...

  4. 清翔电子51单片机小结——可调表时钟

    /*******************************/ //让后4位数码管以0.01秒速度从0到9999显示 //按下S2开始跑数 按下S3停止跑数 //按下S4选择时钟的时分秒哪一位 按 ...

  5. 【计算机毕设之基于python的漏洞扫描检测系统精简版-哔哩哔哩】 https://b23.tv/w6ryWlY

    在漏洞泛滥的今天,互联网安全倍受挑战.只有合理配置设备,关掉不必要口和服务,及时了解最新安全动态,打好漏洞补丁加固系统,才能最大限度的减少因漏洞隐患而造成被黑客非法入侵而造成的不必要损失.主要解决内容 ...

  6. 单片机小白学步系列(九) 用万用焊板搭建实验电路

    这一篇我们继续上篇的话题,讲解自己搭建电路的另一种方法:用万用焊板搭建电路.在此之前,先普及几点基础知识. 1.电路板 首先我们了解下电路板.前面介绍了面包板可以搭建电路,但是在实际制作出来的电子设备 ...

  7. 单片机小白学步系列(十三) 点亮第一个LED——好的開始,成功的一半

    前面介绍了非常多概念知识.做了非常多准备工作,从这一节開始,我们正式開始单片机的学习.我们将使用单片机完毕一项非常easy的工作:点亮一个发光二极管(即LED:Light-Emitting Diode ...

  8. 单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

    由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在 ...

  9. 单片机小白学步系列(二十一) IO口:基本的LED和按键操作

    本篇我们先介绍最基础的几个IO口操作.学完本篇,大家要能自己独立完成下面几个实验. 1.点亮LED 2.一个按键控制LED,按下灯亮,释放灯灭 3.两个按键控制一个LED,一个键开灯,一个键关灯 实验 ...

  10. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比较长的篇幅介绍IO口的原理.也是查阅了不少资料,确保内容正确无误,花了很长时间写的.IO口原理原本需要涉及很多深入的知识,而这里尽最大可能做了 ...

最新文章

  1. 一起来学习 WebRTC (篇一)| 掘金技术征文
  2. 华清远见智能小车视频服务器,华清远见版世界杯足球对抗赛,智能小车C位出道...
  3. 更换YUM及升级包方法
  4. 财政指标是什么意思_in the black是“在黑暗中”吗?那in the dark是什么意思?
  5. mysql查找大小写_mysql查询不区分大小写
  6. vSphere 7融合Kubernetes,构建现代化应用的平台
  7. androidpn的学习研究(四)androidpn-client客户端几个类说明
  8. python内置函数下划线_python(内置函数)
  9. php preg split,php preg_split()字符串分割函数的使用方法
  10. OpenCV3.4.13+OpenCV_contrib 双摄像头实时拼接 环境配置
  11. 学到一招!三行 Python 代码轻松提取 PDF 表格数据!
  12. 源代码HTML5五子棋小游戏web开发
  13. hexo个人博客 next主题添加背景图片(无custom.styl情况)
  14. H3C网络故障排除方法
  15. bower报错:EINVALID Name must be lowercase, can contain digits, dots, dashes, @ or spaces
  16. 实例003 输出名言
  17. 猎鹰9号运载火箭介绍
  18. web安全的一句话木马
  19. 【测试用例】测试用例设计的关键点总结
  20. golang入门笔记—ES

热门文章

  1. visio中绘制空间坐标系
  2. 利用ESP8266与米思齐从零制作模拟温室大棚--程序篇
  3. 信息安全管理——网络安全监管
  4. vulhub-靶场实战-安装
  5. 单片机段式LCD驱动教程
  6. 钉钉手机版免密自动登陆SuiteCRM
  7. PMP-2.项目集、项目组合、项目运营和生命周期
  8. 小技巧:visio 如何让箭头完全水平
  9. C++:显示每年的各月份第一天是星期几
  10. oracle临时表空间释放