基于单片机的实时时钟改Word格式文档下载.docx
《基于单片机的实时时钟改Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的实时时钟改Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
工作的忙碌性和繁杂性容易使人们忘记当前的时间。
但随着时间的推移,科学技术的不段发展,人们对时间的计量的精度要求也越来越高,应用越来越广。
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有利地推动了社会生产力的发展,也是现代电子产品性能进一步提高。
钟表的数字化给人们生产生活带来了极大的方便,而且也大大扩展了钟表原先的报时功能,诸如定时自动报警,按时自动打铃,定时起停电路甚至各种定时电气的自动启用等,都是以钟表的数字化为基础的。
因此研究数字钟及扩大其应用,有着非常现实的意义。
现今,高精度的计时工具大多采用石英晶体振荡器,它走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟使用集成电路计时,译码代替机械传动,LED显示器代替指针显示,减小了计时误差。
本设计基于单片机的技术原理,以单片机89C51作为核心控制器,通过硬件电路的制作及软件程序的编程,设计出一个多功能数字时钟系统。
由于系统所用元器件较少,单片机所被占用的I/O口不多,所以系统具有一定的可扩展性。
系统界面清晰简单,稳定性高。
功耗小,成本低,具有很强的实用性。
关键词:
AT89C51单片机,多功能钟,键盘输入,动态显示,LED
第1章前言
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习、应用,以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,通过数码管能够准确显示。
数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。
本系统是基于AT80C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整。
该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。
利用AT89C51单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。
第2章总体方案的确定
2.1.1电路组成及工作原理
本文数字时钟设计原理主要利用AT89C51单片机,由单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与按键相接用于时间的校正。
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。
2.1.2设计原理及其框图
一.数字钟的构成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。
通常使用石英晶体振荡器电路构成数字钟。
图2-1所示为数字钟的一般构成框图。
图2-1数字钟的组成框图
⑴晶体振荡器电路
晶体振荡器电路给数字钟提供一个频率稳定准确的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
⑵分频器电路
分频器电路将高频方波信号经分频后得到的方波信号供秒计数器进行计数。
分频器实际上也就是计数器。
⑶时间计数器电路
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
⑷译码驱动电路
译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。
⑸数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管。
2.2硬件部分
2.2.1单片机系统
2.2.1.1单片机的选择
单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。
这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
本文采用的单片机为AT89C51,它是一种低功耗、高性能的片内含有4K字节可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
它的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案.
2.2.1.2AT89C51的主要性能参数
与MCS-51产品指令系统完全兼容
4k字节可重擦写FLASH闪速存储器
1000次擦写周期
全静态操作:
0Hz—24MHz
三级加密程序存储器
128×
8字节内部RAM
32个可编程I/O口线
2个16位定时/计数器
5个中断源
可编程串行URAR通道
低功耗空闲和掉电模式
AT80C51提供以下标准功能:
4k字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。
空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。
2.2.2显示部分
单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED(LightEmittingDiode);
液晶显示器LCD(LiquidCrystalDisplay);
近几年也有配置CRT显示器的。
而目前在单片机系统中,通常用LED数码显示器来显示各种数字或符号。
由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
2.2.2.1LED显示结构与原理
单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位!
这种显示器有共阴和共阳两种!
发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。
一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段)
a_g,另一个小数点为dp发光二极管。
当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;
不加电压则暗。
为了保护各段LED不被损坏,需外加限流电阻。
由于共阴极连接需加驱动,故在这里我采用的是共阳阳极连接。
共阴极7段LED显示数字0~F、文字、符号及小数点的编码(a段为最地位,dp点为最高位)如(图2-1)所示。
共阴极7段LED显示字型编码表
显示字符共阴极段选码显示字符共阴极段选码
03FH56DH
106H67DH
25BH707H
34FH87FH
466H96FH
“灭”(黑)00H
LED显示器有静态显示方式和动态显示方式两种。
静态显示就是当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。
LED显示器工作于静态显示方式时,各位的共阴极接地;
若为共阳极则接+5V电源。
每位的段选线分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。
正因为如此,静态显示器的亮度较高。
这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。
因此,在显示位数较多的情况下,一般都采用动态显示方式。
由于所有6位段皆由一个I/O口控制,因此,在每一瞬间,6位LED会显示相同的字符。
要想每位显示不同的字符,就必须采用扫描方法流点亮各位LED,即在每一瞬间只使某一位显示字符。
在此瞬间,段选控制I/O口输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。
如此轮流,使每位分时显示该位应显示字符。
在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。
而共阴(共阳)极公共端分别由相应的I/O口线控制,实现各位的分时选通。
段选码,位选码每送入一次后延时2MS,因人的视觉暂留时间为0.1S(100MS),所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。
这种方式称为软件扫描方式。
2.2.3键盘工作模块
按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;
另一类是无触点式开关按键,如电气式按键,磁感应按键等。
前者造价低,后者寿命长。
目前,微机系统中最常见的是触点式开关按键。
按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。
编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。
全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路。
这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。
非编码键盘只简单地提供行和列的矩阵,其它工作均由软件完成。
由于其经济实用,较多地应用于单片机系统中。
在本套设计中由于只需要几个功能键,此时,可采用独立式按键结构
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不建议采用。
2.2.3.2独立式按键的软件结构
独立式按键的软件常采用查询式结构。
先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。
2.2.7相关参数计算
关于驱动电路中的限流电阻R,通常根据LED的工作电流计算而得到的。
例如:
(1.)R1=(VCC-V0)/I0其中VCC=+5V,V0的压降为+1.4v,I0的工作电流为10mA所以R1=(5V-1.4V)/10mA=360Ω,要想得到10mA的工作电流必须使限流电阻大于360Ω,故在电路中我选用了390Ω的电阻
(2)对于连接位选显信号的电阻选用上,由Ic<
100Ib,I0=10mA,得Ib>
0.1mA,根据R2=(VCC-Vbc)/Ib=(5v-0.7v)/0.1mA=4.3kΩ,若要Ib>
0.1mA则必须使R2>
4.3kΩ,因此选用了比较接近的4.7kΩ
第3章软件设计
监于C语言的复杂性,这里选择了汇编语言
3.2程序语言的编写(附录)
介绍一些基本术语
系统寄存器:
A:
累加器
B:
乘除运算/暂存
C:
进位标志/位累加器
DPTR:
16位数据指针,访问ROM/XRAM
PC:
程序计数器
PSW:
程序状态字
R0:
8位数据指针,访问IRAM
R1:
IRAM堆指针,可用来分配IRAM局部数组
R2,R3:
XRAM堆指针,可用来分配XRAM局部数组
SP:
栈指针
A、B、C、DPTR、R0、PSW等是自动的,除了ISR外,不必入栈保护
寄存器变量和寄存器参数:
在子程序调用过程中可以使用R4~R7这4个寄存器作为变量或参数
寄存器变量按照R4-->
R7的顺序分配
寄存器参数按照R7-->
R4的顺序分配
如果变量或参数超过4个时,则超出的从10H~1FH分配
子程序返回值:
返回bit型,保存在C中
返回byte型,保存在R7中
返回word型,保存在(R6,R7)中
IRAM内存分配:
00~07:
工作寄存器
08~0F:
块中断专用
10~1F:
存储器变量和函数参数
20~2F:
bit、bdata
30~FF:
全局变量、栈、堆
第4章系统调试
4.1硬件调试:
主要检查了电路板有无虚焊、短路、连线是否正常,尤其是单片机的各使能端的接线,I/O接口连线是否有误。
由于我们采用了六个数码管并联接入P2口的段选端,因此接线较多,经常容易出现管脚间短路现象。
这是硬件设计不足之处,今后将注意元件的选配使设计更简洁实用。
4.2软件调试:
在LCA51仿真机上,对定时中断程序、显示子程序、按键中断子程序进行了分段调试,结果功能正常。
4.3时钟计时检测:
通过与其它计时器对比观察发现数字时钟走时过快,检查定时中断程序发现T0的初始值设定有误,因此重新设置:
根据T0选择工作模式1,定时时间为50ms,focs=12MHz,
由T=(2^16-T0初始值)×
振荡周期×
12
设T0的初始值为X,
则:
(2^16-X)×
1/12×
10^6s×
12=50ms
X=15625,
转化二进制值为:
X=0011110010111010,即TH=#3CH,TL=#0BAH
第5章致谢
经过了两个多月的学习和工作,我终于完成了单片机时钟课程设计。
从开始接到论文要求到时钟的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在学校期间独立完成的最大的项目。
在这段时间里,我学到了很多知识也有很多感受,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
在这次课程设计的调试过程中,我遇到很多问题,如:
由于跳转指令出错,导致整个程序在运行时进入死循环,修改时没有根据流程盲目查找原因浪费许多时间,又由于考虑不周,时钟显示29:
89。
该电路缺少整点报时及闹钟功能,由于能力和时间问题只能到此为止,很是遗憾,但在查找资料的过程中学到了许多,同时在协作过程中增进同学间的友谊。
这次对AT89C51有了一个全面的认识,在此基础上结合以前所学的专业知识,从而把我所学的知识贯穿到一起,对电子专业有了一个更全面的认识!
总之这次毕业设计让我把理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的全面素质。
这些在我今后的学习和工作当中都会有很大的帮助。
最后,我要感谢我的指导老师,在这次毕业设计中给了我许多的帮助。
同时也祝愿山东技师学院明天更美好!
第6章参考文献
[1]实用单片机电子钟的设计/丁辉、姚庆文无线电2003年合订本(下)
[2]于海生.微型计算机控制技术[M].清华大学出版社.1999-6
[3]孙涵芳.MCS-51系列单片机原理及应用[M].北京航空航天大学出版社.1996-4
[4]黄正谨.综合电子设计与实践[M].东南大学出版社.2002-3
[5]杨欣等.电子设计从零开始[M].清华大学出版社.2005-10
[6]谢嘉奎.电子线路[M].高等教育出版社.2003-2
[7]夏路易,石宗义.电路原理图与电路设计教程Protel99SE[M].北京希望电子出版社.2002
附录
(一)
DEFRAM
HOUREQU20H;
存放时信息的单元
MINEQU21H;
存放分信息的单元
SECEQU22H;
存放秒信息的单元
SEC01EQU23H;
秒信号产生其单元
KEYFLEQU24H;
KEYREGEQU25H
TMINTFLEQU26H
SETFLEQU27H
DSPDAT1EQU28H
DSPDAT2EQU29H
DSPDAT3EQU2AH
DSPDAT4EQU2BH
DSPDAT5EQU2CH
DSPDAT6EQU2DH
SHFLEQU2EH
SMFLEQU2FH
SSFLEQU30H
;
MAIN;
ORG0000H;
主程序起始地址
LJMPSTART;
跳至主程序
ORG000BH;
TIMEINT中断入口地址
LJMPTIMEINT;
转移
ORG0100H;
主程序首地址
START:
MOVR7,#250;
LOOP:
NOP
DJNZR7,LOOP;
R7-1≠0转移
MOVIE,#00H;
关中断
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVSETFL,#00H
MOVKEYFL,#00H
MOVKEYREG,#00H
MOVTMINTFL,#00H
MOVSHFL,#00H
MOVSMFL,#00H
MOVSSFL,#00H
MOVTMOD,#01H;
设T0工作于方式1,用于计时
MOVTCON,#00H;
MOVTH0,#3CH;
)设置T0初始值
MOVTL0,#0BAH;
)
MOVIE,#82H;
开启定时器T0
MOVTCON,#10H;
MAIN:
MOVA,SETFL;
JNZMAIN1;
A≠0转移
MOVTMINTFL,#00H;
MOVR0,HOUR;
MOVA,TMINTFL;
JNZMAIN2;
MOVR1,MIN
MOVA,TMINTFL
MOVR2,SEC;
MOVC,P1.7;
电压检测低电平有效,C=P1.7=1计时显示;
C=P1.7=0单片机进入空闲状态
JNCMAIN3;
C=0程序转移
LCALLCODECHA;
调用
MAIN1:
电压检测
C=0转移
LCALLDISP;
MOVA,P1;
读P1口
ANLA,#1FH;
P1.0~P1.2清零
MOVKEYREG,A
CLRC;
累加器清零
SUBBA,#1FH;
相减,A恢复初值
JZMAIN1A;
A=0程序跳转
MOVA,KEYFL;
LCALLKEY;
LJMPMAIN2;
MAIN1A:
相减
MOVKEYFL,#00H;
MAIN2:
NOP;
JCMAIN;
C=1转移
MAIN3:
MOVPCON,#01H;
TIMEINTSUB;
计时单元
TIMEINT:
设置T0初值
开起定时器T0
PUSHPSW;
PUSHACC;
保护现场
INCSEC01;
加1
MOVA,#19;
(是否有用?
SUBBA,SEC01;
JCTIMEINT1;
(C=1转移?
是否该改为JZ,A=0转移?
LJMPTIMEINT4;
跳转
TIMEINT1:
MOVSEC01,#00H;
1秒信号产生器
MOVTMINTFL,#0FFH;
MOVA,SEC;
读秒信号单元
ADDA,#1;
A+1
DAA;
BCD码调整
MOVSEC,A;
存秒信息单元
SUBBA,#60H;
JNCTIMEINT2;
(C=0转移,是否该改为JZ,A=0转移?
LJMPTIMEINT4;
TIMEINT2: