基于51单片机的电子时钟设计

第1章  绪论

1.1 设计目的

1.2 设计内容

设计内容:

  1. LCD液晶作为显示设备。
  2. 可以分别设定小时、分钟、秒,复位后时间为00:00:00。
  3. 能实现日期的设置,年、月、日。
  4. 具有闹钟功能;显示星期;整点报时功能。
  5. 能随时修改时间日期星期和闹钟时间。

第2章  方案设计与论证

2.1时钟模块论证

方案采用单片机本身的定时器进行计时。单片机本身的定时器和单片机的CPU是相互独立的,定时器工作的过程是自动完成的,不需要CPU参数,它是根据机器内部的时钟或者外部的脉冲信号对寄存器中的数据加1来实现定时的。它可以增加单片机的效率,一些简单的重复加1的工作可以交给定时/计数器处理,CPU转去处理一些复杂的事情,同时可以实现精确定时作用,关键是不需要外接硬件

方案采用时钟芯片DS12887A进行控制。DS12C887 时钟芯片功能丰富价格适中,能够自动产生世纪、年、月、日、时、 分、秒以及时间模式转换等的时间信息,芯片内部增加了世纪存储器,从而利用硬件电路解决了“千年”的问题。DS12C887 时钟芯片中还自带有锂电池,单片机掉电 后时钟芯片内部的时间信息可以保持十年之久。

方案采用时钟芯片DS1302进行控制。DS1302的使用非常方便,而且价格便宜,特别是显示时间很直观。它的优点如下:DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需要用到三根通信线: ① RES复位;② I/O数据线;③ SCLK串行时钟;具有能计算2100年之前的秒、分、时、日、周、月、年的能力,还有闰年调整能力;串行I/O口方式使得管脚数量最少;DS1302工作时功耗很低,保持数据个时钟信息时功率小于1mW。

综合考虑最终采用方案三,原因是采用DS1302芯片具有能计算2100年之前的秒、分、时、日、周、月、年的能力,同时功耗低,用到的通信线数量也较少

2.2 按键模块论证

方案一:采用矩阵按键控制修改时间和闹钟设定等功能。矩阵键盘又称行列键盘,是用四条I/O线作为行线,四条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上设置一个按键。

按键的位置由行号和列号唯一确定,因此可以分别对行号和列号进行二进制编码,然后两值合成一个字节,高4位是行号,低4位是列号。这样键盘上按键的个数就为4*4个,这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。缺点:必须扫描检测按键情况,程序复杂,占用时间较多。

常见的识别按键的方法如扫描法:按键按下时,与此键相连的行线与列线导通,行线在无按键按下时处在高电平。如果所有的列线都处在高电平,则按键按下与否不会引起行线电平的变化,因此必须使所有列线处在低电平。这样,当有按键按下时,改键所在的行电平才回由高变低,才能判断相应的行有键按下。

方案二:采用独立式按键控制修改时间和闹钟设定等功能。独立按键式直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。独立按键的软件常采用查询式结构。先逐位查询没跟I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。独立式按键电路配置灵活,软件结构简单,可根据实际需要灵活编码,可以直接读取,检测占用时间较少,不受其它因素影响。但每个按键必须占用一个I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。

综合考虑最终采用方案二,使用独立式按键。本课题电子时钟只需要时间修改和闹钟设定与关闭功能,需要的独立按键数量少,直接读取,检测占用时间较少,且不受其它因素影响,资源利用率更高。

2.3系统设计要求

利用STC89C52单片机、LCD1602电子显示屏、DS1302、独立式按键开关实现了电子时钟的显示和闹铃等基本功能。

  1. LCD液晶作为显示设备。
  2. 可以分别设定小时、分钟、秒,复位后时间为00:00:00。
  3. 能实现日期的设置,年、月、日。
  4. 具有闹钟功能;显示星期;整点报时功能。
  5. 能随时修改时间日期星期和闹钟时间。

2.4 总体设计

本设计以单片机 AT89C52为控制核心, 采用模块化设计, 共分以下几个功能模块:单片机控制系统模块、 电源模块、 时钟模块、 复位模块、 按键控制模块和LCD显示模块等。电子时钟主要有年月日、星期、时分秒的显示和闹铃设定以及整点报时等基本功能。整体的系统框架图如下图2.1所示:

