基于单片机的数字电子钟设计

 

前言

随着电子技术的发展,人们日常生活的水平提高,数字电子钟越来越受欢迎,智能电子时钟是采用数字实现对时,分,秒还有温度数字显示的电子产品。广泛用于家庭,办公室,火车站,教堂等公共场所,它是人们日常生活中不可或缺的必需品,因为数字集成电路的发展和石英晶体振荡器的精度和功能远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大的扩大了钟表原先的报时功能。本设计就是采用了STC89C52单片机作为核心,LCD1602液晶屏显示,加了温度传感器采集温度和定时闹钟等功能。

数字电子钟具有准确显示时间、成本低、功耗低、易操作、等优点。

整体设计思路

数字电子钟的系统由51单片机为核心器件,里面包括单片机的最小系统模块、显示模块、时钟电路模块、按键设置模块和温度采集模块。能够准确显示时间,日期,温度等等;拥有闹钟功能;按键能够调整当前时间的加减和设置闹铃;增加了温度采集模块能精准检测当前温度,使用了高精度DS1302时钟芯片,添加了3.3V的纽扣电池,就算断电也走时,其成本便宜,使用简单。如图1-1所示为系统总体方案设计图。  

硬件设计

系统方案设计

方案一: 51单片机控制

这次的方案则是利用51单片机来实现的,它的核心是51单片机,此单片机可设计性丰富,并且功能非常齐全,时间实现精确的控制是通过软件设计来实现的。况且此方案设计起来很方便,能满足整个系统功能的要求。当然也要考虑价格方面的因素,51单片机的价格也是相当便宜的,同时也顺应实际的市场需求走向。

方案二: ESP32单片机控制

该方案是使用国产ESP32达到所需的功能,这种单片机的功能更完善,不仅自带WIFI跟蓝牙,但是因为价格高昂,而且我平时使用的也少,所以不采用ESP32单片机。

 

系统电路原理图

 系统工作原理

复位电路原理

复位电路的原理其实很简单,就是给正在运行的单片机一个触发信号,也叫初始化信号,当正在运行的单片机收到这个触发信号后呢,单片机瞬间从运行状态停下来,此时单片机为空状态,其实单片机复位的时候就是通过写寄存器的值,写至预设的寄存器里面。

复位电路的电路搭建也是非常简单,在复位引脚上面接了10k电阻以及10uf电容,收到的复位电平必须持续2us以上才有效。

 复位电路

 时钟电路设计原理

组成内部振荡器的高增益的反相放大器源自STC89C52,放大器的输入端和输出端引脚依次是XTAL1和XTAL2。

在放大反馈回路中,并联振荡电路由电容还有石英晶体组成的。外接电容C3、C2即使要求并不是那么的严格,但电容的容量还是会影响晶振的工作稳定性,震荡的频率,晶振如果选用石英晶体,使用30pf正负10pf电容较好,选用陶瓷振荡器就推荐用40pf正负10pf电容。

 时钟振荡电路

 液晶显示电路原理

显示部分采用LCD1602,其显示原理主要是利用液晶的物理特性,用电压就可以对显示区域进行控制,只要有电就可以显示,控制它显示出图形或者文字,此显示屏有16个引脚,1、2引脚是它的正负电源,提供能量,15、16引脚是屏幕背光的正负极。3引脚是控制屏幕的亮度的引脚,主要是在这个引脚上面接了一个可调电阻器,想要控制屏幕的亮度只需要调节这个电阻器,5、4、3是屏幕的命令、数据输入引脚,使能EN,其它引脚为屏幕的数据控制,单片机通过这些引脚输入数据给屏幕。

 液晶显示电路图

 温度采集电路设计原理

 

数字电子钟中温度采集的部分是用了DS18B20的芯片,这是一个最常用的温度传感器。下图所示是DS18B20电路硬件图:

 

 DS18B20电路引脚图

