当前位置:文档之家› 大学生数字电子时钟毕业论文

大学生数字电子时钟毕业论文

湄洲湾职业技术学院数字电子时钟说明书

系别:电子工程系

年级: 专业:

姓名:学号:

导师姓名:职称:

2012年 6 月 11 日

目录

1 前言 (4)

2 设计要求与方案论证 (5)

2.1 设计要求 (5)

2.2 系统基本方案选择和论证 (5)

2.2.1 单片机芯片的选择方案和论证 (5)

2.2.2 显示模块选择方案和论证 (5)

2.2.3 时钟芯片的选择方案和论证 (6)

2.3 电路设计最终方案决定 (6)

3 主要元件介绍 (7)

3.1 STC89C52介绍 (7)

3.1.1 STC89C52最小系统 (7)

3.2 DS1302时钟芯片介绍 (8)

3.2.1 DS1302概述 (8)

3.3 1602字符液晶介绍 (9)

3.3.1 1602液晶概述 (9)

4 系统硬件设计 (10)

4.1 电路设计框图 (10)

4.2 系统硬件概述 (10)

5 系统的软件设计 (10)

5.1程序概述 (10)

5.2延时函数 (11)

5.3 对DS1302读写操作函数 (12)

5.3.1 向DS1302写数据 (12)

5.3.2 从DS1302读数据 (13)

5.4 显示函数 (13)

5.4.1向1602液晶中写一个指令 (14)

5.4.2向液晶写数据 (14)

5.4.3初使化1602液晶 (14)

5.4.4 如何在液晶上显示时间、日期及周 (15)

5.5按键函数 (16)

5.5.1 12/24小时显示模式切换键 (18)

5.5.2 调整键函数 (18)

5.5.3 确定键 (18)

结束语 (19)

参考文献 (20)

致谢词 (21)

附录 (22)

1 前言

时间,对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。因此自从时钟发明的那刻起,就成为人类的好朋友。随着时间的流逝,科学技术的不断发展和提高,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发出新型的时钟。

高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在单片机的应用系统中,时钟有两个方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时器/计数器来实现;二是用专门的时钟芯片实现。

2 设计要求与方案论证

2.1设计要求

1.具有年、月、日、星期、时、分、秒显示功能;

2.具备年、月、日、星期、时、分、秒校准功能;

3.具有12/24小时切换显示功能。

2.2系统基本方案选择和论证

2.2.1 单片机芯片的选择方案和论证

方案一: 采用STC89C52芯片作为硬件核心。STC89C52内部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。

方案二:采用AT89S52。AT89S52片内具有8K字节程序存储空间,256字节的数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。

两种单片机都完全能够满足设计需要,STC89C52相对ATS89C52价格便宜,且抗干扰能力强。考虑到成本因素,因此选用STC89C52。

2.2.2 显示模块选择方案和论证

方案一:采用点阵式数码管显示。点阵式数码管是由八行八列的发光二极管组成,可用来显示数。但体积较大,且价格也相对较高,从便携实用的角度出发,不采用此种方案。

方案二:采用LED数码管动态扫描。LED数码管价格便宜,对于显示数字最合适,但功耗较大,且显示容量不够,所以也不用此种方案。

方案三:采用LCD液晶显示屏。液晶显示屏的显示功能强大,可显示大量文字,显示多样,清晰可见,且价格适中,所以采用了LCD数码管作为显示。

2.2.3 时钟芯片的选择方案和论证

方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。

方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.

2.3 电路设计最终方案决定

综上各方案所述,对此次作品的方案选定: 采用STC89C52单片机作为主控制系统;采用DS1302作为时钟芯片;采用1602 LCD液晶作为显示器件

3 主要元件介绍

3.1 STC89C52介绍

3.1.1 STC89C52最小系统

最小系统是指能进行正常工作的最简单电路。STC89C52最小应用系统电路如图2-1所示。它包含五个电路部分:电源电路、时钟电路、复位电路、片内外程序存储器选择电路、输入/输出接口电路。其中电源电路、时钟电路、复位电路是保证单片机系统能够正常工作的最基本的三部分电路,缺一不可。

1.电源电路

芯片引脚VCC一般接上直流稳压电源+5V,引脚GND接电源+5V的负极,电源电压范围在4~5.5之间,可保证单片机系统能正常工作。为提高电路的抗干扰性能,通常在引角Vcc与GND之间接上一个10uF的电解电容和一个0.1uF陶片电容,这样可抑制杂波串扰,从而有效确保电路稳定性。

