单片机电子时钟课程设计报告资料.docx
《单片机电子时钟课程设计报告资料.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟课程设计报告资料.docx(18页珍藏版)》请在冰豆网上搜索。
单片机电子时钟课程设计报告资料
电气信息学院
微机与单片机综合课程设计报告
课题名称电子时钟的设计
专业班级
学号
学生姓名
指导教师
评分
2016年12月19日至12月25日
课程设计的任务要求
一、课程设计选题:
从以下课题中任选一题进行,各课题具体要求详见“微机与单片机综合课程设计题目汇总”文档。
并在课程设计报告的正文中详细说明。
1.彩灯控制器的设计
2.电子时钟的设计
3.现代交通灯的设计
4.多路抢答器的设计
5.波形发生器的设计
6.点阵广告牌的设计
7.篮球记分器的设计
8.数字式温度计的设计
9.步进电机的控制
10.电子音乐盒的设计
11.电风扇模拟控制系统设计
12.洗衣机人机界面的设计
13.秒表系统的设计
14.多机串行通信的设计
15.电子密码锁的设计
16.4位数加法计算器的设计
17.数字频率计
18.数字电压表
二、选题说明:
一人一题,一个教学班级同一题不能被选超过两次。
鼓励同学们将各设计中的基本任务完成后,选做部分发挥项。
题中带*和#符号的任务,属于发挥部分。
三、设计时间及进度安排:
第17周,12.19~12.25
12.19题目分析,文献查阅
12.20设计方案
12.20~12.21元器件选型,硬件电路设计
12.22~12.24软件设计,系统调试
12.25课程设计说明书(报告)撰写
四、设计作品提交:
(1)课程设计说明书(纸质版,用于存档);
(2)课程设计说明书(电子版),单片机源程序文件(电子版);
(3)Proteus仿真程序或实物。
五、设计考核评定:
教师评分:
80%,答辩成绩:
20%
答辩记录
1、例举设计过程中遇到的主要问题及其解决方法。
(1)问题说明:
单片机复位按键按下后时钟没有回到00:
00:
00;
时钟到达闹钟设定值后二极管闪烁,但是蜂鸣器不发出声响。
(2)解决方法:
检查复位电路,减小了复位电路中电阻的阻值,复位键正常工作;
检查了蜂鸣器电路,发现无误后用喇叭代替了蜂鸣器,喇叭正常发出声响。
2、教师现场提的问题记录在此(不少于2个问题)。
问题1:
系统电路中的两个锁存器有什么用?
答:
当锁存器的LE端口为高电平时,锁存器的输出随输入的改变而改变,当LE为低电平时,锁存器的输出不随输入的改变而改变,这样当输入的数据消失时,在芯片的输出端,数据仍然保持。
接在P0口的锁存器控制数码管的段选,接在P1口的锁存器控制数码管的位选。
问题2:
你设计的数码管采用什么扫描方式?
答:
因为使用锁存器做驱动电路,所以数码管是采用静态扫描方式。
问题3:
你设计的按键电路为什么不加上拉电阻?
答:
如果按键设置的是低电平有效,就要加上拉电阻,按键按下后输入低电平,按键恢复后有上拉电阻将输入拉高,高电平与电阻之间加电阻是为了保护电路。
我设置的按键是高电平触发,单片机引脚默认输出的是高电平,所以不需要加上拉电阻。
课程设计量化评分标准
指标
分值
评分要点
得分
方案设计
20
方案选择合理,分析、设计正确,原理清楚,电路、程序流程图清晰,结构合理,程序简洁、正确。
设计报告
20
报告结构严谨,逻辑严密,论述层次清晰,语言流畅,表达准确,重点突出,报告完全符合规范化要求,用计算机打印成文。
调试与结果
20
过程清晰,调试方案设计合理,测试点选择适当,程序编写正确,调试步骤清楚。
电路及程序运行结果正确,达到预期效果。
工作态度
20
工作量饱满程度,题目难度;工作态度,按时完成设计任务,是否独立完成等。
答辩成绩
20
思路清晰;语言表达准确,概念清楚,论点正确;分析归纳合理,结论严谨;回答问题有理论根据,基本概念清楚。
总评成绩
指导老师评语:
指导教师签字:
2016年 月 日
摘要
随着科学技术的不断发展,人们对时间计量的精度要求越来越高。
电子时钟是一种利用数字电路来显示日期、时、分、秒的计时装置,可以调整时间、设置闹钟,与传统的机械钟相比,直观性为其显著特点,且因非机械驱动,具有更长的使用寿命,相较石英钟的石英机芯驱动,更具准确性。
本设计利用Proteus软件仿真,以单片机AT89C51芯片、LED数码管和74HC573锁存器为核心,辅以必要的电路,构成一个单片机电子时钟,系统利用功能强大的C语言开发,并在设计中使用了Keil开发平台。
结果表明,该设计具有性价比高、操作简单、功能丰富等优点,基本完成了对电子时钟的各项要求。
关键词:
电子时钟;单片机;Proteus;Keil
Abstract
Withthecontinuousdevelopmentofscienceandtechnology,peopleareincreasinglydemandingtheaccuracyoftimemeasurement.Theelectronicclockisaclockdigitalcircuitisusedtodisplaythedate,time,minutesandsecondsofthedevice,youcanadjustthetimeandsetthealarmclock,comparedwiththetraditionalmechanicalclocks,intuitiveforitsremarkablecharacteristics,andasaresultofnonmechanicaldriving,withalongerlife,drivinginthequartzclockquartzmovement,moreaccuracy.ThisdesignusingtheProteussoftwaresimulationbasedonAT89C51chip,LEDdigitaltubeand74HC573latchasthecore,withthenecessarycircuit,constituteasinglechipelectronicclock,andtheKeildevelopmentplatformusedinthedesign.Theresultsshowthatthedesignhastheadvantagesofhighcostperformance,simpleoperation,richfunctions,etc.,basicallycompletedtherequirementsoftheelectronicclock.
Keywords:
Electronicclock;Single-Chip-Microcomputer;Proteus;Keil
3系统硬件设计
3.1时钟电路设计
图3.1单片机晶振电路
如图3.1所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。
其发出的时钟脉冲直接送入片内定时控制部件。
3.2复位电路设计
如图3.2所示,采用上电+按钮电平复位方式,当按下按钮时,RST管脚高电平触发。
为保证复位可靠,RC时间常数应大于两个机器周期,电容取10uf,电阻取1k欧。
图3.2单片机复位电路
3.3数码管驱动电路
如图3.3所示,数码管驱动电路由两个锁存器74HC573构成,AT89C51的P2.6端口连接锁存器的锁存控制端,该锁存器控制7段数码管的段选,显示给我们的就是一个数字。
P2.7端口控制连接另一个锁存器的锁存控制端,该锁存器控制6个数码管的位选。
当LE为高电平时,锁存器的输出随输入的改变而改变,当LE为低电平时,锁存器的输出不随输入的改变而改变,这样当输入的数据消失时,在芯片的输出端,数据仍然保持。
图3.3数码管驱动电路
3.4闹钟提醒电路
如图3.4所示,AT89C51的P2.3端口连接FM,P3.2端口连接M1,P3.3端口连接M2。
通过软件编程,当时间到达设定值时,二极管闪烁,喇叭声响。
图3.4闹钟提醒电路
3.5按键控制电路
图3.5按键控制电路
如图3.5所示,开关控制由四个连接到单片机的控制按钮组成。
通过软件编程,按下时间日期切换按键可以查看日期或时间;当处于时间模式时,按下秒清零按键,秒回到00;按下定时按键后,按一下调时按键,进入小时调整,按两下调时按键,进入分钟调整,按三下调时按键,进入秒调整,分别可以上调或下调,按四下调时按键,退出定时模式。
当处于时间或者日期模式时,按一下调时按键,进入小时或者年份调整,按两下调时按键,进入分钟或者月份调整,按三下调时按键,进入秒或者日调整,按四下调时按键,退出调时模式。
4系统软件设计
4.1电子时钟的程序流程图
图4.1主程序流程图
系统的主程序流程图如图4.1所示。
系统上电后首先完成变量的初始化,然后根据设定的时间初始值从00:
00:
00开始计时,然后检测是否定时,是就进入闹钟设定功能,退出闹钟设定后进入时间模式,同时检测时间日期切换键,判断显示时间还是日期,然后检测调时键,按下后进入调时模式,可以调整时间或日期。
4.2中断定时程序
本设计采用定时器溢出中断和中断计数来实现定时一秒,具体为设置定时器初值使50ms触发一次中断,执行20次中断后加一秒。
系统上电后定时器初始化,开定时器后定时器开始计数,计数满溢出引发定时器中断进入定时器中断处理函数,重装定时器初值,检测秒清零按键和闹钟设定按键,若闹钟时间到则闹钟提醒。
图4.2中断程序流程图
5仿真与性能分析
5.1系统仿真过程
1 启动:
从Windows的“开始”菜单中启动ProteusISIS模块,可进入仿真软件主界面。
2 选取元件:
单击左侧绘图工具栏中的“元件模式”和对象选择“P”,弹出“PickDevices”元件选择窗口,如图5.1所示。
可利用“关键字”检索框查找所需元件,双击列出的元件名可将其放入对象选择列表窗口。
图5.1元件选择窗口
图5.2系统部分连线图
3 连线:
选择好要用的元件后,将元件摆放到合适的位置,就可以开始连线了,连线只需要直接单击两个元件的连接点,ISIS即可自动定出走线的路径并完成两连接点的连线操作。
如图5.2所示。
系统中元件太繁多会导致连线杂乱,这时可以使用左侧工具栏里面的“LBL”——“连线标号模式”,首先将连接点向外导出一段连线,点击“LBL”,然后在导线上单击,出现设置标号界面,设置好标号后在你想连接的另一个连接点同样用此方法,需要注意的是两个连接点的标号应相同。
4 画电源端:
单击绘图工具栏的“终端模式”,主界面对象选择窗口里将出现多种终端列表,其中POWER为电源(正极),GROUND为接地。
对其操作方式与对元件的操作方式相同。
5 添加.hex仿真文件:
原理图绘好后,需要加载可执行文件*.hex才能进行仿真运行,下面有两种方法加入“电子时钟.hex”文件:
(1)单击主菜单栏的“源代码——添加/删除源文件”,选择目标处理器“U1-AT89C51”,点击“新建”,在文件夹中找到文件即可。
(2)双击原理图中AT89C51可弹出元件属性对话框,单击“ProgramFile”框中的文件夹按钮,添加即可。
如图5.3所示。
图5.3添加.hex文件
6 仿真运行:
单击ISIS主界面左下角的仿真控制工具栏可进行仿真运行。
四个仿真按钮(从左至右)的功能依次是“开始”、“帧进”、“暂停”和“停止”。
5.2仿真结果与分析
单击“开始”,系统仿真开始运行,电子时钟开始从00:
00:
00计时,按下K1按键后,数码管显示日期,再次按下K1按键,切回时间显示;按下K2按键后,当前电子时钟计时的秒回到00;按下K3按键后,系统进入闹钟设定模式,这时K2、K3分别作上调下调功能,数码管显示00:
00:
00,按下一次K4按键,开始闹钟小时设定,按下两次K4按键,开始闹钟分钟设定,按下三次K4按键,开始闹钟秒的设定,按下四次K4按键,退出闹钟设定模式,当时钟计时到设定值后,发光二极管闪烁,喇叭发出声响提醒。
同理,在时钟和日期模式,可以用K4调时。
如果要修改系统数据,必须停止仿真。
刚开始调试发现单片机复位按键按下后无效,定时时间到蜂鸣器不能发出声响,最后修改了电阻R1的大小和用喇叭代替蜂鸣器才得以解决。
图5.4系统仿真结果
6设计小结
这次单片机课程设计用了一个星期的时间,我们按照老师的基本要求做出了简单的系统硬件仿真,并对所需功能进行了编程,基本实现了电子时钟的时间日期闹钟功能,虽然有很多不足之处,但是让我们体验了一次当设计师的感觉。
当老师分配好设计任务以后,我在图书馆和网上查阅了大量关于用单片机为核心来设计电子时钟的资料,面对众多的资料,刚开始很茫然,完全不知道该从哪里入手。
回来首先在自己电脑按照教程将此次课程设计所需要的软件Proteus7.8和Keil,简单掌握了这两个软件的基本功能和使用方法。
第一天结束就做了这些准备,自己的设计思路还不是很清晰,晚上感觉自己既紧张又担心。
第二天我开始迫切的和同组的同学讨论我们的设计方案,从硬件设计到软件设计,硬件上该选用什么类型的元件更有效,软件上怎么编程才能既简单功能又繁多。
我们查阅了各种可以选用的元件的资料,从中挑选出自己觉得合适的元件,虽然可能对元件的结构和原理并不是很懂,但是通过资料学习和实践可以加深我们的理解。
我们虽然一整天都在不停的查资料和探讨,但是我们一点也不觉得疲倦,因为学习一些新知识让我们感到兴奋。
有的时候想要的资料查不到我们就向老师求助,他们都会毫无保留的帮助我们。
设计方案确定后我就开始在自己的电脑上连接电路,刚开始连接的图形各种交叉,显得特别不工整,在熟悉了软件功能后开始追求电路图的美观和排版,最后搭出了自己满意的电路图。
整个课程设计中最难的部分要算编程设计了,编程对C语言的要求非常高,刚开始只有大致的编程思路,在同组同学的帮助下,一步一步,将程序的大体写完了,还有很多细节出现了非常多的错误,有时候根本不知道错误出现在哪里,只看见仿真图上的时钟数字不按自己的设定计时,有时候一下午也发现不了问题所在,整天愁眉苦脸,心情特别烦躁。
后来通过各种办法将程序一句一句修改,最终将仿真与程序相结合,出现了自己预期的结果。
当你看到时间在仿真图上的数码管一秒一秒跳动时,你觉得这几天所有的烦恼都被抛开了,自豪和喜悦溢于言表,内心有自己成为了一名设计师的成就感。
本次设计还有很多不足的地方,比如当电子时钟断电重启后不能保持断电前的时间,而是从00:
00:
00开始计时,这样对于电子时钟来说显然不方便,解决方法是可以做一个掉电检测装置,检测到掉电时,将数据保存到EEPROM里面,上电时再将里面的数据读出来。
课程设计需要很大的耐心,尤其是遇到困难的时候,这也是对我们的考验,在设计过程中,我们遇到问题不应该感到焦躁,而是耐心的寻求解决办法,与老师、同学进行交流讨论。
我觉得这一周的课程设计时非常充实的,最重要的是将我们以前所学的知识巩固和进一步的提高,锻炼了我们学以致用的能力,提高了动手能力和独立分析问题与解决问题的能力,积累了我们的实践经验。
最后,我要感谢课程设计指导老师的悉心指导,感谢我的小组成在设计过程中提供的帮助。
参考文献
[1]林立,张俊亮.单片机原理及其应用[M].北京:
电子工业出版社,2014.
[2]沙占有,孟志永,王彦朋.单片机外围电路设计[M].北京:
电子工业出版社,2007.
[3]李学礼.基于Proteus的8051单片机实例教程[M].北京:
电子工业出版社,2008.
[4]贾好来.MCS-51单片机原理及应用[M].北京:
机械工业出版社,2007.
[5]周润景.PROTEUS入门实用教程[M].北京:
机械工业出版社.2007.
[6]徐爱钧,彭秀华.单片机高级语言编程与μVisio4应用实践[M].北京:
电子工业出版社,2008.
[7]丁明亮,唐前辉.51单片机应用设计与仿真[M].北京:
北京航空航天大学出版社,2009.
附录1系统原理图
附录2程序清单
voidmain()
{
init();
while
(1)
{
timerulers();
if(flagSetClock==0)
{
if(a==0)
{
yearDisplay(year);
monthDisplay(month);
dayDisplay(day);
}
elseif(a==1)
{
secDisplay(second);
minDisplay(minute);
hourDisplay(hour);
}
timing();
}
elseif(flagSetClock==1)
{
setclock();
}
}
}
voidinit()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
ET0=1;
EA=1;
TR0=1;
}
voidtime0()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;//重装定时器
intCounter++;
if(keyUp==0)//秒清零功能
{
delay(20);
while(!
keyUp);
second=0;
}
if((keyDown==0)&&(a==1))//定时模式
{
delay(20);
while(!
keyUp);
flagSetClock=1;
}
if((hour==setHour&&minute==setMinute&&second==setSecond)&&(hour!
=0||minute!
=0||second!
=0))//闹钟提醒
{
spk=!
spk;
led1=!
led1;
led2=!
led2;
//P1=~P1;
//setHour=0;
//setMinute=0;
//setSecond=0;
}
}