单片机课程设计报告电子钟.docx
- 文档编号:26160719
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:25
- 大小:142.63KB
单片机课程设计报告电子钟.docx
《单片机课程设计报告电子钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告电子钟.docx(25页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告电子钟
单片机应用设计报告
课程名称:
单片机电子时钟
学院:
机械与自动控制学院
专业:
机械电子工程
(1)班
姓名:
高云
学号:
2012330300165
指导教师:
张华
概述
1、设计过程
周次
具体时间
设计内容
第一周
1月13日
指导老师就课程设计内容、设计要求、设计进度安排、评分标准等作具体介绍。
强调课程设计期间纪律要求。
学生确定选题,明确设计内容及要求。
1月14日~16日
确定选题。
1月17日~20日
根据选题查阅资料,完成方案的初步设计,绘制程序流程草图。
第二周
1月21日~27
程序初步编写。
1月28日~30
指导老师进行指导修改。
1月30日下午
上交课程设计说明书,以及答辩。
2、结果
仿真完全实现预期的结果。
能够准确显示时间,自动计时,校准时间。
仿真结果如下:
目录
第1章绪论1
1.1研究背景1
1.1选题的目的和意义1
1.2本课程设计的主要内容2
第2章单片机电子时钟设计方案设计3
2.1设计方案3
2.1.1计时方案3
2.2.2显示方案3
2.2.3键盘的基本原理4
2.3.4LED显示器的基本结构与原理7
第3章硬件设计9
3.1硬件电路9
3.2数字钟的程序设计9
3.2.1系统软件设计流程图10
3.2.2主程序10
3.2.3定时器中断子程序11
3.2.4LED显示子程序12
3.2.5按键控制子程序12
第4章结论14
参考文献15
附录1软件清单16
第1章绪论
1.1研究背景
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
下面是单片机的主要发展趋势。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字钟已成为人们日常生活中:
必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
1.1选题的目的和意义
单片机课程设计是单片机课程后续学习阶段的一个重要的实践学习环节,它既能增强学生对所学课程内容的理解和综合,也能培养学生的综合应用及设计能力,同时,还可以拓宽课程内容和培养创新意识。
数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
1.2本课程设计的主要内容
本设计电子时钟主要功能为:
自动计时功能。
能显示计时时间,显示效果良好。
校时功能,能对时间进行校准。
第2章单片机电子时钟设计方案设计
2.1设计方案
单片机电子时钟方案选择主要涉及两个方面:
计时方案和显示方案。
2.1.1计时方案
单片机电子时钟计时有两种方法:
第一种是通过单片机内部的定时器/计数器,采用软件编程来实现时钟计时,这种实现的时钟一般称为软时钟,这种方法的硬件线路简单,系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合;第二种是采用专用的硬件时钟芯片计时,这种实现的时钟一般称为硬时钟。
专用的时钟芯片功能比较强大,除了自动实现基本计时外,一般还具有计时准确,软件编程简单,但硬件成本相对较高,通常用在对时钟精度要求较高的场合。
2.2.2显示方案
对于电子时钟而言,显示是另一个重要的环节。
显示通常采用两种方式:
LED数码管显示和LCD液晶显示。
其中LED数码管显示亮度高,显示内容清晢,根据具体的连接方式可分为静态显示和动态显示,在多个数码管时一般采用动态显示,动态显示时须要占用CPU的大量时间来执行动态显示程序,显示效果往往和显示程序的执行相关。
LCD液晶显示一般能显示的信息多,显示效果好,而且液晶显示器一般都带控制器,显示过程由自带的控制器控制,不须要CPU参与,但液晶显示器造价相对较高。
为了便于比较与学习,这里给出两种设计方案,一种是软件计时LED数码管显示的单片机电子时钟,另一种是硬件定时LCD液晶显示的单片机电子时钟。
软件计时LED数码管显示的单片机电子时钟总体设计框图如图2-1所示。
硬件定时LCD液晶显示的单片机电子时钟总体设计框图如图2-2所示。
图2-1软件计时LED显示时钟总体框图
图2-2硬件定时LCD显示时钟总体框图
2.2.3键盘的基本原理
键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合,按下后可向计算机产生一脉冲波。
按键开关的结构和产生的波形如图2-3所示。
(a)键盘开关的结构(b)键盘产生的波形
图2-3键盘开关及波形示意图
当按键开关未按下时,开关处于断开状态,向P1.1输入高电平;当按键开关按下时,开关处于闭合状态,向P1.1输入低电平。
因此可通过读入P1.1的高低电平状态来判断按键开关是否按下。
(1)抖动的消除
在单片机应用系统中,通常按键开关为机械式开关,由于机械触点的弹性作用,一个按键开关在闭合时往往不会马上稳定地接通,断开时也不会马上断开,因而在闭合和断开的瞬间都会伴随着一串的抖动,如波形如图2-4所示。
按下键位时产生的抖动称为前沿抖动,松开键位时产生的抖动称为后沿抖动。
如果对抖动不作处理,会出现按一次键而输入多次,为确保按一次键只确认一次,必须消除按键抖动。
消除按键抖动通常有硬件消抖和软件消抖两种方法。
图2-4抖动波形示意图
硬件消抖是通过在按键输出电路上添加一定的硬件线路来消除抖动,一般采用R-S触发器或单稳态电路,图2-5是由两个与非门组成的R-S触发器消抖电路。
平时,没有按键时,开关倒向下方,上面的与非门输入高电平,下面的与非门输入低电平,输出端输出高电平。
当按下按键时,开关倒向上方,上面的与非门输入低电平,下面的与非门输入高电平,由于R-S触发器的反馈作用,使输出端迅速的变为低电平,而不会产生抖动波形,而当按键松开时,开头回到下方时也一样,输出端迅速的回到高电平而不会产生抖动波形。
经过图中的R-S触发器消抖后,输出端的信号就变为标准的矩形波。
图2-5硬件消抖电路
软件消抖是利用延时程序消除抖动。
由于抖动时间都比较短,因此可以这样处理:
当检测到有键按下时,执行一段延时程序跳过抖动,再去检测,通过两次检测来识别一次按键,这样就可以消除前沿抖动的影响。
对于后沿抖动,由于在接收一个键位后,一般都要经过一定时间再去检测有无按键,这样就自然跳过后沿抖动时间而消除后沿抖动了。
当然在第二次检测时有可能发现又没有键按下,这是怎么回事呢?
这种情况一般是线路受到外部电路干扰使输入端产生干扰脉冲,这时就认为没有键输入。
在单片机应用系统中,一般都采用软件消抖。
(2)键盘的分类
一般来说,单片机应用系统的键盘可分为两类:
独立式键盘和行列键盘。
独立式键盘就是各按键相互独立,每个按键各接一根I/O接口线,每根I/O接口线上的按键都不会影响其他的I/O接口线。
因此,通过检测各I/O接口线的电平状态就可以很容易地判断出哪个按键被按下了。
独立式键盘如图2-6所示。
独立式键盘的电路配置灵活,软件简单。
但每个按键要占用一根I/O接口线,在按键数量较多时,I/O接口线浪费很大。
故在按键数量不多时,经常采用这种形式。
图2-6独立式键盘结构图
行列键盘往往又叫矩阵键盘。
用两组I/O接口线排列成行、列结构,一组设定为输入,一组设定为输出,键位设置在行、列线的交点上,按键的一端接行线,一端接列线。
例如,图2-7是由4根行线和4根列线组成的44矩阵键盘,行线为输入,列线为输出,可管理44=16个键。
矩阵键盘占用的I/O接口线数目少,如图2-7中44矩阵键盘总共只用了8根I/O接口线,比独立式键盘少了一半的I/O接口线,而且键位越多,情况越明显。
因此,在按键数量较多时,往往采用矩阵式键盘。
矩阵键盘的处理一般注意两个方面:
键位的编码和键位的识别。
(a)二进制组合编码(b)顺序排列编码
图2-7矩阵键盘的结构图
键位的编码矩阵键盘的编码通常有两种:
二进制组合编码和顺序排列编码。
(1)二进制组合编码如图2-7(a)每一根行线有一个编码,每一根列线也有一个编码,图2-7(a)中行线的编码从下到上分别为1、2、4、8,列线的编码从右到左分别为1、2、4、8,每个键位的编码直接用该键位的行线编码和列线编码组合一起得到。
图2-7(a)中44键盘从右到左,从下到上的键位编码分别是:
11H、12H、14H、18H、21H、22H、24H、28H、41H、42H、44H、48H、81H、82H、84H、88H。
这种编码过程简单,但得到的编码复杂,不连续,处理起来不方便。
(2)顺序排列编码如图2-7(b),每一行有一个行首码,每一列有一个列号,图2-7(b)中4行的行首码从下到上分别为0、4、8、12,4列的列号从右到左分别是0、1、2、3。
每个键位的编码用行首码加列号得到,即:
编码=行首码+列号。
这种编码虽然编码过程复杂,但得到的编码简单,连续,处理起来方便,现在矩阵键盘一般都采用顺序编码的方法。
(3)键位的识别
矩阵式键盘键位的识别可分为两步:
第一步是首先检测键盘上是否有键按下;第二步是识别哪一个键按下。
检测键盘上是否有键按下的处理方法是:
将列线送入全扫描字,读入行线的状态来判别。
其具体过程如下:
P2口低四位输出都为低电平,然后读连接行线的P1口低四位,如果读入的内容都是高电平,说明没有键按下,则不用做下一步;如果读入的内容不全为1,则说明有键按下,再做第二步,识别是哪一个键按下。
识别键盘中哪一个键按下的处理方法是:
将列线逐列置成低电平,检查行输入状态,称为逐列扫描。
其具体过程如下:
从P2.0开始,依次输出“0”,置对应的列线为低电平,其它列为高电平,然后从P1低四位读入行线状态。
在扫描某列时,如果读入的行线全为“1”,则说明按下的键不在此列;如果读入的行线不全为“1”,则按下的键必在此列,而且是该列与“0”电平行线相交的交点上的那个键。
为求取编码,在逐列扫描时,可用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的行首码加列号得到当前按键的编码。
(4)独立式键盘与单片机的接口
独立式键盘每一个键用一根I/O接口线管理,电路简单,通常用于键位较少的情况下。
对某个键位的识别通过检测对应I/O线的高低电平来判断,根据判断结果直接进行相应的处理。
在MCS-51单片机系统中,独立式键盘可直接用P0~P3四个并口中的I/O线来连接,连接时,如果用的是P1~P3口,因为内部带上拉电阻,则外部可省力上拉电阻,如果用的是P0口,则须外部带上接电阻。
图2-8是通过P1口低4位直接接4个独立式按键的电路图。
直接判断P1口低4位是否为低电平即可判断相应键是否按下。
图2-8P1口接4个独立式按键图
2.3.4LED显示器的基本结构与原理
LED数码管显示器是由发光二极管按一定的结构组合起来的显示器件。
在单片机应用系统中通常使用的是7段或8段式LED数码管显示器,8段式比7段式多一个小数点。
这里以8段式来介绍,单个8段式LED数码管显示器的外观与引脚如图2-9(a)所示,其中a,b,c,d,e,f,g和小数点dp为8段发光二极管,位置如图中所示,组成一个“
”形状。
(a)引脚图(b)共阴极(c)共阳极
图2-98段式LED数码管引脚与结构
8段发光二极管的连接有两种结构:
共阴极和共阳极。
如图2-9所示。
其中,图(b)为共阴极结构,8段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,要使哪根发光二极管亮,则对应的阳极端接高电平;图(b)为共阳极结构,8段发光二极管的阳极端连接在一起,阴极端分开控制,使用时公共端接电源,要使哪根发光二极管亮,则对应的阴极端接地。
LED数码管显示器显示时,公共端首先要保证有效,即共阴极结构公共端接低电平,共阳极结构公共端接高电平,这个过程我们称为选通数码管。
再在另外一端送要显示数字的编码,这个编码称为字段码,8位数码管字段码为8位,从高位到低位的顺序依次为dp、g、f、e、d、c、b、a。
如:
共阴极数码管数字“0”的字段码为00111111B(3FH),共阳极数码管数字“1”的字段码为11111001B(F9H),不同数字或字符其字段码不一样,对于同一个数字或字符,共阴极结构和共阳极结构的字段码也不一样,共阴极和共阳极的字段码互为反码,常见的数字和字符的共阴极和共阳极的字段码如表5.2所示。
表5.2常见的数字和字符的共阴极和共阳极的字段码
显示字符
共阴极字段码
共阳极字段码
显示字符
共阴极字段码
共阳极字段码
0
3FH
C0H
C
39H
C6H
1
06H
F9H
D
5EH
A1H
2
5BH
A4H
E
79H
86H
3
4FH
B0H
F
71H
8EH
4
66H
99H
P
73H
8CH
5
6DH
92H
U
3EH
C1H
6
7DH
82H
T
31H
CEH
7
07H
F8H
Y
6EH
91H
8
7FH
80H
L
38H
C7H
9
6FH
90H
8.
FFH
00H
A
77H
88H
“灭”
00
FFH
B
7CH
83H
……
……
……
第3章硬件设计
3.1硬件电路
软件计时LED数码管显示的时钟的具体硬件电路如图2-10所示,其中单片机采用应用广泛的AT89C51,系统时钟采用12MHz的晶振,8个数码管显示,小时与分钟、分钟与秒钟之间用短横线间隔,采用共阳极七段式数码管,由于并口上没有连接其它的硬件电路,所以P0口直接作段选码输出端,P2口作位选码输出端。
采用简化按键方式,只设定3个开关K0、K1和K2,通过P1口低3位相连。
其中K0键为调时模式选择键,K1为加1键,K2为减1健。
图2-10软件计时LED显示时钟硬件电路图
3.2数字钟的程序设计
系统的软件设计也是工具系统功能的设计。
单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。
单片机的软件设计通常要考虑以下几个方面的问题:
(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。
既便于调试、链接,又便于移植和修改;
(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;
(4)绘制程序流程图;
(5)合理分配系统资源;
(6)为程序加入注释,提高可读性,实施软件工程;
(7)注意软件的抗干扰设计,提高系统的可靠性。
3.2.1系统软件设计流程图
这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。
主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。
图3-1软件流程图
3.2.2主程序
时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。
定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。
图3-2主程序流程图
3.2.3定时器中断子程序
定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到时单元就加1,如果没到,就显示时间。
3.2.4LED显示子程序
时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。
图3-3LED显示子程序
3.2.5按键控制子程序
按键处理设置为:
如没有按键,则时钟正常走时。
当按K0键一次,时钟暂停走动进入调小时状态,再按K0键一次,进入调分状态,再按K0键一次,回到正常走时;对于K1和K2按键,如果是正常走时,按K1和K2不起作用,如果进入调时或调分状态,按K1可对时或分进行加1操作,小时加到24则回到0,分加到60则回到0;按K2可对时或分进行减1操作,小时减到负则回到23,分减到负则回到59。
按键处理模块流程如图3-4所示。
图3-4按键流程图
第4章结论
我在这一次数字电子钟的设计过程中,很是受益匪浅。
通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。
这为自己今后进一步深化学习,积累了一定宝贵的经验。
撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。
培养了我运用所学知识解决实际问题的能力。
通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。
这个实验十分有意义我获得很深刻的经验。
通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。
学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。
这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。
对于本次课程设计遇到的问题,主要方面有两点。
第一点,流程图的应用问题;选题结束后,就急于开始编程,由于用的是汇编语言,所以中间遇到了很多的问题,以至于程序有点混乱,感觉忙手忙脚的,但又抓不到主要的点。
中间又有许多问题不理解,只好向老师请教。
老师指点后,学会了用画流程图编程,这样条理很清楚,不容易出错。
经过3天努力终于调好了程序。
第二点,是仿真图的搭建细节问题,之前虽然理解设计的原理,但是按自己想的画好仿真图后,一直显示有错误,在网上找了好多资料后才发现是因为细节的错误,之后经过耐心的修改,终于成功。
参考文献
[1]谢维成.杨加国.单片机原理与应用及C51程序设计.北京.清华大学出版社;第二版
[2]沙占友,孟志永.单片机外围电路设计.北京:
电子工业出版社,2006.6
附录1软件清单
ORG0000H
LJMPSTART
ORG000BH
LJMPINIT0
START:
MOVR0,#70H;主程序开始
MOVR7,#0CH
INIT:
MOV@R0,#00H
INCR0
DJNZR7,INIT
MOV72H,#10;对连字符进行装值
MOV75H,#10
MOVTMOD,#01H;选择定时器/计数器T0的方式1
MOVTL0,#0B0H;对低位赋初值
MOVTH0,#03CH;高位赋初值
SETBEA
SETBET0
SETBTR0
START1:
LCALLSCAN
LCALLKEYSCAN
SJMPSTART1
DL1MS:
MOVR6,#14H;延时1子程序
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
DL20MS:
ACALLSCAN;延时20ms子程序
ACALLSCAN
ACALLSCAN
RET;数码管显示程序开始
SCAN:
MOVA,78H
MOVB,#0AH
DIVAB;时间秒的十位送给A,时间秒的个位送B
MOV71H,A;时间秒要显示的十位
MOV70H,B;时间秒要显示的个位
MOVA,79H
MOVB,#0AH
DIVAB;时间分的十位送给A,时间分的个位送B
MOV74H,A;时间分要显示的十位送地址
MOV73H,B;时间分要显示的个位送地址
MOVA,7AH
MOVB,#0AH
DIVAB;时间时的十位送给A,时间时的个位送B
MOV77H,A;时间时显示的十位送地址
MOV76H,B;时间时要显示的个位送地址
MOVR1,#70H
MOVR5,#01H
MOVR3,#09H
SCAN1:
MOVA,R5;数码管的显示程序
MOVP2,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR;对字段表取值显示
MOVP0,A
MOVA,R5
LCALLDL1MS
INCR1
MOVA,R5
RLA
MOVR5,A
DJNZR3,SCAN1
MOVP2,#0FFH
MOVP0,#0FFH
RET;"0~9"和"-"的字段表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;定时/计数器T0中断程序
INIT0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVTL0,#0B0H
MOVTH0,#03CH
SETBTR0
INC7BH
MOVA,7BH
CJNEA,#14H,OUTT0;50ms是否到20次,没有到就继
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课程设计报告 电子钟 单片机 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)