完整版单片机数字时钟毕业课程设计Word文档下载推荐.docx
《完整版单片机数字时钟毕业课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整版单片机数字时钟毕业课程设计Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
关键词:
单片机AT89C51共阴极LED数码显示器74LS245译码器
目录
摘要-2-
目录-3-
第一章数电字子钟的背景、意义、应用-4-
第二章单片机和数字钟的基本知识-4-
2.1应用知识简介-4-
2.2单片机数字钟的基本原理-5-
第三章系统硬件电路的设计-5-
3.1单片机的基本结构-5-
3.274LS245引脚图及功能:
-7-
3.3七段数码管的引脚图及使用:
-9-
3.4硬件电路的设计原则-9-
第四章软件程序的设计-11-
4.2软件流程图-11-
4.2.1系统软件设计流程图-11-
4.3定时程序设计-14-
4.3.1实时时钟实现的基本方法:
-14-
4.3.2实时时钟程序设计步骤:
结束语-21-
参考文献-22-
第一章数电字子钟的背景、意义、应用
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
下面是单片机的主要发展趋势。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
数字钟已成为人们日常生活中:
必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时自动报时及自动控制的领域。
第二章单片机和数字钟的基本知识
2.1应用知识简介
51单片机:
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。
51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。
在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。
汇编语言:
汇编语言是一种面向机器的计算机低级编程语言,通常是为特定的计算机或系列计算机专门设计的。
汇编语言保持了机器语言的优点,具有直接和简捷的特点,其代码具有效率高实时性强等优点。
但是对于复杂的运算或大型程序,用汇编语言编写将非常耗时。
汇编语言可以与高级语言配合使用,应用十分广泛。
ISP
ISP(In-SystemProgramming)在系统可编程,是当今流行的单片机编程模式,指电路板上的空白元器件可以编程写入最终用户代码,而不需要从电路板上取下元器件。
已经编程的器件也可以用ISP方式擦除或再编程。
本次课程设计便使用ISP方式,直接将编写好的程序下载到连接好的单片机中进行调试。
2.2单片机数字钟的基本原理
它是利用单片机的内部的定时计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“秒”计数60次“分”,“分”计数60次形成“时”,“时”计数24次满一天清零,然后通过译码器,数码管把他们的内容在相应的位置显示出来。
在具体的设计时定时器采用中断方式工作,对时钟的形成在终中断序中实现,在主程序只是对定时计数器的定义初始化,调用显示程序和控制程序的初始化。
另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序。
第三章系统硬件电路的设计
3.1单片机的基本结构
MCS-51单片机内部结构:
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
图3-1单片机8051的内部结构
程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时计数器(ROM):
8051有两个16位的可编程定时计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(IO)口:
8051共有4组8位IO口(P0、P1、P2或P3),用于对外部数据的传输。
MCS-51的引脚说明:
MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个IO口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
图3-2单片机的引脚
Pin9:
RESETVpd复位信号复用脚,当8052通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8052的初始态。
总线驱动器74LS245经常用作三态数据缓冲器,74LS245为双向三态数据缓冲器。
单向的内部有8个三态驱动器,分成两组,分别由控制端
1G
和2G
控制;
双向的有16个三态驱动器,每个方向8个。
在控制端
G
有效时(
G
为低电平),由DIR端控制驱动方向:
DIR为“1”时方向从左到右(输出允许),DIR为“0”时方向从右到左(输入允许)。
74LS245的引脚图。
G=0,DIR=0,B->
A;
G=0,DIR=1,A->
B;
G=1,DIR=X,X=0或者1,输入和输出均为高阻态;
高阻态的含意就是相当于没有这个芯片
74LS245是8路3态双向缓冲驱动,也叫做总线驱动门电路或线驱动。
主要使用在数据的双向缓冲,原来常见于51的数据接口电路,比如,早期电路中,扩展了很多的等芯片的时候,担心8031的数据驱动能力不足,就使用一片74LS245作为数据缓冲电路,增强驱动能力;
也常见与ISA卡的接口电路.
数码管使用条件:
a、段及小数点上加限流电阻。
b、使用电压:
段:
根据发光颜色决定;
小数点:
根据发光颜色决定。
c、使用电流:
静态:
总电流80mA(每段10mA);
动态:
平均电流4-5mA峰值电流100mA
上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。
LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"
b"
和"
c"
段接上正电源,其它端接地或悬空,那么"
段发光,此时,数码管显示将显示数字“1”。
而将"
a"
、"
d"
e"
g"
段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
其它字符的显示原理类同。
3.4硬件电路的设计原则
在性价比满足应用系统要求的情况下,选择更可靠,更熟悉的单片机缩短研制周期。
尽可能选择自己较为熟悉的应用电路,以提高系统的可靠性。
单片机内部的资源与外部的扩展资源应在满足系统设计的基础上留有余地,为进一步的升级和扩展提供方便。
应充分的结合软件方案考虑硬件的结构,通常硬件功能较完善,其相应的软件程序就简单,但硬件的成本较高,而功能较低,其相应的软件就复杂,其实际常用软件代替硬件来降低成本。
整个系统相关的器件尽可能的做到性能相匹配。
充分的考虑系统的抗干扰性,如具有抗干扰的单片机并充分的帅选芯片与器件,在电路中采取隔离或屏蔽的措施等。
更具以上的原则我们选择我们较为熟悉的80c51单片机;
为了LED数码管的显示和和键盘的控制,我们也选择了74LS245的译码器和#1,#2,#3号按键作为时钟的参数修改加一键
#1键修改时,按一下时加一
#2键修改分,按一下分加一
#3键修改秒,按一下秒加一
时钟硬件连接图如下图所示
第四章软件程序的设计
4.1软件程序内容
本设计的软件程序包括主程序、中断子程序、打铃子程序、时钟显示子程序、查询时间表切换程序和延时子程序等等。
另外由于电路中有四个按键,还另外设计了防抖动程序来防止干扰。
4.2软件流程图
4.2.1系统软件设计流程图
这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。
主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。
图4-1主程序流程图
按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;
如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;
如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;
如果没有按下,就把时间显示出来。
图4-2按键处理流程图
定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;
如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;
如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。
图4-3定时器中断流程图
时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。
4.3定时程序设计
单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。
如果MCS-52采用的12MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。
这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。
MCS-51单片机的定时器计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器计数器两种工作模式和4种工作方式。
定时器计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。
TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX.
当定时器计数器工作于方式1,为16位的计数器。
本设计师单片机多功能定时器,所以MCS-51内部的定时器计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。
时钟的最小计时单位是秒,但使用定时器的方式1,最大的定时时间也只能达到131ms。
我们可把定时器的定时时间定为50ms。
这样,计数溢出20次即可得到时钟的最小计时单位:
秒。
而计数20次可以用软件实现。
秒计时是采用中断方式进行溢出次数的累积,计满20次,即得到秒计时。
从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。
要求每满1秒,则“秒”单元中的内容加1;
“秒”单元满60,则“分”单元中的内容加1;
“分”单元满60,则“时”单元中的内容加1;
“时”单元满24,则将时、分、秒的内容全部清零。
:
(1)选择工作方式,计算初值;
(2)采用中断方式进行溢出次数累计;
(3)从秒——分——时的计时是通过累加和数值比较实现的;
(4)时钟显示缓冲区:
时钟时间在方位数码管上进行显示,为此在内部
RAM中要设置显示缓冲区,共6个地址单元。
显示缓冲区从左到右依次存放时、分、秒数值;
(5)主程序:
主要进行定时器计数器的初始化编程,然后反复调用显示
子程序的方法等待中断的到来。
(6)中断服务程序:
进行计时操作
(7)加1子程序:
用于完成对时、分、秒的加操作,中断服务程序在秒、
分、时加1时共有三种条调用加1子程序,包括三项内容:
合字、加1并进行十进制调整、分字。
源程序如下:
S_SETBITP1.0;
数字钟秒控制位
M_SETBITP1.1;
分钟控制位
H_SETBITP1.2;
小时控制位
SECONDEQU30H
MINUTEEQU31H
HOUREQU32H
TCNTEQU34H
ORG00H
SJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVDPTR,#TABLE
MOVHOUR,#0;
初始化
MOVMINUTE,#0
MOVSECOND,#0
MOVTCNT,#0
MOVTMOD,#01H
MOVTH0,#()256;
定时50毫秒
MOVTL0,#()MOD256
MOVIE,#82H
SETBTR0
;
****************************************************
判断是否有控制键按下,是哪一个键按下
A1:
LCALLDISPLAY
JNBS_SET,S1
JNBM_SET,S2
JNBH_SET,S3
LJMPA1
S1:
LCALLDELAY;
去抖动
JBS_SET,A1
INCSECOND;
秒值加1
MOVA,SECOND
CJNEA,#60,J0;
判断是否加到60秒
LJMPK1
S2:
LCALLDELAY
JBM_SET,A1
K1:
INCMINUTE;
分钟值加1
MOVA,MINUTE
CJNEA,#60,J1;
判断是否加到60分
LJMPK2
S3:
JBH_SET,A1
K2:
INCHOUR;
小时值加1
MOVA,HOUR
CJNEA,#24,J2;
判断是否加到24小时
MOVHOUR,#0
等待按键抬起
J0:
LCALLDISPLAY
SJMPJ0
J1:
SJMPJ1
J2:
SJMPJ2
***********************************************
定时器中断服务程序,对秒,分钟和小时的计数
INT_T0:
MOVTH0,#()256
MOVTL0,#()MOD256
INCTCNT
MOVA,TCNT
CJNEA,#20,RETUNE;
计时1秒
INCSECOND
CJNEA,#60,RETUNE
INCMINUTE
INCHOUR
CJNEA,#24,RETUNE
RETUNE:
RETI
******************************************
显示控制子程序
DISPLAY:
MOVA,SECOND;
显示秒
MOVB,#10
DIVAB
CLRP3.6
MOVC+DPTR
MOVP0,A
LCALLDELAY
SETBP3.6
MOVA,B
CLRP3.7
SETBP3.7
CLRP3.5
MOVP0,#40H;
显示分隔符
SETBP3.5
MOVA,MINUTE;
显示分钟
CLRP3.3
SETBP3.3
CLRP3.4
SETBP3.4
CLRP3.2
SETBP3.2
MOVA,HOUR;
显示小时
CLRP3.0
SETBP3.0
CLRP3.1
SETBP3.1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
DELAY:
MOVR6,#10
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
END
调试结果如下图所示:
结束语
做了一周的数字钟课程设计,让我感受颇深,有关于单片机知识的,但更多是团队和合作。
我们小组一共5个人,人多,分工就显得很重要,在我们的集体的讨论之下,我得到了设计硬件电路和总体调试的任务,当时让我感到很有压力。
因为我们平时接触的都是纯粹理论的东西,做实验也是雾里看花,对硬件的认识是很缺乏的。
一回来我就去图书馆查阅的大量的单片机和数字芯片的资料,由于资料比较分散,所以整理有用的资料
就显得很重要,有些东西实在是不懂我就把资料带回来请教同学,让我受益匪浅。
然后在硬件电路的设计中,由于要涉及软件设计的具体情况,又和组员共同讨论,最终确