目录
第1章 总体方案设计
1.1设计任务与要求
1.2设计原理或者设计思路
第2章 硬件电路设计
2.2显示电路
2.3控制电路
第3章 软件设计
3.1系统主程序
3.2系统子程序
3.3中断服务程序
第4章 调试
4.1系统调试方法
4.2调试结果
4.3调试中遇到的问题及其解决方法
总结
附录一
附录二
第1章 总体方案设计
1.1设计任务与要求
1.1.1设计任务:
利用单片机为核心设计一个多功能电子表,具有电时钟和跑表功能。用做时钟时,在显示器上显示时、分、秒,用做跑表时,显示范围00时00分00秒-23时59分59秒并具有跑表启动和跑表复位功能键。当按下启动按钮跑表开始计时,按下停止按停止计时,当按下复位按钮跑表回零。
1.1.2设计要求:
1)确定系统设计方案;
2)进行系统的硬件设计;
3)完成必要的参数计算与元器件选择;
4)完成应用程序设计;
5)应用系统的硬件和软件的调试。
1.2设计原理或者设计思路
电子跑表的电路由多个部分组成,如控制按键的输入电路,单片机的时钟电路,复位电路 ,显示电路,秒表电路,LED显示器段码驱动电路,LED显示器位码驱动电路及秒表记录电路组成。
本电子跑表采用AT89C52单片机为核心器件,AT89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
将LED数码管与单片机和开关连接,用于显示时钟与跑表。P3.2-P3.4分别接开关K1-K3,P3.5和P3.6接开关K4,P1.0-P1.5接LED数码管输出位码,P0.0-P0.7输出显示段码。电子跑表是利用单片机内部的定时器来实现的,首先设置单片机内部的一个定时器1对秒表数据处理,定时器0对时间数据处理。
在本设计中LED数码显示器采用的是共阴极接法,把发光二极管的阴极连在一起构成 公共阴极,使用时公共阴极接地,每个发光二极管的阳极通过电阻与输入端相连。当阳极端输入高电平时,段发光二极管就导通点亮,而输入低电平时则不亮。
第2章 硬件电路设计 2.1时钟电路
单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路。

