200秒倒计时报警器设计单片机课程设计Word格式文档下载.docx
- 文档编号:22481589
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:117.34KB
200秒倒计时报警器设计单片机课程设计Word格式文档下载.docx
《200秒倒计时报警器设计单片机课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《200秒倒计时报警器设计单片机课程设计Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
设计内容
(1)设计一个1-200秒倒计时报警器,报警时间可调,用数码管显示报警时间,用两个按键可调节报警范围,一个按键启动,一个按键设置/修改。
(2)画出程序流程图并编写程序实现上述功能。
设计要求
1、能够实现秒的倒计时功能;
2、倒计时结束,报警提示;
3、通过按键能够设置倒计时报警器的初始值;
第二章系统方案
总体方案
设计时可采用模块化程序设计方法。
模块划分时应遵循下述原则:
(1)每个模块应具有独立的功能,能产生一个明确的结果。
(2)模块之间的控制参数应尽量简单,数据参数应尽量少。
(3)根据模块的划分原则,将该程序划分成5个模块,如图2-2所示。
重设倒计时
图2-2倒计时器设计框图
方案组成
硬件部分由重设按钮、启动按钮、AT89C51单片机、一个6位共阴极LED显示器等组成。
软件部分主程序主要由系统初始化段、键盘识别、键值处理,以及6位共阴极LED显示器扫描显示子程序,T1中断。
第三章软件设计
主程序设计
所以主程序的设计一般包括:
主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。
(1)程序的起始地址
MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为个中断源的入口地址。
所以,编程也应在0000H处写一跳转指令。
当CPU接受到中断请求信号并予以响应后,CPU把当前的PC内容压入栈中进行保护,然后转入响应的中断服务程序入口处执行。
一般在响应的中断服务程序入口处写一条跳转指令,并以跳转指令的目标地址作为中断服务程序的其始地址进行编程。
(2)主程序的初始化内容
所谓初始化,是对用到的单片机内部部件或拓展芯片进行初始工作状态设定。
在本例中,使用了两个中断,即T1。
其中:
中断:
采用T1定时中断工作方式,完成倒计时。
主程序
设置各中断服务程序的入口地址
相关寄存器清零
设置数码管显示初始状态
按键扫描
显示按下的数字
进行倒计时
时间是否超出
指示灯亮灭
Y
N
(3)主程序流程图
在这里介绍几个主要的模块:
倒计时模块设计
(1)定时器T1计数初值
T1计数初值为:
TH1=(65536-700)/256;
TL1=(65536-700)MOD256
工作方式TMOD=00000001H=01H
(2)流程图如图4-2所示
键盘扫描模块
扫描按键情况,并显示在数码管的分数值位。
按键去抖动的处理。
由于机械触点的弹性作用,在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间长短由按键的机械特性决定,一般为5~10ms。
而按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次,为了确保CPU对键的一次闭合仅做一次处理,键抖动可用硬件和软件两种方法消除。
本设计采用软件方法。
显示程序模块
由于该系统使用的是六位LED显示器显示倒计时,因此显示采用动态扫描显示方法,即由显示器扫描显示子程序控制显示器逐个循环从左至右依次点亮各个显示器。
这样虽然在任一时刻只要一个显示器点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果一样。
如下面的图所示:
从89C51的P1口送显示器位码
读相应位存储单元数据
由读得数据查表确定段码由89C51送相应显示器位
结束
开始
实施结果
(1)首先开始找到主程序入口地址,运行程序;
(2)按A时间加,按B时间减,时间在1到200,按C开始倒计时。
倒计时的时候可以随时按A或者B更改时间。
(3)倒计时的时候可以随时按A或者B更改时间。
(4)倒计时结束二极管亮起,蜂鸣器响三秒结束后可以重新赋值。
第四章总结体会
设计心得及体会
该倒计时器是基于定时而设计的实现计时报警(指示灯亮)的装置。
由键盘扫描、动态LED显示电路、指示灯亮三大部分构成。
装置利用AT89S51单片机构成电路,以实现对计时时间的控制。
同时装置还用一个由电平控制的指示灯的亮灭装置,用以实现倒计时时间到时提示,以及错出现时候的提示。
本装置的最大特点是实时性强,可操作性好。
因为采用了矩阵式键盘控制,能够随时改变倒计时时间,所以装置能够应对不同的要求而做出相应的调整,以适应不同的环境。
看事物要辩证的看。
本装置也存在一些缺点值得注意。
如当按键开关出现问题时,系统会出现错误,出现指示灯亮的状态。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力如何把我们所学的专业基础课理论知识运用到实践中去呢我想做类似的课程设计就为我们提供了良好的实践平台。
我在整个设计过程中懂得了许多东西,当遇到一不了的问题,跟同伴一起商量、合作,或许能收到事半功倍的效果。
不管学什么,一定要打好基础,并将其学好、学精,但空有知识也不一定就能说明什么,还得能为己所用;
还有更重要的是培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜悦。
虽然这个设计做的不是很完美,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益;
最后,也是我感触比较深的一点,这次课程设计时为数不多的独立完成的一次,虽然过程中遇到很多困难,让自己犯愁过,彷徨过,急躁过,可当自己很快调整好心态,从跌倒的地方爬起来继续,最后取得成功,不止是成功后的喜悦,也是一次锻炼!
本次课程设计总的来说是比较成功的,但在设计及操作过程中也遇到了不少的问题。
这个过程当然也就少不了老师和同学的帮助,所以我们要感谢给予我们帮助和支持的老师和同学。
在设计过程中,我们始终得到他们的悉心教导和认真指点,使得我们在理论知识和动手操作方面都有了很大的提高!
通过这次课程设计使我们懂得了理论与实际结合是很重要的,只有理论知识是远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正服务于社会,从而提高自己的实际动手和独立思考的能力。
同时在设计的过程中我们也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过这次课程设计之后,也把以前所学过的知识重新进行了温故。
它不仅锻炼了我们的实际操作能力,还与我们的专业零距离接触,更主要的是我们学到了书本上没有的知识,尤其感到自身对于书本知识的掌握太死板,并不能灵活运用。
这样就使我们的理论知识更加实践化了,让我们对书本上的知识也更加重视了,不再像以前那样盲目,同时通过这次设计,对以后的毕业设计也奠定了一定的基础,更为重要的是对我们自己的将来有了更为明确的奋斗目标。
参考文献
[1]张毅刚.单片机原理及接口技术[M].哈尔滨:
哈尔滨工业大学出版社,2010.
附录程序:
#include<
>
sbitb_1=P2^0;
//数码管引脚定义
sbitb_2=P2^1;
sbitb_3=P2^2;
sbitb_4=P2^3;
sbitkey_1=P1^0;
//累加
sbitkey_2=P1^1;
//移位
sbitkey_3=P1^2;
sbitBEEP=P1^7;
intnumber=0;
intnumber_flag=0;
bitstart=1;
unsignedchardis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
//数码管引脚定义09-
unsignedintcount=0;
//计数标量
unsignedcharbit_1=0;
//数码管显示的四位标量
unsignedcharbit_2=0;
unsignedcharbit_3=0;
unsignedcharbit_4=0;
voiddelay10ms(chard)//误差0us
{
unsignedchara,b,c;
for(c=d;
c>
0;
c--)
for(b=38;
b>
b--)
for(a=130;
a>
a--);
}
charflag=0;
voidmain()
TMOD=0X01;
//设置定时器T016位
EA=1;
//打开中断
ET0=1;
//打开TO定时器
TR0=1;
//关闭中断
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
BEEP=0;
start=0;
while
(1)
{
if(key_1==0)//标量+
{
while(key_1==0)
{
number++;
if(number>
=200)
number=200;
delay10ms(10);
//按键时间调整
}
}
if(key_2==0)//标量-
while(key_2==0)
flag=3;
number--;
if(number<
=0)
number=0;
}
//开始暂停
if(key_3==0)//从0开始计时
while(key_3==0);
start=1;
if((start==1)&
&
(number==0))
BEEP=1;
//蜂鸣器响
number=0;
delay10ms(100);
BEEP=0;
start=0;
else
//蜂鸣器不响
delay10ms(10);
}
//中断函数
voiddelay1s(void)interrupt1
TH0=(65536-5000)/256;
//5ms产生一次中断用于数码管动态扫描
count++;
if(start==1)
if(count>
count=0;
number--;
if(number<
number=0;
bit_1=number/1000;
bit_2=(number%1000)/100;
bit_3=(number%100)/10;
bit_4=number%10;
b_1=b_2=b_3=b_4=0;
//消隐
switch(count%4)
case0:
//数码管1位
b_1=1;
b_4=b_3=b_2=0;
P0=dis[bit_1];
break;
case1:
//数码管2位
b_2=1;
b_1=b_3=b_4=0;
P0=dis[bit_2];
case2:
//数码管3位
b_3=1;
b_1=b_2=b_4=0;
P0=dis[bit_3];
case3:
//数码管4位
b_4=1;
b_2=b_3=b_1=0;
P0=dis[bit_4];
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 200 倒计时 报警器 设计 单片机 课程设计