简易时钟电路的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易时钟电路的设计与实现
摘要:本文介绍了一种基于AT89S52单片机的简易数码管时钟的电路设计方案,包括了硬软件的设计细节。
设计中主要由控制模块、显示模块和输入模块组成。
由单片机的I/O口直接驱动这显示和输入模块。
该设计简单易操作,对于初步单片机开发有一定的意义。
关键词:单片机数码管时钟
随着社会的进步及科技的发展,如今的社会已经是智能化的社会。
单片机作为自动化的重要元素,它的功能得到了不断的完善。
现在单片机已经在许多领域占有一席之地,电子电器、工业设备、航空航天、军事通信等领域都可看到它的身影。
1 时钟总体设计方案
LED数码管采用24h计时、显示模块由六位数码管组成,分别显示时十位、时个位、分十位、分个位、秒十位、秒个位;输入模块由四个按键组成,分别控制设置/启动、时/分、上调、下降;控制模块由AT89S52单片机作为核心控制,采用11.059MHz晶振。
2 硬件设计
时钟电路原理如图1所示。
2.1 控制模块
控制模块由单片机、复位电路和时钟电路组成最小系统。
AT89S52是一种低功耗、高性能CMOS8位微控制器,8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
2.2 显示模块
显示模块采用8个共阳极动态显示LED数码管,LED数码的段码信号和片选信号由单片机的P0、P2口加上NPN放大后进行驱动。
2.3 输入模块
输入模块由四个按键组成。
按键直接接在四条I/O线上,另一端接地。
在按键没有按下时,输入为高电平。
3 软件设计
软件的设计采用模块化的方式,根据各个功能,将程序分成几个模块,通过主程序将各个模块衔接起来。
3.1 计时模块
AT89S52单片机有3个定时器/计数器,这里只需用到定时器T0。
定时器T0工作在16位定时器状态,在方式1的工作模式下。
为了便
于一个定时器多用途,将其初值设为1ms,则晶振为11.0592时,定时器TH0为:0XFC,TL0为:0X66。
利用定时器中断,每当T0溢出1000次,则时钟增加1秒。
按此方法,具体程序如下:
void time(){
if(t1s>=1000)//控制时间
{ t1s=0;miao++;
str[0]=miao%10; str[1]=miao/10;
if(miao==60)
{ miao=0; fen++;}
if(miao%2){
str[2]=str[5]=11;
}else{str[2]=str[5]=10; }
str[3]=fen%10;str[4]=fen/10;
if(fen==60)
{ fen=0;shi=(shi+1)%24;}
str[6]=shi%10;str[7]=shi/10;} }
3.2 显示模块
显示采用动态显示的方式,利用P2口高电平依次选中8个LED 数码管,每选中一片后,P0口传出相应的段码。
定义数组M7G[11],用于存放0~9个数字以及“-”、灭的段码。
定义数组str[8],用于存放每个相应的LED数码管需要显示的数值。
void display(){
unsigned char i;
for(i=0;i<8;i++){
P2=0X01<<i;P0=M7G[str[i]];
delay();P2=0XFF;P0=0XFF;}}
3.3 输入模块
用于调整时间。
当第一次按下“设置/启动”键时,默认设定分的模式;按下“分/时”键在设定时的模式,再按一次“分/时”键则回到设定分的模式,以此来选择分、时模式;按“+”、“-”键可以上下调整选定的模式的值;第二次按下“设置/启动”键,时钟在设定的值的基础上正常运行。
使用变量read_tmp来进行键盘抖动处理。
void set(){
if(SB1==0)
{ flag=~flag; t ime=0;}
if(flag==1) { shanshuo();
if(SB2==0)
{time=~time; }
else if (SB3==0)
{ if(time==0) fen=(fen+1)%60;
else shi=(shi+1)%24; }
else if (SB4==0)
{ if (time==0)
{ if (fen==0) f en=59;
else fen=(fen-1)%60; }
else
{ if (shi==0) shi=23;
else shi=(shi-1)%24;} } } }
4 结语
将程序编译生成hex文件烧录到单片机中,进行电路的调试。
电子时钟可以正常进行。
该电子时钟设计简单、成本低廉。
但是也存在的以下几个问题需要后续改进:(1)电子时钟采用的是单片机内部的晶振进行时间控制,但是这样的时间不是很精确。
(2)时钟的时、分、秒之间采用来的“-”来进行隔离,不是很美观,应该采用“:”进行分隔;(3)存在按键防抖问题,可以在中断中添加延时5~10ms解决该问题。
参考文献
[1] 王静霞.单片机应用技术(C语言版)[M].北京:电子工艺出版社,2009.
[2] 彭伟.单片机C语言程序设计实训100例:基于8051+Proteus 仿真[M].北京:电子工艺出版社,2009.
[3] 梁建华.基于AT89S51单片机的数码管时钟电路的设计与实现[J].吉林广播电视大学学报,2012(4):26-27.。