图2.1.1 时钟电路
图2.1.2 单片机
2.2显示电路
本设计显示用的是四位七段显示共阴数码管,用来显示时间及跑表参数,LED数码管显示器成本低,配置灵活,与单片机接口简单,在单片机应用系统中广泛应用。
为了将时间显示在LED数码管上,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。由于数码管扫描周期很短和人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
LED显示流程图如下:
图2.2.1 显示程序流程图
图2.2.2 LED数码显示管
2.3控制电路
K1键:模式选择,可以让时钟、秒表、时间设置及秒表的记录进行切换;
K2键:加一、开始及暂停,设置时间设置时可以调节时和分加一,秒表记录时可以开始和暂停;
K3键:切换和清零,当需要设置时间时,按下K3可以切换‘时’和‘分’;当显示秒表时,K3具有清零功能;
K4键:记录秒表,电路为秒表功能时,按下K4可以记录一组秒表数据,最多可以记录20组数据。
图2.3 开关控制电路
第3章 软件设计
3.1系统主程序
主要进行定时器的初始化编程,然后反复调用显示子程序的方法,等待中断的到来。K1是模式选择开关,当K1没有按下时,数码管表示时间;当K1第一次按下时,数码管表示秒表;当K1第二次按下时,数码管表示时间设置,并可以闪烁定位;当K1第三次按下时,数码管显示秒表记录。
主程流程图如下:单片机源程序如下:
图3.1 主程序流程图
3.2系统子程序
子程序包括时钟设置显示程序,时钟运行显示程序,时钟溢出入口程序,跑表暂停,跑表记录数据程序。
3.2.1显示时钟模式
如果K1=0时,程序设定为12.00.00起始计时,通过计数方式进行满60秒分钟位进一,满60分小时位进一,满24小时小时位清零。
3.2.2时间设置模式
如果K1=2时,先判断是否为时间设置模式,再判断K2是否按下,需要判断是否为误按,所以需要延时消抖,然后检测用户需要设置时还是分。
设置分,则跳到59之后重新赋值为0;
设置时,则跳到23之后重新赋值为0 。
K3每按一次Set0取反,时分切换,Set0为0时设置‘分’,Set0为1时设置‘时’。设置时间时用if语句实现分和钟以0.5秒的频率闪烁。
3.2.3秒表模式
如果K1=1时,先判断是否为秒表模式,再判断K2是否按下,需要判断是否为误按,所以需要延时消抖,K2每按一次TR1取反,暂停或开始定时器1,达到暂停或开始秒表的目的。当K4按下时秒表记录一组数据。当K3按下时清除所有秒记录数据,并停止定时器1。
3.2.4秒表记录显示模式
如果K1=3时,先判断是否为秒表记录显示模式,再判断K2是否按下,需要判断是否为误按,所以需要延时消抖,将秒表的记录分为4组,可存20组数据。当K3按下时秒表所有数据清零,并停止定时器1。
定时器1函数对于秒表数据处理,每两次循环进行一次操作,这样秒表1(1/10秒位)每加1次为0.1s。当秒表1(1/10秒位)加到10时,重新赋值为0,此时秒表2(秒位)开始增加;当秒表2(秒位)加到60时,重新赋值为0,此时秒表3(分位)开始增加;当秒表3(分位)加到60时,重新赋值为0,此时秒表4(时位)开始增加;当秒表4(时位)加到10时,重新赋值为0。
定时器0函数每溢出10次Time0_bit取反一次,时间间隔为0.5秒闪烁一次,以达到时间设置模式时,分和时的闪烁。
3.3中断服务程序
中断服务程序的作用是进行计时操作,定时器0和定时器1都选择第1种工作方式。定时器0和定时器1装初值,定时50ms。
中断服务程序流程图如下:
图3.3 中断程序流程图
第4章 调试4.1系统调试方法本次课程设计采用的是Proteus仿真软件进行电路的仿真,编程使用Keil生成可执行文件加载到单片机中,通过对各个模块程序的单步或跟踪调试,使程序正确,最后统调程序,并生成相应的*.hex文件。进行程序的运行和调试,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查找错误,直到满足要求。
4.2调试结果K1键表示模式选择,可以让时钟、秒表、时间设置及秒表的记录进行切换;
K2表示加一、开始及暂停,设置时间设置时可以调节时间,秒表记录时可以开始和暂停;
K3表示切换和清零,当需要设置时间时,按下K3可以切换‘时’和‘分’;当显示秒表时,K3具有清零功能;
K4表示记录秒表,电路为秒表功能时,按下K4可以记录一组秒表数据。
图4.2.1 秒表时的调试结果
图4.2.2 时钟调试结果
4.3调试中遇到的问题及其解决方法按下K4记录秒表数据时,当记录次数大于20时,还是会继续保存数据,但由于AT89C52单片机内存不够,保存次数多了就会出现乱码。发现这个问题后小组成员检查程序是否有错,然后在同学的帮助下修改了程序。
总结在课程设计第一天,老师带领我们焊电路板,为之后的实物连接做准备,有了上学期电子实习的经验,这次焊接很迅速,半天就焊好了两块电路板,在老师的帮助下顺利仿真。
课程设计开始几天,基本上没有收获,不知从何下手,不知所措。为了看得更远,,不妨站在前人的肩膀上,我在整体思路模糊的情况下,在网上找资料。也自己研究了一下Proteus仿真软件的使用,仔细研究AT89C52芯片的主要功能及管脚接法,这也就为后面比较成功的仿真出结果打下了基础。随着涉猎的点滴积累,我对电子跑表的设计方案已经慢慢酝酿而成,有了方向和不少知识储备后,在接下来的几天,几乎每天都有突破,虽然有时只是一句程序的修改或诞生,但那种收获一直激励着我。当然在设计过程中也遇到了一些问题,比如秒表记录次数超过20次后会出现乱码情况,在老师的指导下,经过一次又一次的思考,一遍又一遍的检查,我终于发现了问题所在,也暴露了前期我在这方面的知识欠缺和经验不足。实践才是检验真理的唯一标准,唯有通过亲自动手才能令我们掌握的知识不再是纸上谈兵的东西。
经过一周的课程设计,我收获颇多,有深刻的心得体会,实践让我们受益匪浅。首先是单片机方面,为了顺利完成程序的编写,我又捡起了大一所学习的C语言知识。其次锻炼了小组合作的能力,合理的分工让我们组的课程设计按时完成,并对本专业的课程充满了浓厚的兴趣,相信有了兴趣,我在以后对本专业的学习会更加得心应手。在这次过程中我们也曾灰心也曾茫然,也曾不知所措,从一开始的自信满满,到最后的紧张繁杂,所有这些都令我回味无穷,这已经成为我人生道路上的宝藏。我想今后的学习和工作也是这样的,汗水见证成功。
附录一