APP下载

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

2023-03-20金士豪

无线互联科技 2023年1期
关键词:电子钟晶振数码管

金士豪

(湖南科技学院 智能制造学院,湖南 永州 425199)

1 背景及意义

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上[1]。单片机相当于一个微型计算机,与计算机相比,它只缺少了I/O设备。一块芯片就构成了一台计算机。单片机的体积小、质量轻、价格便宜,为学习、应用和开发提供了便利条件[2]。单片机的使用领域十分广泛,如智能仪表、实时工控、通信设备、导航系统、家用电器等。在各种产品中集成单片机,能够起到使产品升级换代的作用。人们常在这些产品名称前冠以形容词——“智能型”,如智能型洗衣机等[3]。

电子钟是一种利用数字电路显示时间的计时装置。石英钟是一种利用石英振荡器所产生的振荡频率驱动时钟的3针显示秒、分、时的计时装置。电子钟与机械时钟相比,直观性为其主要特点,因非机械驱动具有更长的使用寿命,相较石英钟的石英机芯驱动,其更具准确性。它的特点可归结为“两强一弱”:电子钟比机械钟强在观看时显著,比石英钟强在走时准确,它的弱点是显时较为单调。电子钟更为方便、快捷和实用。由于电子钟的数字集成电路构成方式,使电子钟具有走时准确、性能稳定、携带方便等优点。电子钟也可用于定时自动报警、按时自动打铃、时间程序自动控制等[4]。

2 设计方案

本文设计的数字电子时钟系统需要考虑数码管的扫描复用方式。采用函数进行调用时,注意函数的参数应直接设置为小时、分钟和秒,此过程还需要设置一个参数进行闹钟模式的切换。自动显示功能需要考虑设置若干个全局变量,使其在定时中断时不断被调用,实现数据自增。另外,在LCD部分,一定要加上LCD驱动。系统的具体组成如图1所示。该数字电子钟系统可以分为主控制单元、复位电路、晶振电路、键盘电路和显示电路等。

图1 系统组成

3 各功能模块设计与实现

本设计利用KEIL5软件实现程序设计。C语言是硬件设计时常用的编程语言之一。除汇编语言外,最接近硬件的编程语言是C语言。很多操作系统软件的底层部分和驱动代码都是用C语言编写,由C语言负责将应用层用户的指令转化为具体的硬件驱动指令进行驱动。现在常见的Unix,Linux和Windows操作系统,工业控制和嵌入式领域常见的RTOS系统都是由标准的C语言开发而来。现在手机端火热的安卓系统也是在封装Linux内核的基础上,实现对底层硬件的驱动和控制。

3.1 各功能模块说明

3.1.1 晶振电路

数字电路需要各种高频率开关信号使计数器正常计数,使各种数字模块能够同步,因此,需要一个高频率电子振荡电路产生振荡信号。这个振荡电路最重要的一个元件就是晶振,它生成的振荡信号频率可以达到几兆甚至十几兆,再经过分频器或倍频器,得到各种不同的频率信号。在某些通信系统中,由于系统的基频和射频使用不同的晶振,通常通过电子调频的方式保持同步。在本文设计的电子时钟中,为了让各个部分保持同步,该电子时钟共用一个晶振,利用该晶振提供基本的时钟信号。

3.1.2 复位电路

复位电路等同于电脑的重启部分。电脑在使用中出现死机,按下重启按钮后,电脑内的程序从头开始执行。单片机也一样,单片机系统在运行中受到环境干扰程序时,按下复位按钮,内部的程序可自动从头开始执行,即把一些寄存器及存储设备恢复到出厂时的状态。

3.1.3 键盘电路

根据4×4矩阵键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。因此,键盘上按键的个数为4×4个。采用此方法设计的键盘电路结构可以大大提高电子时钟中I/O口的利用率。本文设计实现了按键控制闹钟和按键设置时间的功能。

在按键内部设置两个触点,首先将电路中的一条线路截断,然后将两个断线分别连接到按键的两个触点上。当按下按键或按下按键不放,按键内部的触点结合在一起,该条线路导通;再按下按键或者松开按键,触点释放,线路断开。

3.1.4 显示电路

采用4位共阴极数码管驱动方式,P2口连接相应的位置,即选择要显示的数码管位,P0口连接相应的位置,即显示相应的数码管段,从而负责显示时钟的时和分。