DS18B20有3个PIN,如2-6图所示,第一个PIN是地信号,第二个PIN是用来数据传输,为什么要在这个PIN上加一个10k电阻呢,这是因为加了电阻后可以加强温度传感器的输出能力。它第三PIN是电源VCC,它给温度传感器提供能量。

 时钟芯片控制电路设计原理

 

在这一次的设计中,时间控制使用的是DS1302芯片,如下图所示为DS1302电路连接图:

 

 DS1302电路连接图

DS1302进行读写程序操作首先要做初始化,给SCLK至0,RST至1,然后对SCLK开始脉冲。图2-8为DS1302读/写时序图。它的控制字必须从位7操作到位1,如果时间操作时,RAM要等于1,CK必须等于0。位1~位5的意思是它的操作地址。在位0进行位操作的时候,这个位就是1;如果这个位是0那么就说明进行的是写操作。它的控制操作,输入输出大多数从低位开始的。CH代表DS1302的时钟暂停标志位,如果为1,时钟停止工作,DS1302进入静态功耗模式,等到为0的时候开始工作。不管什么时候WP都得是0,当“WP”是1时候,写保护位是为了防止对任何一个寄存器的进行写操作功能。

按键电路设计原理

 在此次设计中,只需设置时间与闹钟,设置需要一个,时间加需要一个,时间减用到一个,再来一个用来翻页、切换,只用到四个按键。所以,使用独立按键比较合适,独立按键接入电路非常简单,每个功能按键接到单片机定义的按键IO口,GND接在按键的另一端,如果此时按键被按下,按键此时相当于一根导线,把地与单片机的IO口相连。此时,单片机收到一个低电平,那么就触发其对应的按键功能。

  独立按键连接图

 软件设计

软件设计思路

数字电子钟的软件设计主要包括系统的初始化程序、显示子程序、定时闹铃子程序、日期、时间修改子程序,农历自动更新跟闰月程序等子程序。

首先在系统接通电源以后要对系统进行程序初始化处理,然后进行读、写日期、时间和温度,再去分离日期、时间和温度显示值,再进行每个子程序的初始化,其中有LCD1602显示子程序,定时器时间一到,立即开始运行中断的程序。

 时钟子程序设计

首先进行时钟信息初始化,其中分为三部分:第一是发送命令字以及内容来接触写保护,这样是为了打开DS1302方便写操作;第二是打开DS1302的内部去充电电路,发送涓流充电命令即可;第三是去写日历信息的初始值,需要发送多字节跟单字节日历型数据命令。

实时时钟开始应该将时钟信息的初始值,年、月、星期、日、时、分、秒、把这些按顺序放到相应的寄存器中,然后时钟就会运用这些初始值,把它们为基准再进行计时。只要整个电路或者时钟模块的纽扣电池有一个不断电,计时就永远不会停止。

 按键控制子程序设计

 此次设计中因为需设置时间与闹钟,用到了四个独立按键。独立按键接入电路非常简单,每个功能按键接到单片机定义的按键IO口,GND接在按键的另一端,如果此时按键被按下,按键此时相当于一根导线,把地与单片机的IO口相连。此时,单片机收到一个低电平,那么就触发其对应的按键功能。然后再对其进行消抖,做一个键值的处理,再转到相应的子程序里面去。

 

 液晶显示子程序设计

 显示部分使用的是LCD液晶屏,其通信协议是8位并口。先对液晶屏进行初始化,再写数据以及写命令,设置好需要显示的坐标,再导入所以字库和选择相应的字码,显示屏再显示字符,如果第一个显示完毕后再显示下一个字符,继续将剩下的字符全部显示。

 

 制作调试

硬件电路制作

 

Proteus仿真效果成果截图

 

设计成果

作品完成功能