2.时钟电路

单片机引脚18和引脚19外接晶振及电容, STC89C52芯片的工作频率可在2~33MHz范围之间选,单片机工作频率取决于晶振XT的频率,通常选用11.0592MHz晶振。两个小电容通常取值3pF,以保证振荡器电路的稳定性及快速性。

3.复位电路

一般若在引脚RST上保持24个工作主频周期的高电平,单片机就可以完成复位,但为了保证系统可靠地复位,复位电路应使引脚RST保持10ms以上的高电平。如图复位电路带有上电自动复位功能,当电路上电时,由于C1电容两端电压值不能突变,电源+5V会通过电容向RST提供充电电流,因此在RST引脚上产生一高电平,使单片机进入复位状态。随着电容C1充电,它两端电压上升使得RST电位下降,最终使单片机退出复位状态。正常运行时,可按复位按钮对单片机复位

图3-1 STC89C52最小系统

3.2 DS1302时钟芯片介绍 3.2.1 DS1302概述

DS1302 是美国DALLAS 公司推出的一种高性能、低功耗、带RAM 的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V ~5.5V 。采用双电源供电(主电源和备用电源),同时提供了对后背电源进行涓细电流充电的能力。采用三线接口与CPU 进行同步通信。

Vcc1X1X2CE

I/O

图3-2 DS1302封装图

3.3 1602字符液晶介绍

3.3.1 1602液晶概述

工业字符型液晶,1602是指显示的内容为16*2,能同时显示两行,每行16个字符。常见的1602字符液晶有两种,一种显示绿色背光黑色字体,另一种显示蓝色背光白色字体,目前市面上绝大多数基于HD44780液晶芯片控制,原理是完全相同的。本课题所用1602液晶模块,显示屏是蓝色背光白色字体。如图2-3所示

LCD1602

图3-3 1602字符液晶

4 系统硬件设计

4.1 电路设计框图

4.2 系统硬件概述

本电路以STC89C52单片机为控制核心,以STC89C52最小系统为基础。时钟电路由高精度低功耗的DS1302提供,采用三线接口与CPU进行同步通信,输入部分采用四个独立式按键S1、S2、S3、S4。1602液晶显示部分,D0-D7口与单片机P0口相连。具体线路连接,详见附录2

5 系统的软件设计

5.1程序概述

DS1302时钟芯片具有通电自动计时的功能。向DS1302中写入一个初值,如写入2011-05-01 00:00:00 星期日,在通电时,时间就会自动走:过60秒分加1;过60分时加1;过24小时天加1,星期日变成星期一;一周有7天,芯片内的周信息每7天一循环;芯片能够自动判断每月有多少天,5月有31天,31天后,月加1。采用DS1302时钟芯片的单片机时钟,其实质就是读取时钟芯片内的时钟信息并把它显示出来。只要时间初值正确,时钟就能一直精准的走下去。调整时间日期,实质就是向DS1302时钟芯片重新写入初值。电子时钟的主程序框图如图5-1所示

图5-1 主程序框图

5.2延时函数

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

由for循环构成的延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. delay(500);大约延时500ms。因下文多次用到,固在此先作说明。

5.3 对DS1302读写操作函数

在对DS1302时钟芯片操作前,应对其操作时序有所了解,参看前文DS1302介绍。DS1302采用串行方式与单片机进行通信,一个机器周期只能读写一个字节的一位,因此,在单片机与DS1302芯片间传输一字节(8位)数据,要分8次进行,且先从低位开始传输。

5.3.1 向DS1302写数据

/***************************写数据字节子函数**************************/

void write_1302_byte(uchar temp)//用来发送8位数据信息

{

uchar i;

for(i=0;i<8;i++)//循环8次写入数据

{

sck=0;

sda=temp&0x01;//每次传输低字节

temp>>=1;//右移一位

sck=1;//在SCK上升沿的时候字节写入DS1302

}

}

/*************************1302写数据子函数**************************/

void write_1302(uchar addd,uchar dat)