3.2 硬件系统设计

电子时钟的硬件部分主要包括控制芯片、时钟芯片、按键、显示屏等几个部分。控制芯片,也就是单片机,可以采用ST/STC/ALTER等8位单片机或者根据需求采用PCI或更高级的ARM等进行控制以及对时钟芯片的操作等。时钟芯片,采用DS12C887,DS1302等时钟芯片,通过单片机对时钟芯片进行配置、操作、读取、设置等。按键,外部按键可以对时钟芯片进行外部设置,比如设置初始时间等,按键的采集可以用并行、串行、模拟AD采集等方式。如果单片机的I/O口足够,可采用并行采集;如果I/O口有限,则可采用为不同按键分配不同阻值的电阻,挂在同一数据线上通过串行AD进行采集,再通过单片机分析采集到的电压值判断按键。显示屏可以采用点阵显示屏或者彩色TFT(8Bit/16Bit/24Bit)模拟/数字屏,如果只是一般的应用,采用一般的单行或多行点阵显示屏即可。

本文使用了Produce软件进行硬件原理图的仿真设计。主控电路采用80C51单片机。80C51单片机的内振荡电路是一种高增益逆变放大器。导线xtal1和xtal2分别是逆变器振荡放大器的输入、内部时钟工作电路的输入和逆变器振荡器的输出。本文将逆变器放大器配置为片上振荡器。由电容器进行充电,RST可以在通电后的一段时间内保持在高水平,以实现通电复位操作。通电复位是复位电路使用的主要方法。此方法不仅能使单片机复位,还能使单片机的外围设备同时复位。程序出现错误时,可以随时使电路复位。键盘电路的设计主要考虑如何实现按下同一个键时,可以执行不同的功能程序。每个键以一对多的方式对应多个功能程序。在按下某个键时,该键对应的引脚被拉低,系统进行一次扫描,返回键值,执行当下键值对应的功能程序。显示电路主要是由数码管显示数字电子钟的时和分。

3.3 软件系统设计

主函数的流程设计过程首先进行初始化设定初值,然后执行相关子程序的调用。具体流程如图2所示。

调用中断服务子程序,循环次数自增,因为定时时长为50 ms,所以循环次数为20时,循环次数清0,秒自增;秒为60时,分自增,秒清0;分为60时,时自增,分清0;时为24时,时清0,中断返回。

先确认弹簧消抖是否有键按下,接着判断扫描按键,不同的按键触发不同功能。

其中,控制闹钟的核心代码如下。

void almkozi(){

if((hour1==hour)&&(minit1==minit)&&(second<4)){

speaker=0; //闹钟时间到,蜂鸣器响

}

if(minit==0&&second<4){

//整点报时,蜂鸣器响

speaker=0;

}

if(second>4) {//控制蜂鸣器响的时长

speaker=1; //关闭蜂鸣器

}

}

数码管的核心代码如下。

void show(int){

P0=tc[h/10];

P2=0xCD;

retardation();P2=0xCE; //片选关

P0=tc[h%10]; //p0口送数据,拆数显示,时的个位

P2=0xCF; //P2.1

retardation(); P2=0xDC;

P0=tc[m/10]; //p0口送数据,拆数显示,分的十位

P2=0xDE; //P2.2

retardation();

P2=0xEF;

P0=tc[m%10]; //p0口送数据,拆数显示,分的个位

P2=0XD9; //P2.3

retardation();

P2=0xEE;

}

4 结语

本文设计的电子时钟,显示屏清晰,可显示基本的时、分和秒,还可通过按键调整时间、设置闹钟和提醒。其闹钟一天内可设置3次且音量可调节。该电子时钟功能基本齐全,能够满足人们生活的基本需求。但因为本次设计还有部分智能功能未实现,有待在后期设计和实现中进行扩展。

图2 程序总体流程

猜你喜欢

电子钟晶振数码管
两非门晶振振荡电路的设计
基于晶振的高性能时间保持方法研究
电子钟被拆之后
Arduino编程
基于STC80C51的电子钟研制
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
基于Qt的数码管数字编码系统的设计与实现
几种导致恒温晶振频率偏移的因素分析
恒温晶振环境温度特性测试系统设计