图2.1 系统结构设计框图

各模块功能如下:

  1. AT89C52单片机:洗衣机控制系统的核心控制器件。
  2. 晶振电路模块:产生时钟信号驱动单片机工作。
  3. 复位电路模块:将单片机的寄存器重定,使程序指针回到最初位置。以便于系统运行报错是,此时按下复位按键,程序能从最初位置开始执行。
  4. LCD显示模块:显示模块电路采用LCD1602液晶显示屏与单片机相连,利用 C 语言程序设计实现电子时钟当前时间(年月日时分秒和闹钟)的显示功能。
  5. 矩阵按键模块:控制输入实现年月日时分秒、星期和闹钟时间的修改以及关闭、开启闹钟等功能。
  6. DS1302时钟模块:DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软年自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。

第3章 单元电路设计

3.1单片机最小系统

单片机最小系统又称为最小应用系统,即用最少的元器件组成单片机可以工作的系统。一般应包括:电源、单片机、晶振电路、复位电路等。

以 AT89C52 单片机为核心,选用12MHZ的晶振,由于晶振的频率越高,单片机的运行速度就越快,但考虑到单片机的运行速度快会导致对存储器的要求就会变高,因此 12MHZ 晶振为最佳选择。外接电容的值虽然没有严格的要求,但是外接电 容的大小会影响振荡器的频率高低、振荡器的稳定性和起振的快速性,因此我们选用30pF的电容作为起振电容。复位电路为按键高电平复位,当按键按下,RES端为高电平,当高电平持续4us的时间就可以使单片机复位。如图3.1所示为单片机最小系统图。 

图3.1单片机最小系统图

AT89C52单片机是一种高效微控制器, 也是低功耗高性能单片机。 单片机是本设计的核心主要起控制作用, 采用 40 引脚双列直插封装形式, 32 个外部双向输入/输 出(I/O)埠, 同时内含 2 个外中断口, 2 个 16 位可程序设计定时计数器, 2 个全双工串行通信口,因为受引脚数目 的限制, 所以有不少引脚具有第二功能。外形及引脚排列如下图所示。

AT89C52单片机的主要管脚功能:

VCC: 供电电压。    GND: 接地。

 P0 口: P0 口为一个 8 位漏级开路双向 I/O 口, 每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时, 被定义为高阻输入。 P0 能够用于外部程序数据存储器, 它可以被定义为数据/地址的第八位。

P1 口: P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口, P1 口缓冲器能接收输出4TTL 门电流。 P1 口管脚写入 1 后, 被内部上拉为高, 可用作输入, P1 口被外部下拉为低电平时, 将输出电流, 这是由于内部上拉的缘故。

 P2 口: P2 口为一个内部上拉电阻的 8 位双向 I/O 口, P2 口缓冲器可接收, 输出 4个 TTL 门电流, 当 P2 口被写 1 时, 其管脚被内部上拉电阻拉高, 且作为输入。 并因此作为输入时, P2 口的管脚被外部拉低, 将输出电流。

P3 口: P3 口是 8 个带内部上拉电阻的双向 I/O 口, 可接收输出 4 个 TTL 门电流。当 P3 口写入 1 后, 它们被内部上拉为高电平, 并用作输入。 作为输入, 由于外部下拉为低电平, P3 口将输出电流(ILL) 这是由于上拉的缘故。 RST: 复位输入。 当振荡器复位器件时, 要保持 RST 脚两个机器周期的高电平时间。

ALE/PROG: 当访问外部内存时, 地址锁存允许的输出电平用于锁存地址的地位字节。 在 FLASH 程序设计期间, 此引脚用于输入程序设计脉冲。 在平时, ALE 端以不变的频率周期输出正脉冲信号, 此频率为振荡器频率的 1/6。 因此它可用作对外部输出的脉冲或用于定时目的。

