电子秒表电路设计大学本科毕业论文Word文档下载推荐.docx
《电子秒表电路设计大学本科毕业论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子秒表电路设计大学本科毕业论文Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
本设计主要特点是计时精度达到0.001s,解决了传统的由于计时精度不够造成的误差和不公平性,是各种体育竞赛的必备设备之一。
另外硬件部分设置了查看按键,可以对秒表上一次计时时间进行保存,供使用者查询。
本设计的数字电子秒表系统采用AT89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现五位LED显示,显示时间为0~99.999秒,计时精度为0.001秒,能正确地进行计时,同时能记录一次时间,并在下一次计时后对上一次计时时间进行查询。
其中软件系统采用汇编语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键词:
单片机数字电子秒表仿真
一、设计功能与要求
(一)、系统功能
数字式电子秒表系统具有毫秒、秒、分的累进显示功能(到59分后自动复零),并可以任意设置时钟初值,即可以在任意时刻开机运行。
作为秒表,系统可通过按键开始记录时间,在某一事件结束时,又通过按键使秒表停止运行,并显示该事件经历的时间,要求精确到0.01s(即10ms)。
(二)、设计要求
1、采用单片机(AT89C51)为核心器件,构成数字式电子秒表系统。
2、用6位LED数码管分别显示分、秒、毫秒(显示格式要求为XX、XX、XX)。
3、通过按键,实现下列人机对话功能:
①按OK键,电子秒表开始计时;
②按设置键,设置时钟初值;
③按清零键,时钟清零;
④按暂停键,电子秒表暂停计时。
4、利用定时器/计数器/作10ms的定时,当定时时间到后,进入中断服务程序,在中断服务程序中实现时钟累进。
5、通过4个按键实现时钟运行,停止等人机对话功能,利用74HC573和74HC138芯片驱动LED数码管,实现时钟的显示。
二、设计构思
首先,以微处理器AT89C51为核心,利用微处理器的P0端口和P2端口实现数据、地址的传送。
由于P0端口无锁存功能,所以P0端在进行地址传送时需加74HC573锁存器。
因微处理器AT89C51芯片内有程序存储器EPROM8K和数据存储器RAM256字节,所以微处理器没有进行外存储器的扩展,直接利用微处理器内部的程序存储器和数据存储器。
其次,利用74HC138芯片,将8个LED数码显示管实现动态显示。
由于是8个LED数码管将扫描线中三根线经74HC138译码器产生8个扫描线分别接到八个数码管共阴极控制端。
再次,系统软件的主程序,它包括三个部分:
第一部分为初始化设置,包括设置定时器/计数器初始化、显示缓冲区初始化、开中断、定时器/计数器启动等。
第二部分是对键盘进行扫描,判断是否键按下,按的是哪一个键,根据不同的按键实现各种人机对话功能;
第三部分是实现电子秒表的显示。
最后,中断服务程序,它的主要功能是实现时钟累进,以及如何判断是否已到24小时。
三、软件设计
(一)、程序设计思想
本设计采用了汇编语言编写,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。
汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。
使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
汇编语言的特点:
1、面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2、保持了机器语言的优点,具有直接和简捷的特点。
3、可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5、经常与高级语言配合使用,应用十分广泛。
在程序设计过程中,为了有效地完成任务,把所要完成的任务精心的分割成若干个相互独立但相互又仍可有联系的任务模块,这些任务模块使得任务变得相对单纯,对外的数据交换相对简单,容易编写,容易检测,容易阅读和维护。
这种程序设计思想称为模块化程序设计思想。
模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。
因此,本医院病床呼叫系统在软件的设计上,运用了模块化程序的结构对软件进行设计,使得程序变得更加直观易懂。
程序的主要模块有:
主程序、显示程序、定时溢出中断服务程序、外部中断服务程序。
(二)、系统资源的分配
本设计系统所用到的单片机端口数比较多,所以在这里将对数字电子秒表的硬件资源的大概分配加以说明。
片内RAM的分配、各功能键的定义以及各端口的分配安排如表2.1所示。
表2.1端口的分配安排表
名称
功能描述
初始化值
79H-7DH
1ms-10s位显示寄存区
00H
69H-6DH
1ms-10s位中间寄存区
59H-5DH
1ms-10s位最终寄存区
R1-R5
1ms-10s位溢出计数区
定时器T0
控制秒表的最小精度
E018H
外部中断INT0
停止中断信号入口
外部中断INT1
开始中断信号入口
(三)、主程序设计
本系统程序主要模块由主程序、定时中断服务程序、外部中断0服务程序和外部中断1服务程序组成。
其中主程序是整个程序的主体。
可以对各个中断程序进行调用。
协调各个子程序之间的联系。
系统(上电)复位后,进入主程序,主程序流程图如图2.1。
首先对系统进行初始化,包括设置各入口地址、中断的开启、对各个数据缓存区清“0”、赋定时器初值,初始化完毕后,就进入数码管显示程序。
数码管显示程序对显示缓存区内的数值进行调用并在数码管上进行动态显示。
显示一次就对P1.1和P2.5进行一次扫描,查询复位键P1.1是否按下,当复位键按下后,程序返回开始,重新对系统进行初始化。
当没有按下复位键时,程序则扫描P2.5是否按下,当P2.5没有按下则返回显示程,不断地调用显示缓存区的数据进行显示。
使用户能清楚的看到当前电子秒表所记录的时间。
当查询到P2.5按下后则跳转到另外一段显示程序并调用最红缓存区的数据进行显示,此时显示的时间即为上一次计时的时间。
与此同时,在P2.5按下后单片机执行显示程序的同时也在对P2.5进行扫描,当P2.5断开后立即跳转回之前的显示程序显示当前的计时时间。
在主程序中还进行了赋寄存区的初始值、设置定时器初值以及开启外部中断等操作,当定时时间到后就转去执行定时中断程序。
当外部中断有请求则去执行外部中断服务程序。
并在执行完后返回主程序。
图2.1主程序流程图
(四)、中断程序设计
现在方案中采用了三个中断,外部中断INT0,INT1和定时中断T0。
CPU在响应中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理。
例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。
待服务结束,再继续执行原来较低级的中断服务程序。
而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套。
,合理分配中断对本设计的实现是至关重要的。
另外由于数字式电子秒表的最小精度位1ms,属于高精度电子秒表。
定时器T0的定时周期也为1ms,为了使电子秒表暂停键按下后CPU能马上去响应中断程序,必须将暂停的外部中断级别高于定时计数器的中断级别。
避免出现CPU执行完定时溢出中断程序后再响应外部中断程序,影响计时精度。
AT89C52的自然优先级顺序排列如下:
中断源最高
外部中断0
定时/计数器0溢出中断
外部中断1
定时/计数器1溢出中断
串行口中断最低
数字式秒表中的两个按键采用了中断实现功能。
开始采用外部中断INT0,暂停采用外部中断INT1。
另外程序中还用到了定时/计数器0溢出中断进行计时。
依据设计要求,暂停的外部中断INT1中断级别最高,计时的定时/计数器0溢出中断次之,开始的外部中断INT0级别最低。
1、外部中断0服务程序:
外部中断0服务程序结合外部P3.2停止键实现数字电子秒表的停止功能,具体流程图如图2.2。
当按下P3.2停止键按下向CPU发出外部中断请求,CPU转向外部中断0服务程序执行,停止定时器。
另外将当前显示的时间进行一次存储,存进中间寄存区。
最后中断返回。
图2.2外部中断0服务程序流程图
2、外部中断1服务程序
外部中断1服务程序结合外部P3.3停止键实现数字电子秒表的启动功能,具体流程图如图2.2。
当按下P3.3启动键按下向CPU发出外部中断请求,CPU转向外部中断1服务程序执行,启动定时器。
另外进行二次存储,将之前进行一次存储的数码管显示数据存入最终缓存区,避免下次计时暂停时一次存储将数据掩盖,从而起到保护数据的作用。
二次存储后就中断返回。
图2.3外部中断1服务程序流程图
3、定时中断服务程序
当定时/计数器T0器溢出后,向CPU发出中断请求信号。
CPU跳转到定时中断程序执行,具体流程如图2.4。
定时中断程序是一个进位程序,主要负责对1ms的加一。
1ms位没有满十就跳出中断程序,返回显示程序。
当1ms位满十后就对1ms位清零,向10ms位加一,同时检测10ms位是否满十,没有满十就跳出中断程序,返回显示程序。
如果满十就向100ms位加一,依次类推,最终达到99.999秒后归零,从零开始再次计时。
定时/计数器T0工作在方式0下,TH0和TL0组成一个13位的二进制数计数器。
单片机开机或复位时,它的值为00H,当T0启动后,从第一个输入脉冲开始计时,每来一个脉冲计数加一,即从0000000000000开始计数到1111111111111,再计数一个脉冲时TH0和TL0组成的13位计数器将会从13个1变成13个0,并产生溢出,溢出位将被送到TF0标志位,通过溢出标志产生溢出中断请求。
显然,T0定时器在方式0下引起一次中断所允许计数的最多脉冲个数为213个。
但如果定时计数器如果每次都固定从0开始计数,到计满后,再向CPU发出溢出中断请求信号那是毫无意义的。
为了使定时计数器在规定的计数脉冲个数字之后(此时应小于213个脉冲),向CPU发出溢出中断请求,可采取预先向TH0和TL0中放入一个初值X的方法,使计数器以X值为起始值开始计数,即X+1,X+2,……直至计数器计满,从1全变为0。
设需要计数的脉冲个数为Y,则有:
X+Y=213
在定时方式下:
定时时间间隔位t=(213—X)*振荡周期*12
现在本设计要求1ms实现一次中断,选择定时器T0工作在方式0。
所以需要根据以上条件计算出T0的初值。
设T0的初值为X,则
(213—X)*12/12*106=1*10-3
转换位十六进制数X=7192=1110000011000B
即TH0=0E0H(取X的高8位)
TL0=18H(取X的低5位)
由于定时1ms只是一个理想化的时间,其中并没有考虑到中断后单片机执行语句所花的时间。
虽然执行语句所花的时间很短只有即微秒,但积少成多,数字秒表一秒中要溢出中断1000次,积累起来误差就能达到毫秒级,这对于精度到达毫秒级的数字电子秒表来说是很大的误差。
所以要在后期编程时还要将单片机读程序的时间考虑进去,
在对定时器赋初值时将单片机需要执行的语句所花的时间加上,这样就能使数字电子秒表的误差达到最小。
四、硬件电路的设计与实现
(一)、AT89C51微处理器介绍
1、AT89C51微处理器的背景
AT89C系列单片机(微处理器)是ATMEL公司1993年开始研制生产的,优越的性能价格比使其成为颇受欢迎的8位单片机。
AT89C系列与MCS—51系列单片机在软、硬件上相互兼容,但AT89C系列与MCS—51系列单片机相比有两大优势:
第一,片内程序存储器采用闪速存储器,使程序的写入更加方便;
第二,提供了更小尺寸的芯片(AT89C2051/1051),使整个硬件电路的体积更小。
AT89C系列单片机有四种型号:
AT89C51、AT89C52、AT89C1051、AT89C2051,其中AT89C2051/1051是ATMEL公司AT89C系列的新成员。
它的较小的体积、良好的性能价格比倍受青睐,在家电产品、工业控制、计算机产品、医疗器械等应用方面成为用户降低成本的首选器件
2、AT89C51单片机的功能结构
AT89C51单片机芯片为40个引脚,HMOS工艺制造的芯用片采双列直插(DIP)方式,其引脚示意及功能分类如图4.1所示。
它具有如下主要特性:
AT89C51与MCS-51兼容;
内部带4KB可编程闪速存储器;
寿命为1000次擦/写循环;
数据保留时间为10年;
工作电压范围为2.7V—6V;
令静态工作频率为0Hz—24Hz;
128×
8位内部RAM;
32条可编程I/O线;
2个16位定时器/计数器;
5个两级中断源;
可编程全双工串行UART通道;
图4.1AT89C51引脚图
3、AT89C51单片机的应用
在本电路中AT89C51单片机只用到了P0端口和P2端口的一部分以及中断
(P3.3)、定时器/计数器(P3.5)、读/写状态线(P3.6、P3.7)、复位端RST/
VP0(9脚)、ALE/
(30脚)允许地址锁存信号端。
(29脚)片外程序存储器读选通信号输出端,按高电平;
/VPP为访问外部程序存储器控制信号端,按高电平;
中断0
(P3.2)按高电平;
将P0端口与接口芯片8279的8位数据线DB0—DB7相连,读/写状态线(
/
)与接口芯片8279的读/写状态线(
)相连。
XTAL1、XTAL2(18、19脚)外接12MHZ的晶体振荡器。
(二)、总线锁存器74HC573功能结构
74HC573是3态非反转透明锁存器芯片,当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
输出能直接接到CMOS,NMOS和TTL接口上
操作电压范围:
2.0V~6.0V低输入电流:
1.0uACMOS器件的高噪声抵抗特性。
管脚功能如图:
74HC573功能表
74HC573逻辑图:
原理说明:
74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。
当使能为低时,输出将锁存在已建立的数据电平上。
输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。
这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。
特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。
当OE=1是,无论Dn、LE为何,输出端为高阻态;
当OE=0、LE=0时,输出端保持不变;
当OE=0、LE=1时,输出端数据等于输入端数据。
在实际应用的时候是这样做的:
1、OE=0;
2、先将数据从单片机的口线上输出到Dn;
3、再将LE从0->
1->
0
4、这时,你所需要输出的数据就锁存在On上了,输入的数据在变化也影响不到输
(三)、译码器74HC138功能结构
3—8译码器74HC138为一种常用的地址译码器芯片,其管脚图如图4.3所示。
其中,G1、
2A、
2B为3个控制端,只有当G1为“1”且
2B均为“0”时,译码器才能进行译码输出。
否则译码器的8个输出端全为高阻状态。
译码输入端与输出端之间的译码关系表4.1所示。
图4.374HC138引脚图
表4.174HC138的译码关系
A2
A1
A0
输出有效
1
(四)、LED数码显示电路的实现
由于LED数码显示器为多位,采用动态显示扫描显示方式,即逐个地循环地点亮各位显示器。
这样虽然在任一时刻只有1位显示器被点亮,但是由于人眼具有视觉残觉效益,看起来与全部显示器持续点亮的效果基本一样。
为了实现8个LED显示器的动态扫描显示,段码控制信号经74HC573芯片使显示器刷新寄存器输出。
而位控制信号由单片机的P2口经译码器74HC138输出
、
、…
共8个扫描线与LED显示器数码管共阴极相连。
8位LED显示器的每位显示段码通过显示字符子程序以查看方式(MOVCA,@A+DPTR)进行确定和输出显示子程序(Display),显示缓冲区的首地址为50H。
致谢
我这次毕业设计是在XXX老师的精心指导下完成的,XXX老师为我对本文的完成提供了良好的设施和环境,从论文的选定到实验研究,从资料收集到方案确定,唐朝仁老师都给了我大量的中肯的建议和意见,我的每步工作都凝聚了老师们辛勤汗水。
同时,周老师的严谨的治学态度和忘我的工作精神以及高尚的师德给我留下了深深的影响,这将激励我更好地完成今后的学习和工作。
借此机会对周老师的精心教育和指导表示忠心的感谢;
也借此机会,感谢大学五年来辛勤教育指导我的各科任老师。
我也很感谢论文答辩的各位评委老师,感谢他们在百忙之中抽出时间帮我们答辩。
还要感谢班里的同学对我不懈的支持与帮助。
通过这次设计,我学到了很多知识,同时也认识到在团队工作中需要有合作精神,我想这会为今后自己踏上工作岗位、更好地融入新的团队打下良好的基础。
结束语
本设计的数字电子秒表是由AT89S52单片机、共阴数码显示管、控制按键、三极管等器件构成的,设有六位计时显示,开始、暂停、复位、查看按键以及一个系统整机复位按钮。
计时精度能到达1ms,能调看上一次计时时间,设计精简,使用简单易懂。
系统设计合理,线路简单、功能先进,性能稳定,程序精简。
并给出了详细的电路设计方法。
本系统是以单片机为核心,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
所以采用汇编语言来进行软件设计,利用汇编语言面向机器并能较好的发挥机器的特性,得到较高的程序,同时汇编语言目标代码简短,占用内存少,执行速度快,能提高秒表的精度。
通过毕业设计,复习巩固我们以前所学习的数字、模拟电子技术、单片机原理及接口等课程知识,加深对各门课程及相互关系的理解,同时,在毕业设计的过程中,我也发现了本系统的许多不足和可以改进的地方。
但因时间紧迫等原因没能改进。
本设计的数字电子秒表缺少对多次计时时间进行记录的功能。
应给在单片机的内部存储区多设置一些存储空间,用来存储多次计时时间。
并在程序中编入对多次计时时间的调用显示。
虽然存在不足,但本设计开发的数字电子秒表仍具有它的实用性。
参考文献
郑毛祥.单片机应用基础.人民邮电出版社,2006.6:
21-42
李邓化,彭书华,许晓飞.智能检测技术及仪表.科学出版社,2007:
194-201
戴佳.单片机C51语言应用程序设计.电子工业出版社,2006.7:
168-169
朱民雄.计算机语言技术.北京航空航天大学出版社,2002.1:
103-105
李鸿.单片机原理及应用.湖南大学出版社.2004:
8:
72-73
刘建清.单片机技术.国防工业出版社,2006.8:
104-105
杨宁,胡学军.单片机与控制技术.北京航空航天大学出版社,2005-03:
306-322
马忠梅等.单片机C语言应用程序设计.北京航空航天大学出版社,1997:
201-211
附录一程序
;
P0接数码管段,P2接数码管位。
DATA1EQU30H;
DATA2EQU31H;
DATA3EQU32H;
DATA4EQU33H;
DATA5EQU34H;
DATA6EQU35H;
DISBUFEQU2FH;
DISDIGEQU2EH;
ORG0000H;
LJMPMAIN;
ORG000BH;
LJMPDISPLAY;
ORG0030H
MAIN:
MOVSP,#20H
MOVDISBUF,#30H;
MOVDISDIG,#00000001B;
MOVA,#00H;
MOVDATA1,A;
MOVDATA2,A;
MOVDATA3,A;
MOVDATA4,A;
MOVDATA5,A;
MOVDATA6,A;
MOVTMOD,#01H;
MOVTH0,#0FCH;
MOVTL0,#17H;
SETBEA;
SETBET0;
SETBTR0;
Q00:
LCALLUPDATA;
LCALLDELAY;
LJMPQ00;
UPDATA:
;
刷新显示子程序
incDATA1;
个位显示缓冲单元加一
mova,DATA1
cjnea,#10,EXITUPDATA;
还没加到十,退出
movDATA1,#00h;
加到十了,个位清零
incDATA2;
十位显示缓冲单元加一
mova,DATA2
cjnea,#10,EXITUPDATA;
movDATA2,#00h;
加到十了,十位清零
incDATA3;
百位显示缓冲单元加一
mova,DATA3
movDATA3,#00h;
加到十了,百位清零
incDATA4;
千位显示缓冲单元加一
mova,DATA4
cjnea,#6,EXITUPDATA;
还没加到六,退出
movDATA4,#00h;
加到六了,千位清零
incDATA5;
mova,DATA5
movDATA5,#00h;
加到十了,千位清零
incDATA6;