电子数字闹钟课程设计.docx
- 文档编号:25153170
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:48
- 大小:481.84KB
电子数字闹钟课程设计.docx
《电子数字闹钟课程设计.docx》由会员分享,可在线阅读,更多相关《电子数字闹钟课程设计.docx(48页珍藏版)》请在冰豆网上搜索。
电子数字闹钟课程设计
摘要
随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。
为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子数字钟诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
该电子万年历主要采用AT89S51单片机作为主控核心,由DS1302时钟芯片提供时钟、LED动态扫描显示屏显示。
AT89S51单片机是由Atmel公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。
此外,该电子万年历还具有时间校准等功能。
关键词:
时钟电路;LED动态扫描;单片机AT89S51
前言
电子技术和微型计算机的迅速发展促进微型计算机测量和控制技术的迅速发展和广泛应用,单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。
它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。
单片机由硬件系统与软件系统组成。
硬件系统是指构成微机系统的实体与装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
软件系统是微机系统所使用的各种程序的总称,人们通过它对微机进行控制并与微机系统进行信息交换,使微机按照人的意图完成预定的任务。
软件系统与硬件系统共同构成完整的单片微型计算机系统,两者相辅相成,缺一不可。
数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
一、设计目的
1.培养设计能力和解决实际问题的能力,增强自学能力,
2.通过设计完整的单片机系统初步掌握组成系统、编程、调试等能力;
3.通过本电子钟的设计初步了解单片机应用开发研制过程,软件和硬件设计的方法。
二、设计要求及基本功能:
本电子定时闹钟是一种基于单片机技术的多功能、多用途的电子产品,有电子时钟、日期显示、定时闹铃等多种功能,本设计产品性能卓越,功能丰富,采用LED显示更加直观,是一个比较实用的电子产品。
主要功能:
1.可以显示24小时制“时时-分分-秒秒”,LED显示;
2.可以显示日期,具有万年历功能;
3.可以方便的设定定时时间,修改定时时间,整点报时,闹铃功能,预设定时时间到将发出闹铃声,还可停止闹铃;
4.能够修改时钟时间的时分秒,能够修改日期的年月日。
三、数字钟的系统总体方案与说明
设计方案
按照系统设计功能的要求,初步确定系统由主控模块、显示驱动及显示模块和键盘接口模块共3个模块组成,电路系统构成框图如图所示。
主控芯片使用51系列AT89S51单片机,显示驱动采用MAX7219,MAX7219是微处理器和共阴极八段八位LED数码管显示、图条/柱图显示或64点阵显示接口的小型串行输入/输出芯片。
片内包括BCD译码器、多路扫描控制器、字和位驱动器和8×8静态RAM。
外部只需要一个电阻设置所有LED显示器字段电流。
MAX7219和微处理器只需三根导线连接,每位显示数字有一个地址由微处理器写入。
允许使用者选择每位是BCD译码或不译码。
显示模块采用普通的共阴极四位一体八段LED数码管。
四、数字钟的硬件设计
4.1系统结构框图与电路图的设计
接口电路逻辑图
图38255与89S51的连接
图5键盘与数码管
利用8255并行控制开关量
图6拨动开关、按钮与发光二极管的控制
4.2各单元硬件设计说明
本次课程设计的硬件系统主要器件有:
89S51单片机,8255A芯片,8个数码管,按键开关,拨键开关,发光二极管,蜂鸣器,以及其他相关器件。
本系统中,89C51与两片8255A相连,51单片机程序的运行控制8255A的各端口输入输出、电平的高低进行控制以便更有效地对数码管、发光二极管、开关以及其他外部电路器件进行更有效和合理的控制。
4.2.1AT89S51单片机的简介
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
兼容标准MCS-51指令系统的AT89S51单片机是一个低功耗、高性能CHMOS的单片机,片内含4KB在线可编程Flash存储器的单片机。
它与通用80C51系列单片机的指令系统和引脚兼容。
AT89S51单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含128字节的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。
P3口除了通用I/O口功能外,还有替代功能,如表5.3所示
表5.3P3口的替代功能
引脚
符号
说明
P3.0
RXD
串行口输入
P3.1
TXD
串行口输出
P3.2
/INT0
外部中断0
P3.3
/INT1
外部中断1
P3.4
T0
T0定时器的外部的计数输入
P3.5
T1
T1定时器的外部的计数输入
P3.6
/WR
外部数据存储器的写选通
P3.7
/RD
外部数据存储器的读选通
RST:
复位端。
当振荡器工作时,此引脚上出现两个机器周期的高电平将系统复位。
4.2.2LED数码显示器
采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样、清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
综上所述,所以采用了LED数码管作为显示。
4.2.3键盘控制电路
按照键盘与CPU的连接方式可以分为查询按键和矩阵式键盘。
查询式按键及其接口
查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。
查询式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,在按键数量较多时,I/O口线浪费较大,且电路结构显得繁杂。
故这种形式适用于按键数量较少的场合。
本设计除了时间设置时,设数值电路外都采用查询式独立按键。
矩阵式键盘及其接口
矩阵式键盘又称行列式键盘,有n个行线和m个列线,经限流电阻接+5V电源上,按键跨接在行线和列线上,n×m行列结构可构成mn个按键,组成一个键盘。
与独立式按键相比,mn个按键只占用m+n根I/O口线,因此适用于按键较多的场合。
在时间数值设置采用矩阵式键盘。
当无键闭合时,相应的I/O之间开路。
当有键闭合时,与闭合键相连接的两条I/O口线之间短路。
判断有无键按下的方法是:
第一步,置列线相关I/O口为输入态,从行线相对应的I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。
第二步,置行线相关I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。
综合一二两步的结果,可确定按键编号。
但是键闭合一次只能进行一次键功能操作,因此须等待近按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。
按键开关去抖动问题
按键开关在电路中的连接如图所示。
按键未按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。
A点电位就用于向CPU传递按键的开关状态。
但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2-11b所示,键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。
因此必须设法消除抖动的不良后果。
键操作和键抖动
消除抖动的不良后果的方法有硬、软件两种。
为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。
根据抖动特性,在第一次检测到按键按下后,执行一段延时5~10ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。
当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后才转入该键处理程序。
五、数字钟的软件设计
5.1地址空间及端口分配
地址空间
作用
20H
赋值循环次数
30H
存放键盘扫描结果
40H
存放时的十位和个位
41H
存放分的十位和个位
42H
存放秒的十位和个位
43H
存放闹铃的时的十位和个位
44H
存放闹铃的分的十位和个位
45H
存放闹铃的秒的十位和个位
67H-6EH
日期显示缓存区
77H-7EH
时间显示缓存区
端口
用途
P3.2
定义蜂鸣器实现闹钟
PA(8255I)
数码管显示控制
PB(8255I)
数码管选择显示控制
PC(8255I)
4×4矩阵键盘接口
PA(8255II)
8个发光二极管接口
PB(8255II)
8个独立键盘接口
PC(8255II)
8个拨钮接口
5.2软件整体架构分析
5.2.1总体架构说明:
程序总体框图:
总体软件设计说明:
在计时开始时各存储器上的内容会随着程序的运行而改变,所以只要对各存储器上的内容进行调用和显示就可以实现时间显示,闹钟显示以及日期的显示。
由于数码管的显示特点,在进行调用显示之前,须将各存储器的内容进行转化,即数据的高低位分离,高四位和第四位的数值分别存放在不同的显示缓冲区内,进而进行显示调用。
5.2.2主程序功能描述及分析、主程序流程图
主程序启动定时后,检测按键,并进行时间显示,循环检测按键。
第一片8255(连接发光二极管与开关)的端口取为PA口:
FD00H,PB口:
FD01H,PC口:
FD02H,控制口:
FD03H。
控制字应使得PA口输出,PB、PC口输出,为89H。
第二片8255(连接数码管)的端口地址取为FE00H~FE03H,为用PC口控制键盘,控制字取为81H.PA口用于送字段码,PB口用于送字位码。
5.2.3各子程序功能描述及子程序入口出口、各程序流程图
1.显示时间子程序:
显示程序又包含三个隐含的子程序:
延时子程序、拆字子程序、显示子程序。
存在时间寄存器中的数值是一个16进制数,需要经过DIV语句,进行拆数,再分别送至数码管数据缓存区。
12在数码管中显示为横杆,用来作为时分秒的分隔符。
延时子程序:
该子程序是为了实现八个七段数码管显示的顺序显示选通时间,2ms的显示时间频率是的显示效果稳定,同时作为按键开关扫描判断去抖动
拆字子程序:
将空间51h、52h、53h内的秒时分拆成高低字节分配到,30h、31h、33h、34h、36h、37h实现时分秒的显示。
显示子程序:
将拆分好的高低位时分秒拆分码放入相对应的数码管,调用tab选通相应的七段数码显示时分秒当前数字。
2.计时子程序:
该程序功能是使得秒程序走动,走到59后进位分,后变00从新开始计时,分走到59后进位时,分从新开始00计时,时走到23,分走到59,秒走到59后进入重新日期周期计时。
3.显示日期子程序:
当时每向天增1,都要进行大小月天数判断,当月根据算法计满
向年增1
4.设置时间子程序
使用独立键盘设置,实现增1减1功能。
5.报警子程序:
把当前时间与设定的闹铃时间比较,当一致时,将p3.2口清零,蜂鸣器报警,直至拨下SW1拨钮,停止响铃
6.6键盘设置时间:
使用键盘设置数值,需要用键盘扫描子程序。
六、调试记录及说明:
1、系统操作说明书:
拨钮SW0:
切换闹铃设置
PB0设置时,PB1设置分,PB2设置秒
拨钮SW1:
切换闹铃停止设置
当闹铃时,拨上此拨钮,闹铃停止
拨钮SW2:
切换时间按键设置
PB0增1设置时,PB1增1设置分,PB2增1设置秒,PB3减1设置时,PB4减1设置分,PB5减1设置秒
拨钮SW3:
切换日期显示
拨上此拨钮,显示当前日期
拨钮SW4:
切换日期设置
PB0增1设置年,PB1增1设置月,PB2增1设置日
拨钮SW5:
切换键盘设置时位
按住PB0,可以用键盘设置任意值到时的十位,但是由于小时是24进制的,所以此处只能设置0,1,2,当超过2时,输入的任何数都默认为0。
按住PB1,用键盘输入任意的0-9到时的个位。
拨钮SW6:
切换键盘设置分位
按住PB0,可以用键盘设置任意值到分的十位,但是由于分钟是60进制的,所以此处只能设置0-5,当超过5时,输入的任何数都默认为0。
按住PB1,用键盘输入任意的0-9到分的个位。
拨钮SW7:
切换键盘设置秒位
按住PB0,可以用键盘设置任意值到秒的十位,但是由于秒是60进制的,所以此处只能设置0-5,当超过5时,输入的任何数都默认为0。
按住PB1,用键盘输入任意的0-9到秒的个位。
2、调试:
用一段实验板测试程序,烧到AT89S51芯片中,可以看到数码管循环电量,发光二极管发光正常等,说明实验板是完好的。
默认为走时状态,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化。
在闹铃设置时,本来想蜂鸣器响5s用一个延时程序来实现5s的定时,声音响五秒可以实现,但是,当进入延时程序后,数码管全灭了。
解决:
将延时程序改成调用显示程序,响铃的时间为显示程序占用的机器周期。
LED数码管的断码错乱,原因出于没有认真看清数码管引脚信息。
解决:
重新排列LED数码管,即可解决出现在的断码或乱码。
烧入程序后,LED数码管显示闪动,而且亮度不均匀。
解决:
首先对调用的延时进行逐渐修改,可以解决显示闪动问题。
其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在返回时屏蔽掉最后的附值,则会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。
没有考虑到闰年时的情况。
解决:
首先是将闰年判断程序流程图设计好,之后根据这个流程图编写闰年判断程序,并作为系统程学的一个子程序,在执行主程序时进行调用,最后解决了此问题.
程序设计中涉及到大量的运算和子程序调用,地址空间容易产生越界
解决:
运用合理的调用语句可以解决此问题。
总结:
这学期开设的单片机课程和此次的设计关联甚大,通过此设计,复习和巩固所学过的知识,可以对所学过的知识进行系统的回顾和总结。
但是,在课堂学的只是很基础的指令操作,如何把它联系到实际呢,这就是此次课程设计的目的。
课堂的知识是远远满足不了设计的要求的,这就需要我们主动去找寻更多的资料,了解更多的知识,这也在无形的拓展我们的知识面。
一个实际的产品,远不如它看起来这么简单,虽然我做的是最简单的数字钟,但是细节的考虑,任何一个功能的实现,都会牵扯出许多的问题,有些是逻辑思维的不严谨,有些是硬件电路的问题,都需要耐心思考,冷静分析。
在进行程序调试的时候,由于此次程序相对于平日的联系,算是较长的了,所以要进行分块调试,也是高效的体现。
程序在编写的时候,就要进行地址空间的分配,防止程序中的寄存器出现冲突,使系统出现无法预知的错误。
即使软件运行是无误的,硬件测试也可能是没有结果的,所以产品的设计,离不开硬件和软件。
参考文献:
[1]张国安.微机控制实验与课程设计指导书[M].北京:
电子工业出版社,2003.8.
[2]李江全,曹卫彬,郑瑶,郑重.计算机典型测控与串口通信开发软件应用实践[M].北京:
人民邮电出版社,2008.
[3]李广弟,朱月秀,王秀山.单片机基础[M].北京:
北京航空航天出版社,2001.7.
[4]谢维成,杨加国.单片机原理与应用及C51程序设计[M].北京:
清华大学出版社,2007.2.
附件(程序清单)
ORG0000H
LJMPMAIN
MAIN:
LCALLDEL
MOVDPTR,#0FE03H;开片选端
MOVA,#89H
MOVX@DPTR,A
MOVDPTR,#0FD03H;开片选端
MOVA,#8BH
MOVX@DPTR,A
MOV45H,#10;
MOV44H,#0;设置初始值
MOV43H,#0
MOV6EH,#2;预先设置显示缓冲区
MOV6DH,#0
MOV6CH,#1
MOV6BH,#0
MOV6AH,#0
MOV69H,#6
MOV68H,#2
MOV67H,#8
MOVTMOD,#01H;设置中断方式
MOV20H,#28H;设置中断次数
MOV40H,#23 ;闹铃缓冲区预先设置时
MOV41H,#59;分
MOV42H,#56;秒
SETBET0
MOVTH0,#0B0H;置初值
MOVTL0,#03CH
SETBTR0
HERE:
JNBTF0,HERE;判断1秒时间是否来到
CLRTF0
LCALLXIANSHI;调用显示时间子程序
LCALLIT0P;调用时间增1子程序
LCALLCHANGE1;是否进入设置时间子程序
LCALLCHANGE2;是否进入显示日期子程序
LCALLCHANGE3;是否进入设置日期子程序
LCALLNAOLIN;设置闹铃时间子程序
LCALLWARNING;调用是否警报子程序
LCALLSTOP;调用是否停止响铃子程序
LCALLBAOSHI
LCALLJIANPAN1;是否使用键盘输入数据
LCALLJIANPAN2
LCALLJIANPAN3
SJMPHERE
*******************************************
计数子程序:
*******************************************
IT0P:
PUSHPSW;进堆栈
PUSHACC
MOVTH0,#0B0H;重新赋初值
MOVTL0,#03CH
DJNZ20H,RETURN;循环次数不为0则返回
MOV20H,#28H;重新赋值循环次数
MOVA,#01H;准备增
ADDA,42H;让秒单元增1
MOV42H,A;秒增1
CJNEA,#60,RETURN;秒不超过60则返回
MOV42H,#00H;把秒单元清零
MOVA,#01H;准备增1
ADDA,41H;让分单元增1
MOV41H,A;分增1
CJNEA,#60,RETURN;分不超过60则返回
MOV41H,#00H;分单元清零
MOVA,#01H;准备增1
ADDA,40H;让时单元增1
MOV40H,A;时增1
CJNEA,#24,RETURN;时不超过24返回
MOV40H,#00H;时清零
MOVA,67H;准备让天单元增1
INCA
MOV67H,A;天增1
AJMPRETURN
RETURN:
POPACC;出堆栈
POPPSW
RET
*******************************************
显示时间子程序:
*******************************************
XIANSHI:
MOVA,42H;显示时间子程序
MOVB,#10;赋值除数10给B
DIVAB
MOV77H,B;将秒的个位存入77H单元
MOV78H,A;将秒的十位存入78H单元
MOVA,41H;分离分单元的个位和十位
MOVB,#10;赋值除数10
DIVAB
MOV07AH,B;将分的个位存入7AH单元
MOV07BH,A;将分的十位存入7BH单元
MOVA,40H;分离时单元的个位和十位
MOVB,#10;赋值除数10
DIVAB
MOV7DH,B;将时的个位存入7DH单元
MOV7EH,A;将时的十位存入7EH单元
MOV79H,#10;赋值12给剩下的数码管让它显示"-"
MOV7CH,#10
LP2:
MOVR0,#77H;用数码管显示77H~7EH里的数值子程序
MOVR3,#01H
LP3:
MOVA,@R0
MOVDPTR,#TBL
MOVCA,@A+DPTR
MOVDPTR,#0FE00H
MOVX@DPTR,A;送位码
MOVDPTR,#0FE01H
MOVA,R3
MOVX@DPTR,A;送段码
INCR0
MOVA,R3
RLA
MOVR3,A
LCALLDELAY
JNBACC.0,LP3;控制循环让数码管都显示一遍
RET
*******************************************
设置时间子程序:
*******************************************
CHANGE1:
MOVDPTR,#0FD02H;判断是否进入设置时间子程序
MOVXA,@DPTR
MOVDPTR,#0FD00H
MOVX@DPTR,A
FD1:
JNBACC.2,FD0;当拨码盘的第三位为1时进入设置,否则跳出
MOVDPTR,#0FD01H
MOVXA,@DPTR
JNBACC.2,MIAO;当按键的第3位按下时进入秒增1子程序
JNBACC.1,FEN;当按键的第2位按下时进入分增1子程序
JNBACC.0,SHI;当按键的第1位按下时进入时增1子程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 数字 闹钟 课程设计