PSEN : 外部程序内存的选通信号。 在由外部程序内存取指期间, 每个机器周期两次 PSEN 有效。 但在访问外部数据存储器时, 这两次有效的 PSEN 信号将不出现。

 EA/VPP: 当 EA保持低电平时, 则在此期间外部程序内存(0000H-FFFFH), 不 管是否有内部程序内存。 注意加密方式 1 时, EA将内部锁定为 RESET; 当 EA端保持高电平时, 此间内部程序内存。在 FLASH 程序设计期间, 此引脚也用于施加 12V 程序设计电源 (VPP)。

电源电路模块为系统电路和其他模块提供+5V 电源。 供电电源可由开关电源提供。

时钟电路模块的设计:

   由于 AT89C52单片机芯片内有时钟振荡电路, 因此本系统单片机采用内部时钟方式,只要在单片机的 XTAL1和 XTAL2引脚外接石英晶体和微调电容, 就构成了自激振荡器并在单片机内部产生时钟脉冲信号,具体电路设计如下图所示。  

工作原理:时钟信号通常用两种电路形式得到:内部振荡和外部振荡。 在 XTAL1 和 XTAL2 引脚上外接定时组件,就能构成自激振荡电路。定时组件通常采用石英晶体和电容组成的并联谐振电路。一般电容 C4 和 C5 主要起频率微调作用,电容值可选取为 30pF 左右或 40pF左右;晶体振荡器,简称晶振,其晶振频率(fosc) 范围为 1. 2MHz~12MHz, 本设计中选择12MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速率就越快。

复位电路使单片机或系统中的其他部件处于某种确定的状态。 当在 MCS-51 系列单片的 RST 引脚处引入高电平并保持 2 个机器周期, 单片机内部就执行复位操作。 复位操作有两种基本形式:一种是上电复位, 另一位是按键复位。 本设计采用按键复位方式,如下图所示。

工作原理:当按下按键时, RST 直接与 VCC 相连,出现 2 个以上的高电平形成复位,同时电解电容被短路放电;按键松开时,电容充电,电流流过电阻,RST 为高电平,仍然是复位,充电完成后,电容相当于开路,RST 为低电平,正常工作。

3.2 LCD显示模块

在单片机应用系统中,对于系统的运行状态和运行结果,通常都需要直观显示出来。本设计采用LCD1602液晶显示屏显示, 显示电路如图3-2所示:

LCD1602,工业字符型液晶能够同时显示16x02即32个字符(16列2行),故简称1602。1602LCD 液晶具有功耗低、显示内容丰富、清晰,显示信息量大,显示速度较快,界面友好等特点,可以方便的显示多种字符通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。P0口作为液晶显示的数据端口,与D0-D7连接。P2.0-P2.2口作为其控制端口,控制LCD液晶显示屏显示输出数据,与RS,RW,E连接。本次课设LCD显示屏主要展现年月日、星期、时分秒的实时显示和闹钟时间的显示。 

图3-2  显示电路(LCD1602液晶显示屏)

LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示。

引脚接口说明表

编号

  符号

引脚说明

编号

符号

引脚说明

1

GND

电源地

9

D2

数据

2

VCC

电源正极

10

D3

数据

3

V0

液晶显示偏压

11

D4

数据

4

RS

数据/命令选择

12

D5

数据

5

R/W

读/写选择

13

D6

数据

6

E

使能信号

14

D7

数据

7

D0

数据

15

BLA

背光源正极

8

D1

数据

16

BLK

背光源负极

第1脚:GND为地电源。

第2脚:VCC接5V正电源。

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:E端为使能端,当由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:背光源正极。

第16脚:背光源负极。

3.3 按键控制模块

单片机设计中,按键设计很重要,常见的单片机按键设计分为独立式和行列式,独立式按键设计简单,但占用I/O口较多;行列式按键设计相对复杂, 占用 I/O 口较少。 如下图3-3所示。

图3-3按键控制电路

上图为按键控制电路,为方便使用,设计了4个独立式按键,分别为K1时间减少、K2时间增加、K3功能选择键、K4设置/OK键和一个K5闹钟关闭开关。

减少:K1键在设置界面进行时间减操作;

增加:K2键在设置界面进行时间加操作;

选择键:按下设置键后,再按下K3键选择修改对象:年、月、日、时、分、秒、星期、闹钟的时、分中任意一个,可以跳过当前到下一个。