{

rst=0;

_nop_();

sck=0;

_nop_();

rst=1;

_nop_();

write_1302_byte(addd);//发送地址

write_1302_byte(dat);//发送数据

rst=0;

5.3.2 从DS1302读数据

/***************************读DS1302数据函数*************************/

uchar read_1302(uchar add)//输入地址add,返回读取的数据

{

uchar i,temp=0x00;

rst=0;

sck=0;

rst=1;

write_1302_byte(add);

for(i=0;i<8;i++)//循环8次读取

{

if(sda)

temp|=0x80;//每次传输低字节,等价于temp=temp|0x80

sck=0;

temp>>=1;//右移一位

sck=1; //sck被置高,在其下一次变为0时,数据被写入

}

rst=0;//以下为DS1302复位的稳定时间

sck=0;

sck=1;

sda=0;

sda=1;

return(temp);//将temp值返回

}

5.4 显示函数

对1602进行操作前要对其进行初使化,初使化完成后它才能正常显示。如果想在1602液晶的某一个位置显示一个内容,要先对其写入一个指令:在什么地方显示。然后再对其写入一个数据:要显示什么内容。对1602的液晶初使化,需要用写入指令的方式完成。

5.4.1向1602液晶中写一个指令

void write_com(uchar com)

{

lcdwr=0; //lcdwr为读写控制端,lcdwr=0,这里可不写

lcdrs=0; //液晶rs接口为0时,写指令,rs为1时写数据

P0=com; //将要写的指令赋给P0口,

delay(5); //由1602读写操作时序图,先将指令赋给P0口,延时后将使能

lcden=1; 端lcden置高,再延时一段时间,然后将lcden置低,这样指令

delay(5); 就写入到LCD了

lcden=0;

}

5.4.2向液晶写数据

void write_data(uchar date),与写指令类似,这里lcdrs设为1

{

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

5.4.3初使化1602液晶

此函数首先对液晶进行初使化,使其处于待命状态,然后将时钟框架显示出来:年月日之间的“-”,时分秒之间的“:”,还有世纪年的高两位。

void init_1602()

{

uchar num;

lcdwr=0;

lcden=0;

write_com(0x38);//设置LCD为16*2显示、5*7点阵、8位数据接口模式

write_com(0x0c);//开显示、不显示光标

write_com(0x06);//写一个字符后,地址指针加1

write_com(0x01);//显示清0

write_com(0x80);//将指针指向初始位置

for(num=0;num<14;num++)//循环函数,用于将" 20 - - "写入液晶

write_data(table[num]);

write_com(0x80+0x40+4);//将指针指向1602液晶的第二行,第四个字段

for(num=0;num<8;num++)//功能与上同,用于将" : : "写入

write_data(table1[num]);

}

5.4.4 如何在液晶上显示时间、日期及周

DS1302中的时间、日期等信息是以BCD码的形式存放的,要先将从1302中读取的数据转化成10进制,然后显示在液晶上相应的位置。

/***************************显示时间、日期子函数***********************/

void write_sfm(uchar add,uchar time)//用于在1602上显示年、月、日、时、分、秒。

{ Add为显示位置,time为要显示的内容

uchar shi,ge;

shi=time/16; //将从DS1302中读取的BCD码数据转化成10进制个位和10

ge=time%16; 进制十位

write_com(add+0x80);//定义显示在液晶的什么位置

write_data(0x30+shi);//由1602液晶字库可知,0~9的数据码分别对应0x30~0x39

write_data(0x30+ge); //初使化中设定了写一个字符后,地址指针加1,因此这里

} 不用重新光标定位

/**************************显示周子函数*******************************/

void write_zhou(uchar time1),用于在1602上显示周信息,与显示

{ 时间日期子函数类似

uchar ge;

ge=time1%16;//一周七天,因此只需个位

write_com(0x80+13);

write_data(0x30+ge);

}

5.5按键函数

此电子时钟共有4个按键,S1、S2、S3与调时有关图按键程序如图11,S4为12小时切换键。

S1功能键:在24小时显示模式下,该键被第一次按下后进入秒调整,液晶显示器上的时间停止走动。模式,再次按下后进入分调整模式,接着是调时模式、调年模式、调月模式、调日模式、调周模式,当第八次按下该键后退出。

S2 调整键:在调整模式下,该键每按一次,相应时间或日期加1。

S3 确定键:在调整模式下,该键被按下后,退出调整模式,并将调整后的时间、日期写入DS1302。

S4 显示模式调整键:用于对时间的12/24小时模式的切换。

图5-2 按键程序图

5.5.1 12/24小时显示模式切换键

时钟默认在24小时模式下运行,定义一个标志位flag1。第一次按下切换键,把瞬时时间转化成12小时制,令flag1=1。并写入DS1302芯片,此后DS1302芯片在12小时模式下运行。第二次按下切换键,即返回24小时显示模式,令flag1=0,把瞬时时间转化成24小时模式并写入DS1302芯片。

有关DS1302的时间寄存器存放形式参阅前文。如24小时模式下的22:00,存放的形式为00100010。12小时模式下的22点,也就是10:00PM,存放形式为10110000,在切换的一瞬间,我们只需要把小时数据0xb0写入到DS1302,这样就能让时钟芯片在12小时模式下运行了。需要注意的是,12小时模式下,只用到后5位来表示时间,第6位用来表示AM或PM信息,如果真接用24小时模式下的显示方法是会出错的,这里我们需要对时进行转化。首先提取AM/PM信息,让其显示。然后提取其后5位时间,显示时间。在主函数部分如果检测到flag1=1,就进行转换。12转24小进模式与其类似,不再赘述。if(s1num==0&&s4==0)// 设置键没被按下,且12/24小时模式切换键被按下后

5.5.2 调整键函数

每按一次此键,相应的时间或日期加1,但是时间、日期是以BCD码的形式存放在DS1302时钟芯片的,如果直接对其进行操作,如秒,假如秒的初始时间是00,它在DS1302芯片中存放的值为00000000,它的后4位代表秒的个位,在时钟芯片自动计时时,10秒后它的后四位为10时,它能自动进位,变为00010000。但是在调秒状态下按10次 S2键,我们希望秒变成00010000,实际上其值为00001010。因此我们引入X1和X2,分别代表秒的十位和个位,每按一次S2键,x2加1,每当X2为10时,X1加1,X2重新为0.这样便不会出现上面的错误了。

在调节日期的过程中,我们引入了防错机制,平年2月,你不可能调到29日,4月,你不可能调到31日。这一功能是如何实现的呢?首先判断是平年还是闰年,本时钟的年调节区间为2010年-2079年。在这一区间内,凡是能被4整除的年都是闰年,否则为平年。再判断是几月,4、6、9、11这四个月份有30天,平年2月28天,闰年2月29天,其他月份31天。正因为此,调节日期的顺序为年-月-日

5.5.3 确定键

在调时模式下,按下确写键后,把调好的时间写入DS1302时钟芯片并退出调整模式,时钟显示暂停标志位清0,时钟继续计时。

通过本次论文设计,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。功能上基本达标:时钟的显示,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷。硬件设施基本合乎要求,软件设计可以配合硬件实现其功能。

技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有更长的使用寿命等优点的电子时钟。电子时钟更具人性化,更能提高人们的生活质量,更受人们欢迎。机械时代已经远去,电子时代已经到来。做为新时代的我们,更应该提高自身能力,适应新时代的发展。知识来自实践,多从生活中探寻所需要的。

互联网成了我们生活中不可或缺的一部分,网络在本次设计中起到了很大作用,很多芯片资料,传统的纸质图书里是没有的。网络只是一个平台,正是由于大家的无私奉献,才使得它丰富多彩。

从这次的论文设计中,我真正的体会到,知识的重要性,特别是要理论联系实际,把我们所学的理论知识运用到实际生活当中,要用知识改变一切。

【1】黄正谨. 电子设计竞赛赛题解析[M]. 北京:东南大学出版社,2003.

【2】高吉祥. 电子技术基础实验与课程设计[M]. 北京:电子工业出版社,2002. 【3】王法能. 单片机原理与应用[M]. 北京:科学出版社,2004.

【4】阎石. 数字电子技术基础[M]. 北京:高等教育出版社,1998.

【5】徐江海.单片机实用教程.北京:机械工业出版社,2006.12.

【6】胡宴如.模拟电子技术.北京:高等教育出版社,2008.6.

【7】刘宁.单片机多功能时钟的设计.浙江:浙江海洋学院,2009.

【8】汪文,陈林.单片机原理及应用.湖北:华中科技大学出版社,2007.

【9】康华光.电子技术基础数字部分.北京:高等教育出版社,2008.

【10】杨欣.电子设计从零开始.北京:清华大学出版社,2005.

【11】唐勇.基于单片机的电子钟的设计.湖南:湖南工学院,2007.

【12】邢小杰.单片机电子时钟设计.中国科技博览,2009.

相关主题
文本预览
相关文档 最新文档