基于51单片机电子闹钟或万年历的设计课程设计精Word格式文档下载.docx
- 文档编号:19105546
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:42
- 大小:1.14MB
基于51单片机电子闹钟或万年历的设计课程设计精Word格式文档下载.docx
《基于51单片机电子闹钟或万年历的设计课程设计精Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机电子闹钟或万年历的设计课程设计精Word格式文档下载.docx(42页珍藏版)》请在冰豆网上搜索。
5.2.2液晶显示程序17
7.心得体会20
参考文献21
附录一系统原理图22
附录二系统程序23
1.项目背景
1.1项目研究的目的和意义
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间等造成的。
而钟表的数字化给人们生产生活带来了极大的方便。
数字钟是通过数字电路实现时,分,秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烤箱、通断动力设备、甚至各种定时电气的自动启用等。
所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
1.2课题研究的内容
本论文主要研究基于单片机的万年历设计。
当程序执行后,LCD显示即时时间、年月日、星期。
设置4个操作键:
K1,时间调整键;
K2,上调键;
K3,下调键;
K4,闹钟设置键本设计的主要内容:
1、了解单片机技术的发展现状,熟悉万年历各模块的工作原理;
2、选择适当的芯片和元器件,确定系统电路,绘制电路原理图,尤其是各接口电路;
3、熟悉单片机使用方法和C语言的编程规则,编写出相应模块的应用程序。
设计目标:
使基于AT89C52单片机的万年历实现以下三个功能:
a.具有年、月、日、星期、时、分、秒等功能;
b.具备年、月、日、星期、时、分、秒校准功能;
2.方案的选择和和论证
2.1单片机型号的选择
通过对多种单片机性能的分析,最终认为AT89C52是最理想的电子时钟开发芯片。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和1000次擦写循环,数据保留时间为10年,是最好的选择。
2.2按键的选择
方案一:
4×
4矩阵式键盘。
如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂。
方案二:
独立式按键。
如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。
如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。
由于并不需要经常修改时间和设置闹铃时间,而且方案二的程序简单,按键少、成本低,因此,选择方案二。
2.3显示器的选择
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。
方案二:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,若采用在显示数字显得太浪费,且价格也相对较高,所以在此也不用此种作为显示。
方案三:
采用1602液晶显示屏,该液晶显示屏的显示功能强大,内置192种字符,可显示大量符号、数字,清晰可见,而且功率消耗小寿命长抗干扰能力强。
所以在此设计中采用1602液晶显示屏。
2.4计时部分的选择
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
所以本设计采用DS1302时钟芯片。
2.5发音部分的设计
通过三极管放大后驱动蜂鸣器工作,再通过软件产生的时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。
2.6电路设计最终方案
综上各方案所述,对此次作品的方案选定:
采用AT89C52作为主控制芯片,DS1302时钟芯片计时,LCD1602作为显示模块。
3.AT89C52单片机简介
3.1单片机基本特性
⏹8位的CPU,片内有振荡器和时钟电路,工作频率为0~24MHz
⏹片内有256字节数据存储器RAM
⏹片内有8K字节程序存储器
⏹ROM4个8位的并行I/O口(P0、P1、P2、P3)
⏹1个全双工串行通讯口
⏹3个16位定时器/计数器(T0、T1、T2)
⏹可处理6个中断源,两级中断优先级
3.2单片机内部结构图
图3-1单片机内部结构图
3.3单片机I/O引脚结构
3.3.1P0口
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
3.3.2P1口
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输(P1.0/T2)和输入(P1.1/T2EX),
Flash编程和程序校验期间,P1接收低8位地址。
3.3.3P2口
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
Flash编程或校验时,P2亦接收高位地址和一些控制信号。
3.3.4P3口
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
3.4单片机最小系统板
仅仅一个单片机是没有办法工作的,要想使单片机正常功能,单片机需要有电源电路、复位电路、晶振。
电源电路给单片机提供电源,复位电路使得单片机具备复位功能,晶振的作用产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。
单片机最小系统是保证单片机正常工作的最基本单位。
图3-2单片机最小系统板
4.数字电子钟的设计原理和方法
4.1设计原理
根据上述方案设计出系统整体框图如下所示
图4-1系统原理图
为使时钟走时与标准时间一致,校时电路是必不可少的,键盘模块用来校正液晶上显示的时间;
AT89C52单片机通过输出各种电脉冲信号来驱动控制各部分正常工作;
而系统的时间数据则最终通过液晶模块显示出来。
4.2硬件电路的设计
4.2.1DS1302时钟芯片
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。
图4.5所示为DS1302的引脚排列,其中VCC1为后备电源,VCC2为主电源。
所以在主电源关闭的情况下,也能保持时钟的连续运行。
DSX1和DSX2是振荡源,外接32.768KHz晶振用来为芯片提供计时脉冲。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电行动时,在VCC大于等于2.5V之前,RST必须保持低电平。
在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
图4-2DS1302时钟芯片电路
时钟芯片DS1302的工作原理:
(1)DS1302的控制字节
DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1指示操作单元的地址;
最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出
(2)数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
(3)DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;
当该位为0时,时钟开始运行。
“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;
另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
4.2.21602液晶简介
本设计中由于要对时间进行显示,所以选择液晶显示屏1602模块作为输出。
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。
它可以显示两行,每行16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码.管脚功能如表4-1所示:
LCD1602主要管脚介绍:
RS为寄存器选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。
R/W为读写信号线端,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址;
当RS为高电平R/W为低电平时可以写入数据。
E为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
将L1602的RS端和P2.0,R/W端和P2.1,E端和P2.2相连,当RS=0时,对LCD1602写入指令;
当RS=1时,对LCD1602写入数据。
当R/W端接高电平时芯片处于读数据状态,反之处于写数据状态,E端为使能信号端。
当R/W为高电平,E端也为高电平,RS为低电平时,液晶显示屏显示需要显示的示数。
图4-3为1602液晶。
图4-31602液晶电路
4.2.3蜂鸣器驱动电路
发音部分是通过三极管放大驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。
图4-4蜂鸣器驱动电路
4.2.4独立键盘电路
实现键盘控制的方法有多种,在本系统中,我们采用了AT89C52单片机来进行控制,因为单片机可以很好的解决键抖动。
由若干个按键组成一个键盘,其电路结构可分为独立式键盘和矩阵式键盘两种。
本设计采用的是独立式键盘。
键盘的工作方式可分为编程控制方式和中断控制方式。
CPU在一个工作周期内,利用完成其他任务的空余时间,调用键盘扫描子程序,经程序查询,若无键操作,则返回;
若有键操作,则进而判断是哪个键,并执行相应的键处理程序。
这种方式为编程扫描方式。
由于单片机在正常应用过程中,可能会经常进行键操作,因而编程控制方式使CPU经常处于工作状态,在进行本次设计中,涉及到了调整时间、设置闹钟、上调、下调四个功能。
因此采用独立式键盘。
如下图所示:
图4-5独立键盘电路
5.软件部分的设计
5.1程序流程图
5.1.1系统总流程图
系统总流程图如图5-1所示。
流程图分析:
首先系统初始化,系统开始运行,当有设置键按下时进入修改时间模式,无按键按下时读取时间等数据送入液晶屏显示;
在修改时间模式下设置时间完成后再送数据到液晶屏显示。
图5-1系统总流程图
5.1.2DS1302时钟程序流程图
时钟流程图如图5-2所示。
DS1302开始计时时,首先进行初始化,当有中断信号时,读取时钟芯片的数据送入液晶屏显示。
这时若有设置键按下时,进行时间修改,完成后将数据送入时钟芯片;
若没有按键按下,则直接存入EPROM,送入液晶屏显示。
图5-2时钟流程图
5.1.3LCD显示程序流程图
显示程序流程图如图5-3。
首先对1602显示屏进行初始化(初始化大约持续10ms左右),然后检查忙信号,若BF=0,则获得显示RAM的地址,写入相应的数据显示;
若BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到BF=0为止。
图5-3LCD显示程序流程图
5.2程序的设计
5.2.1DS1302读写程序
DS1302是SPI总线驱动方式。
它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。
要想与DS1302通信,首先要先了解DS1302的控制字。
DS1302的控制字如图5-4所示。
图5-4DS1302的控制字
控制字总是从最低位开始输出。
在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。
同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
数据读写时序如图5-5、5-6所示。
图5-5单字节读
图5-6单字节写
5.2.2液晶显示程序
1602通过D0~D7的8位数据端传输数据和指令,其模块内的控制器有11条控制指令。
当液晶显示屏的接口电路与单片机系统I/O按照并行数据传输方式连接完成以后,即可以对AT89C52单片机进行编程。
在液晶屏完成显示之前首先要对液晶进行初始化。
程序见附录二。
6.实验结果
此电子闹钟设计是利用Proteus仿真软件进行仿真,基本上实现了课程设计要求实现的功能。
硬件部分设置了的三个按键K1、K2、K3、K4。
K1键为调整时间功能键,K4为设置闹钟功能键,K2、K3分别为上调和下调键。
当按键K4第一次按下时,停止计时进入闹钟1的时设置,当按键K4第二、第三次按下时,分别进入闹钟1的分设置和秒设置,当按K4第四次按下时,退出闹钟设置,正常显示当前时间。
当按下K1键时进入时间调整模式,K1按下第一次进入年调整,K1按下第二次进入月调整,K1按下第三次进入日调整;
当K1按下第四、五、六次时,分别进入时、分、秒调整,K1按下第七次时时间调整完毕,退出时间调整功能,显示器正常显示时间。
下面是程序运行结果截图
图6-1初始时间显示图
图6-2调整时间后显示图
图6-3闹钟设置后显示图
上图6-1表示程序启动时将时间初始化为2015年01月10日00时00分00秒;
之后进行了调整,将时间调整为操作的当前时间如图6-2所示,2015年01月10日11时59分15秒;
图6-3表示是将闹钟设置为13时00分29秒。
7.心得体会
通过自己的不懈努力,我终于完成了毕业设计任务书上的任务要求。
功能上基本达标:
时钟的显示、调时功能、闹铃功能。
其精确度完全可以满足日常生活显示时间的需要;
调时功能,方便快捷;
校时功能保证了时钟准确和可靠性。
硬件设施合乎要求,软件设计可以配合硬件实现要求的功能。
但是由于时间比较短,前期设计出现部分不足:
如位选闪烁功能不能实现、闹钟的开启与关闭、间断蜂鸣声等。
这些只是软件设计时相应功能部分还不完善造成。
不过经仔细思考和程序的完善,最终将软件设计改进,并完全可以很好实现所有要求的功能。
可见技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有更长的使用寿命等优点的数字时钟。
数字时钟更具人性化,更能提高人们的生活质量,更受人们欢迎。
无可否认机械时代已经过去,电子时代已经到来。
做为新时代的我们,更应该提高自身能力,适应新时代的发展。
知识来自实践,多去生活中探询所需要的。
对于上述所提到的研究课题,我们应尽量考虑到人的因素,增强时钟的实用性和操作性,为使用者提供切实的方便,营造一种舒适的生活氛围。
所以,在设计的时候,应该从多方面、多角度去考虑问题,而且应该进一步提高时钟的质量。
另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。
参考文献
[1]张友德,赵志英,涂时亮.《单片微型机原理、应用与实验》[M].上海:
复旦大学出版社,2008.
[2]赵亮,侯国锐.《单片机C语言编程与实例》[M].北京:
人民邮电出版社,2003.
[3]高鹏,安涛,寇怀成.《电路设计与制版——protel99入门与提高》[M].北京:
人民邮电出版社,2006.
[4]谭浩强.《C程序设计(第三版)》[M].北京:
清华大学出版社,2005.
[5]李朝青.《单片机原理及接口技术》[M].北京:
北京航空航天大学出版社,2004.
[6]康光华,《电子技术基础—模拟部分(第五版)》[M].北京:
高等教育出版社,2005.
附录一系统原理图
附录二系统程序
#include<
reg52.h>
//包含单片机寄存器的头文件
intrins.h>
//包含_nop_()函数定义的头文件
unsignedcharcodedigit[10]={"
0123456789"
};
//定义字符数组显示数字
sbitSCLK=P1^0;
//位定义1302芯片的接口,时钟输出端口定义在P1.0引脚
sbitDATA=P1^1;
//位定义1302芯片的接口,数据输出端定义在P1.1引脚
sbitRST=P1^2;
//位定义1302芯片的接口,复位端口定义在P1.2引脚
sbitK1=P3^2;
//定义按键1触发中断0,调整时间按钮
sbitK4=P3^3;
//定义按键1触发中断1,设置闹钟按钮
sbitK2=P1^4;
//定义按键2,+
sbitK3=P1^5;
//定义按键3,-
sbitBEEP=P3^6;
//蜂鸣器
unsignedcharmiao,fen,shi,tian,yue,nian;
//分别储存苗、分、小时,日,月,年
unsignedcharsettime=0;
unsignedcharsetclock=0;
unsignedcharclock_hour,clock_min,clock_sec;
/*****************************************************
函数功能:
延时若干微秒
入口参数:
n
***************************************************/
voiddelaynus(unsignedcharn)
{
unsignedchari;
for(i=0;
i<
n;
i++);
}
向1302写一个字节数据
x
voidWrite1302(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子 闹钟 万年历 设计 课程设计