设置/OK:按下设置键后可以按K1或K2键进行时间加减或按K3键选择对象,设置完成后再按下K4键保存设置即完成。

闹钟关闭:当闹钟设定时间与当前时间相同时,闹钟持续响,即蜂鸣器持续报警,此时按下K5键可以关闭闹钟。

3.4蜂鸣器报警模块

本设计中,当闹钟设定时间与当前时间相同时,闹钟持续响,即蜂鸣器持续报警直至关闭闹钟。 蜂鸣器电路设计如图3-4所示。

由于单片机直接输出的信号不足以驱动蜂鸣器的工作。因此,在单片机与蜂鸣器之间加一个 PNP 三极管作为驱动。三极管的基极通过一个 1K 欧的电阻与单片机相应的 I/O 相连,电源和蜂鸣器与发射极极相连,集电极接地。这样就完成了有源蜂鸣器的驱动电路。

图3-4蜂鸣器报警电路

3.5 DS1302时钟模块

DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软年自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式,它的引脚及功能如下表所示。

单字节写入时序如下图所示。

由图可见,先拉高使能端,进行使能选择,然后在时钟上升沿写入一个字节。DS1302在进行读写操作时最少读写两个字节,第一个是控制字节,就是一个命令,说明是读还是写操作,第二个时需要读写的数据。对于单字节写,只有在SCLK为低电平时才能将 CE 置高电平,所以刚开始将SCLK 置低,CE置高,然后把需要写入的字节送入 IO口,然后跳变SCLK,在SCLK下降沿时,写入数据。

第4章 系统软件设计

4.1 主程序的设计

本次的设计主程序是根据每个模块的功能来进行编写,先对各个模块进行初始化,然后再按照各自不同来分模块编写。当仿真程序中的单片机上电,进入程序后,先将单片机AT89C52、LCD1602、DS1302等进行初始化,LCD1602显示当前时间实时,程序开始判断是否是整点或设定的闹钟时间,然后进行按键检测,等待按键按下,当有按键按下,单片机检测一次,确定按下,单片机调用程序,同时刷新一次,显示当前操作结果。后,程序返回按键等待,如此循环执行。

当按下设置键时,可以按K1或K2键进行时间加减或按K3键选择对象,设置完成后再按下K4键保存设置即完成;按下K3键选择修改对象:年、月、日、时、分、秒、星期、闹钟的时、分中任意一个,可以跳过当前到下一个;当闹钟设定时间与当前时间相同时,闹钟持续响,即蜂鸣器持续报警,此时按下K5键可以关闭闹钟。

其具体流程图如图所示。

程序:

略。

4.2LCD初始化子程序设计

LCD1602在上电以后,应该先等待50ms左右,让其内部芯片初始化后再对其进行操作。在对其操作时,应参考其时序图,先把命令写入其内部寄存器设置它的工作方式和状态。要显示数据的时候,先设置好显示坐标,再往里面写入要显示的ASCII码,LCD则通过刷新和替换来显示新的数据。

流程图如下:

程序如下:略。

4.3时间显示子程序设计

将DS1302初始化后,读取7个字节的时钟信号:分秒时日月周年,然后计算它们的时间次序,在LCD液晶显示屏上显示出来。流程图如下:

流程图:

程序如下:略。

4.4定时器中断子程序设计

该子程序运用定时器T0中断,该子程序的主要作用是使时间达到1秒时,令1秒标志为真,返回到主函数运行时间减1,1秒标志为假,再调用到该子程序以此实现每秒显示时间减1。

流程图如下:

程序如下:void Timer0() interrupt 1 //定时器0中断

{

if(t<10)

t++;

else

{

t=0;

flag=!flag;

Ds1302ReadTime();//读取时间

xian();

}

TH0=0X3C; //定时50ms

TL0=0Xb0;

}

4.5延时子程序设计

LCD初始化时延时1000ms,整点报时蜂鸣器响持续2000ms。蜂鸣器延时流程图如下:

LCD和蜂鸣器的延时程序设计,程序如下:

void delay_uint(uint i)//LCD延时

{while(i--);}

void Delay1ms(uint i)//延时