设计的主控为STC89C52单片机,其拥有显示秒、分、时、日、星期、月、年等功能;拥有阴、阳历与时间可以自动关联起来;还拥有闹钟功能。整个系统的过程就是由单片机传送信息给DS1302时钟管理芯片,时钟芯片再返回信息给单片机,单片机发到屏幕显示。还能够在按键设置模块内进行时间修改,设置闹钟等等,当按键进行设置日期、时间的时候,单片机能够通过输入的信息,使用UART通信发送给时钟芯片DS1302,再由芯片DS1302获取现在的信息发送到单片机,最后单片机控制再发送显示信息到显示模块。

主要技术参数

1.5V直流供电;

2.时间误差每天10秒左右;

3.温度采集精确到0.1℃。

 参考资料

[1]钟鹏程.基于51单片机的多功能数字钟设计[J].电子制作,2019(07):17-19.

[2]王莉,任英杰,王鹤君.基于AT89C51单片机数字时钟的设计[J].电子设计工程,2018,6(19):134-137+146.

[3]刘卫东,曾绍杰,李超,翟佳豪,王瑞东.浅析基于单片机的数字时钟与温度显示系统的设计[J].山东工业技术,2018(14):163.

[4]王瀚增,姜欣欣.基于C51单片机的多功能电子钟系统设计与仿真[J].通信电源技术,2018,35(02):117-119.

[5]林三元,张正炳.单片机定时闹钟设计[J].电子世界,2018(03):108-109.

[6]尹克岩.基于单片机的多功能数字钟的设计[J].电子制作,2017(15):68-69+54.

[7]祝良,郭臣鹏,苏宏锋.基于AT89S51单片机的数字钟设计与实现[J].数字技术与应用,2017(05):160-161+164.

[8]朱汉敏.一种多功能数字电子钟[J].福建电脑,2016,32(11):34-35+82.

[9]郭占苗,潘鲁宁.基于STC89C52单片机的数字钟设计[J].微处理机,2016,37(04):83-86.

[10]高忠坚,魏茂金,张锐戈,饶连周.Verilog HDL数字钟电路的设计研究[J].萍乡学院学报,2016,33(03):27-31.

[11]严敏.基于Proteus和Keil的多功能数字钟的设计和实现[J].常州信息职业技术学院学报,2016,15(03):13-17.

部分代码

#include<reg52.h>

//#include"DS18B20_3.H"

#include <string.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

#define wd 1    

#define yh 0x80

#define er 0x80+0x40

//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)

sbit en=P2^6;

//sbit rw=P2^6;   //如果硬件上rw接地,就不用写这句和后面的rw=0了

sbit rs=P2^7;

//校时按键与C51的引脚连接定义

sbit set=P1^4;    //设置键

sbit add=P3^2;    //加键

sbit dec=P3^3;    //减键

sbit seeNL_NZ=P3^7;  //查看农历/闹钟

sbit DQ=P1^1;    //

sbit buzzer=P1^2; //蜂鸣器,通过三极管8550驱动,端口低电平响

//sbit led=P2^4;     //LCD背光开关

bit  led1=1;

bit  ZDK=1,NZK=1; //整点报时,闹钟开关控制位  =0时,关闭,=1时,开启

bit zdkg=0,nzkg=0;

unsigned char temp_miao;

unsigned char bltime;  //背光亮的时间

//DS1302时钟芯片与C51之间的引脚连接定义

sbit IO=P2^1;

sbit SCLK=P2^0;

sbit RST=P2^2;

uchar a,miao,shi,fen,ri,yue,nian,week,setn,temp;

uint flag;

//flag用于读取头文件中的温度值,和显示温度值

bit c_moon;

uchar nz_shi=12,nz_fen=0,nz_miao=0,setNZn;       //定义闹钟变量

uchar shangyimiao,bsn,temp_hour;          //记录上一秒时间

uchar T_NL_NZ;                        //计数器

bit timeron=0;                        //闹钟启用标志位

bit baoshi=0;                      //整点报时标志位

bit  p_r=0;                           //平年/润年  =0表示平年,=1表示润年

data uchar year_moon,month_moon,day_moon,week;

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值