基于51单片机能实现任意时间倒计时剖析docWord文档下载推荐.docx
- 文档编号:19469297
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:22
- 大小:286.80KB
基于51单片机能实现任意时间倒计时剖析docWord文档下载推荐.docx
《基于51单片机能实现任意时间倒计时剖析docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机能实现任意时间倒计时剖析docWord文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
它使用了8个LED发光二极管,其中7个用于显示字符,一个用于显示小数点,故通常称之为8段发光二极管数码器。
其内部结构如下图(a)所示:
LED数码显示器有如下两种连接方法:
共阳极接法:
把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。
共阴极接法:
把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。
每个发光二极管的阳极通过电阻与输入端相连。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。
由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口无法直接驱动,所以要利用放大电路来驱动,一般使用三极管来放大电流。
本设计采用p3.0口和三极管组成的电路来驱动蜂鸣器。
2.总体设计思想:
本设计是基于AT89C51单片机的键盘控制及显示电路设计,从系统的设计功能上看,系统可分为两大部分,即键盘输入控制部分和显示部分,对于每一个部分都有不同的设计方案,起初我对键盘和显示每个都拟订了下面两种方案:
键盘部分:
第一种方案:
采用扫描键盘,可以用普通按键构成4×
4矩阵键盘,直接接到AT89C51单片机的P1口,高四位作为行,低四位作为列,通过软件完成键盘的扫描和定位。
这种方式相对下面的独立式键盘节省了很多的I/O口。
第二种方案:
键盘控制采用独立式按键,每个按键的一端均接地,另一端直接和P1口相连,在按键和P1口之间通过10K电阻与+5V电源相连。
键盘通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单,比较适合按键较少或操作速度较高的场合,这种独立式接口的应用很普遍。
显示部分:
显示部分采用静态显示方法,所谓静态显示,就是每一个显示器都要占用一个独立的具有锁存功能的接口用于存储字形码。
这样单片机只要把要显示的字形代码发送到接口电路,从而输送至各数码管显示。
被显示的数据只要输出一次,直到要显示新的数据时,再发送新的字形码。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×
8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
显示部分采用动态显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示是利用人眼视觉暂留特性来实现显示的。
事实上,显示器上任何时刻只有一个数码管有显示。
由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。
为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
本设计可采用P0口直接驱动七段数码管显示。
此方案成本低,而且单片机的I/O口占用较少,可以节约单片机接口资源,而且功耗更低。
由于本设计要求按键较少,且本次设计只是对所学知识的一次实践,设计要求简单,容易实现,成本低廉。
比较以上各种设计方案,采用独立式键盘和动态显示两种方案配合,成本低,占用单片机资源少,且容易实现,这样的设计比较适合本次设计,故最终决定选用这样的一种搭配设计方案。
对于蜂鸣器,将采用p3.0口和三极管组成的外围电路驱动,根据定时时间报警。
3.具体实现方法:
根据设计任务与要求,可初步将系统分为五大功能模块:
主电路、按键电路、显示电路、报警电路。
进一步细说,主电路选用AT89C51作为中央处理器,系统采用12MHZ的晶振;
按键停控制电路由四个按键(复位键、启动/暂停键、设置键、+1调时键)组成,键盘采用软件扫描的方式设计,低电平有效;
显示电路由六位七段共阴极数码管和一个9位200欧姆上拉电阻组成,显示内容有倒计时器的0.1秒位以及分秒的个、十位,数码管通过P0口直接输出数据;
报警电路主要由蜂鸣器组成,通过电路与P3.0口相连。
当P3.0口输出高电平时,蜂鸣器响。
对于本次单片机课程设计,根据设计要求可以将功能分成如下4部分:
(1)由于单片机内部振荡方式电路简单,时钟信号比较稳定,是独立的单片机应用系统的首选,故本设计采用内部振荡方式,采用12MHZ的晶振。
图
(1)晶振电路图
(2)本设计电路采用定时器T0产生定时中断,由于本设计需要0.1s的基本时间,故选择其工作在定时方式1下。
这时定时器T0是一个16位的计时器,由它产生50ms的基本定时中断,两次中断后将得到0.1s的时间。
(3)键盘电路有独立式键盘和矩阵式两种。
独立式键盘占用I/O口线较多,适用于按键较少的情况。
矩阵式键盘占用的I/O口相对较少,适用于按键很多的情况。
图
(2)键盘电路图
(4)报警电路将采用p3.0口驱动,当数码管显示00.00.0时p3.0口输出高电平,驱动蜂鸣器达到报警的目的,只有当复位键按下后,蜂鸣器才会停止报警。
图(3)蜂鸣器报警电路图
(5)对于显示电路,本设计采用6位8段共阴极LED数码管显示。
上电显示最大倒计时时间60.00.00-。
其中“-”位为系统状态标志位,当显示“-”时,表示系统处于等待状态,按下开始键后将开始计数,开始计数后此数码管将关闭显示,以达到省电的目的,当显示“E”时,表示系统正处于调时状态,此时只用两个调时键有用,按下开始键或复位键将没有用。
图(4)显示电路图
系统的原理框图如下图:
图(5)系统原理框图
图(6)硬件连线图
硬件连接说明:
本系统以AT89C51单片机为核心。
单片机采用内部振荡的方式。
通过200欧姆电阻与一个6位8段LED数码显示管相连。
从P0口输出LED数码管的字形码,从P2口输出LED数码管的位选码,高电平有效。
4个功能按键和P1口相连,中间通过10K的电阻与+5V电源相连,按键另一端接地,P1口低电平时表示按键被按下。
报警电路则与P3.0口相连,当P3.0口输出高电平时,蜂鸣器响。
在程序设计方面:
将键盘扫描程序置于主程序中,采用扫描方式检测键盘的按键情况,主程序流程图见图(7)。
显示部分做成一个子程序,方便调用。
各个调时子程序由设置键引倒进入,调时子程序流程图见图(8)。
计时方面,利用定时器T0产生的0.5ms基准时间形成0.1s的最小倒计时时间单位并产生“-1”动作,T0中断子程序流程图见图(9)。
主程序流程图
Y
N
开始
关闭定时器、蜂鸣器
复位键按下?
标志位、显示管查表码初始化
定时器设置初始化
开中断
调用显示子程序
调时设置键按下?
调用消抖延时子程序
开始/暂停键按下?
开始/暂停标志位取反
等待按键释放
调用调时子程序
20H.0=1?
置位状态显示管标志位
P3.0=0?
置位P2.5
启动定时器T0
图(7)
图(8)
图(9)
四、Proteus调试过程及现象:
上电后LED数码管显示最大倒计时值60.00.0-,程序处于等待状态。
图(10)上电或者复位键被按下时
此时,主程序不断调用显示子程序以及扫描键盘按键情况,当检测到有键按下后,转到相应的程序执行。
1.开始/暂停键按下后程序开始减1计数直到0,同时状态显示管熄灭,计数值到0后报警器响。
若中途遇到开始/暂停键按下则,暂停倒计时。
若中途遇到复位键按下则将倒计时器的倒计时值设置为最大值,并处于等待状态。
图(11)计数值到0时
图(12)开始/暂停键按下后
3.复位键按下后,程序复位,系统处于等待状态,状态显示管显示“-”。
4.当设置键被按下后,程序进入调时设置状态,同时状态显示管显示“E”。
设置状态的初始值位00.00.0E,按下+1调整键,可以将当前的计数单位值加1,再次按下设置键后,即进入了下个计数单位的调时状态,当按下5次设置键后将退出调时状态,若分钟十位被设置为6并再次按下设置键后程序直接退出调时状态。
设置状态时开始/暂停键和复位键无效,等退出调时状态后,设置状态时开始/暂停键和复位键恢复功能。
图(13)调时状态时
五、调试问题及解决方法:
开始在主程序的循环中没有添加调用显示子程序的语句,导致在没有按键按下的情况下LED数码管没有显示。
当在主程序循环检测按键的过程中添加了调用显示子程序的语句后就解决了这一问题。
由于键盘需要消抖延时和等待按键释放,所以相似的情况又出现了——按下按键后有一段时间LED数码管断续显示或者按下按键后不释放按键时LED数码管没有显示。
仔细分析后发现,问题出现的原因还是一样的,由于本设计的LED数码管采用了动态显示,故需要不断调用显示子程序,否则会导致LED数码管没有显示。
所以最终做了以下改进:
1.按键的消抖延时选择调用两次显示子程序(每次显示子程序大约用时5ms,两次即为10ms左右)来取代原来的10ms软件延时。
2.在等待按键释放时,使用循环调用显示子程序来替代原来的循环等待。
经过上述两点的改进后,LED数码管无显示或者断续显示的问题就得到了彻底的解决。
六、设计的优缺点分析:
本设计是一个采用了由内部振荡的时钟方式、程控扫描方式的独立式键盘、动态显示LED数码管和蜂鸣器式报警器组成的系统。
因此该系统使用的电子器件少、外围电路简单,定时精准,使用的I/O少,系统消耗的功耗小,剩余的I/O口多便于扩展其他功能。
但是另一方面,本系统由于使用了程控式的键盘和动态显示的LED数码管,所以对CPU的使用率相对较高。
七、心得体会:
初次看到本次的课程设计的题目时,感觉设计的难度不大,但是由于是第一次运用单片机设计,在设计过程中又遇到了种种困难,又感觉到要完成此次设计还需要花费很大的时间和精力。
但是经过本组同学的共同努力,运用科学的分析方法,最终顺利完成了本次单片机课程设计。
经过两个星期的实习,过程曲折可谓一语难尽。
在此期间我也失落过,也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
生活也是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈设计员为我们的社会付出。
我想说,设计确实有些辛苦,但苦中也有乐,在如今物欲很流的世界,很少有机会能与大自然亲密接触,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实习,我感觉我和同学们之间的距离更加近了;
我想说,设计确实很累,但当我们的设计出现成果时,心中也不免产生兴奋,正所谓“三百六十行,行行出状元”我认为无论干什么,只要人生活的有意义就可以。
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
另外,课堂上也有部分知识不太清楚,于是我又不得不边学边用,时刻巩固所学知识,这也是我作本次课程设计的第二大收获。
整个设计我基本上还满意,由于水平有限,难免会有错误,还望老师批评指正。
八、参考文献:
[1]曾屹.单片机原理与应用.湖南:
中南大学出版社,2009
[2]丁元杰.单片微机原理及应用.3版.北京:
机械工业出版社,2006
[3]严天峰.单片机应用系统设计与仿真调试.北京:
北京航空航天大学出版社,2005
[4]杨振江.流行单片实用子程序及应用实例.西安:
电子科技大学出版社,2002
附:
实验源程序
;
倒计时器设计源程序
ORG0000H
AJMPMAIN
ORG000BH;
T0中断程序入口地址
AJMPT0ZD
ORG00100H
MAIN:
CLRTR0;
主程序开始
CLRP3.0;
关闭蜂鸣器
SETB20H.1;
使显示管状态标志位有效
CLR20H.0;
开始/暂停标志位,使程序处于等待开始|暂停键按下
MOV40H,#00H;
0.1S位查表码
MOV41H,#00H;
秒钟个位位查表码
MOV42H,#00H;
秒钟十位位查表码
MOV43H,#00H;
分钟个位位查表码
MOV44H,#06H;
分钟十位位查表码
MOV45H,#00H;
状态显示管查表码
MOV46H,#02H;
定时器定时次数
SETBEA;
开总中断
SETBET0;
开定时器T0中断
MOVTMOD,#01H;
定时器工作方式0
MOVTL0,#0B0H;
定时初值,采用50MS定时
MOVTH0,#3CH
JPJC:
LCALLXSCX;
显示倒计时初值60.00.0(XSCX),进入键盘检测程序
MOVP1,#0FFH;
判断复位键是否按下
JBP1.0,JC12
LCALLXDYS;
调用消抖延时程序(XDYS)
PP10:
JNBP1.0,DP10;
等待按键按下
AJMPMAIN;
复位键按下后转到主程序(MAIN)重新开始
JC12:
MOVP1,#0FFH;
判断设置键是否按下
JBP1.2,JC11
LCALLXDYS
PP12:
JNBP1.2,DP12;
调整设置键按下后转到调时子程序(TSCX)
ACALLTSCX
JC11:
判断开始/暂停键是否按下
JBP1.1,JPJC
PP11:
JNBP1.1,DP11
CPL20H.0;
将标志位取反
JB20H.0,KSJS;
开始/暂停标志为1则开始计数(KSJS)
CLRTR0
SETB20H.1
AJMPJPJC;
继续检测键盘按键情况(JPJC)
DP10:
等待按键按下时,调用显示程序,防止显示管没显示
AJMPPP10
DP11:
LCALLXSCX
AJMPPP11
DP12:
AJMPPP12
KSJS:
CLR20H.1;
清除状态显示管
SETBP2.5
JBP3.0,JPJC;
若蜂鸣器响,则不启动计时器
SETBTR0;
启动计时器TO(KSJS)
AJMPJPJC
;
显示子程序
XSCX:
MOVDPTR,#TAB;
显示子程序(XSCX)
MOVA,40H
MOVCA,@A+DPTR
MOVP2,#0FFH;
关闭显示.
MOVP0,A;
输出0.1S位的显示段码.
CLRP2.0;
P2.0=0
ACALLXSYS
MOVDPTR,#TAB1;
MOVA,41H
输出秒钟个位的显示码.
CLRP2.1;
P2.1=0
MOVDPTR,#TAB
MOVA,42H
输出秒钟十位位的显示段码.
CLRP2.2;
P2.2=0
MOVDPTR,#TAB1
MOVA,43H
输出分钟个位的显示段码.
CLRP2.3;
P2.3=0
MOVA,44H
输出分钟十位的显示段码.
CLRP2.4;
P2.4=0
JNB20H.1,ZBTC;
20H.1为1则显示计时器状态
MOVDPTR,#TAB2
MOVA,45H
输出段码.
CLRP2.5;
P2.5=0
ZBTC:
RET
调时子程序
TSCX:
调时子程序(TSCX)
使时间调整时处于暂停状态
MOV40H,#00H
MOV41H,#00H
MOV42H,#00H
MOV43H,#00H
MOV44H,#00H
使状态显示管的位选码有效
MOV45H,#01H;
将状态显示码更改为E(调时状态)
MOVR0,#44H
JCTZ:
ACALLXSCX;
先调用显示程序,扫描时间调整键
MOVP1,#0FFH
JBP1.3,NEXT;
+1键盘没有按下
ACALLXDYS;
键盘按下,消抖延时
JBP1.3,NEXT
DEN0:
JNBP1.3,DEN1;
AJMPJYCX;
+1键按下后,跳转到+1程序
NEXT:
MOVP1,#0FFH
JBP1.2,JCTZ
DEN2:
JNBP1.2,DEN3;
CJNEA,#06H,DEC4;
设置键再次按下,将调整指针指向下一位
AJMPTCTS
DEC4:
DECR0
CJNER0,#3FH,JCTZ;
若R0为3FH则退出调时程序
AJMPTCTS;
若@R0不为#06H,但R0为#3FH,则跳出调时程序
JYCX:
CJNER0,#44H,XIA1;
加1调时部分
CJNE@R0,#06H,INCR;
调整分钟十位
AJMPSET0
XIA1:
CJNER0,#43H,XIA2
AJMPTZ09;
调整分钟个位
XIA2:
CJNER0,#42H,XIA3
CJNE@R0,#05H,INCR;
调整秒钟十位
XIA3:
CJNER0,#41H,XIA4
调整秒钟个位
XIA4:
CJNER0,#40H,TCTS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片 机能 实现 任意 时间 倒计时 剖析 doc