{

uint j=0;

while(i--){

for(j=0;j<110;j++);

}

}

beep=0;//蜂鸣器响

Delay1ms(2000);//持续两秒

beep=1;//蜂鸣器停止响

第5章 系统仿真与测试

5.1软件调试

5.1.1 Protoeus8.11keil μVision5

本设计用Proteus 8.9软件作图,C语言对单片机进行控制操作,易读好懂,用Keil μVision5软件进行了调试。

5.1.2软件调试

调试成功界面:

5.2 Proteus仿真

使用Proteus绘制原理图,并将Keil编译生成得*.hex程序文件录入到AT89C52模拟单片机中,点击仿真,在LCD1602液晶显示屏上显示当前时间。

5.2.1初始界面

 LCD1602实时显示年月日、时分秒、星期,如图5-1所示。 

图5-1 仿真图平常状态显示

5.2.2闹钟设置界面 

 按下设置键后,再按选择键,直至出现闹钟设置界面,再按下K1或K2进行闹钟时间的加减,实现闹钟的设定和修改。如图5-2 设置闹钟: 

图5-2 设置闹钟

5.2.3闹钟关闭界面

当闹钟设定时间与当前时间相同时,闹钟持续响,即蜂鸣器持续报警,此时按下K5键可以关闭闹钟,等到1分钟过后再开启K5开关,蜂鸣器不再报警。如图5-3 关闭闹钟:

图5-3 关闭闹钟

第6章 总结

本次设计主要是以单片机最小系统、DS1302时钟、独立按键、蜂鸣器和LCD1602液晶模块组成,设计了一个电子时钟,利用单片机控制,系统成本低廉,功能精准实用。通过最后的硬件和软件的模拟调试,本课题的研究工作已经达到预期的要求,归纳起来有以下几点:

(1)本课题以AT89C51为核心、LCD为显示屏结合蜂鸣器和DS1302实现了电子时钟的年月日、时分秒、星期的显示功能和闹钟以及整点报时功能。

(2)系统硬件设计使用的有芯片AT89C52,DS1302,lcd1602液晶显示屏。

(3)系统软件设计包括LCD初始化程序、时间显示程序,定时器中断程序,延时函数程序等,完成了电子时钟的基本功能。

本次设计可以说是软硬结合,又以硬件为主,软件为辅。 当今科技发展迅速,单片机嵌入式开发有着光明的前景。通过 Proteus 仿真实现了所要求的全部功能,且可以满足对系统安全及稳定性的需求。并且另设复位电路来保证当LCD出现显示错误时能够重新回到初始化界面,使本设计功能趋于完善,满足现阶段的发展需要。由于单片机具有经济实用、开发简便等特点, 所以依然在工业控制、 家电等领域占据广泛的市场。 通过对本系统的设计,我学习到了硬件开发和软件开发的基本流程并有了一定的驾御此开发过程的能力。 通过实际的程序设计和不断的调试过程,我更加熟练地掌握了单片机相关程序的程序设计方法,在不断的设计过程中,我对单片机系统有了更深刻的认识,进一步熟悉和掌握了单片机的结构以及它的工作原理,对定时、中断程序等有了更深地认识,学到了如何熟练使用仿真软件Proteus8.9和程序设计软件Keil uVision5。

第7章 完整源代码

 私信作者可获取完整源代码。

参考文献

[1]高汉昆,张斌.单片机在自动化控制系统中的应用分析[J].数字通信世界,2023,(11):145-147.

[2]贺佩.单片机技术在电子产品设计中的应用[J].电子技术,2023,52(11):210-211.

[3]闫景富.基于Proteus的单片机仿真实验教学设计[J].集成电路应用,2023,40(11):406-407.

[4]董占国,卢晓雄,武鸿熙等.单片机汇编启动文件分析及作用[J].自动化应用,2023,64(08):92-96.

[5]张晓培,蒋庆华,庄远等.“C语言与单片机技术及应用”课程内容整合与资源重构[J].科技视界,2022,(25):153-155.

[6]陈忠平,刘琼.51单片机C语言程序设计经典实例[M].电子工业出版社:202106.424.

  • 29
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值