《单片机液晶构成的电子时钟毕业论文.doc》由会员分享,可在线阅读,更多相关《单片机液晶构成的电子时钟毕业论文.doc(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、毕业设计论文基于51单片机的电子时钟设计系 部: 电气工程系 专 业: 电机与电器40 / 44摘要随着单片机技术的飞速发展,在其推动下,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高。时间就是金钱、时间就是生命、时间就是胜利,准确的掌握时间和分配时间对人们来说至关重要,时钟是我们生活中必不可少的工具。电子钟的设计方法有很多种,但是基于单片机并通过LCD显示的电子时钟具有编程灵活、精确度高、便于携带、显示直观等特点。 利用STC89C52单片机对DS1302时钟芯片进行读写操作并通过1602字符液晶显示实时时钟信
2、息,这样便构成了一个单片机电子时钟。关键词:单片机,电子时钟,STC89C52ABSTRACTWith the rapid development of microcomputer technology in its promotion, modern electronics into almost all areas of society, a strong impetus to the development of social productive forces and social improvement in the level of information, but also to
3、 further improve the performance of modern electronic products.Time is a money, time is life, time is victory Accurate grasp of time and allocation of time is crucial to people, The clock is necessary in our life tools . Clock Design There are many ways, however, produced by single chip electronic c
4、lock is more flexible programming, and easy expansion of electronic capabilities, high accuracy, easy to carry, display visual and so on. In this paper, through the use of STC89C52 microcontroller by DS1302 clock chips for reading and writing operation and through 1602 character liquid crystal displ
5、ay real-time clock information so that forming a single chip electronic clock. Key Words: Microcontroller,STC89C52,Electronic clock,目录绪论1概述1研究目的1第1章设计要求与方案论证21.1 设计要求:21.2 系统基本方案选择和论证21.2.1 单片机芯片的选择方案和论证:21.2.2 显示模块选择方案和论证:21.2.3 时钟芯片的选择方案和论证:31.3 电路设计最终方案决定3第2章主要元件介绍42.1 STC89C52介绍42.1.1 STC89C52主要
6、功能与PDIP封装42.1.2 STC89C52引脚介绍42.1.3 STC89C52最小系统52.2 DS1302时钟芯片介绍722.1 DS1302概述72.2.2 DS1302引脚介绍72.2.3 DS1302使用方法72. 3 1602字符液晶介绍92.3.1 1602液晶概述92.3.2 1602引脚介绍102.3.3 1602字符液晶使用方法11第3章系统硬件设计143.1 电路设计框图143.2 系统硬件概述14第4章系统的软件设计154.1程序流程框图154.2 源程序17总结35致36绪论概述时间,对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。因此自从时
7、钟发明的那刻起,就成为人类的好朋友。随着时间的流逝,科学技术的不断发展和提高,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发出新型的时钟。高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在单片
8、机的应用系统中,时钟有两个方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机部的可编程定时器/计数器来实现;二是用专门的时钟芯片实现。研究目的通过利用STC89C52单片机和DS1302芯片以与外围的按键和LCD显示器等部件,设计一个基于单片机的电子时钟。设计的电子时钟通过液晶显示器显示,并能通过按键对时间进行设置。第1章 设计要求与方案论证1.1设计要求: 具有年、月、日、星期、时、分、秒显示功能 具备年、月、日、星期、时、分、秒校准
9、功能 具有12/24小时切换显示功能 1.2系统基本方案选择和论证1.2.1 单片机芯片的选择方案和论证:方案一: 采用STC89C52芯片作为硬件核心。STC89C52部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。方案二:采用AT89S52。AT89S52片具有8K字节程序存储空间,256字节的数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。两种单片机都完全能够满足设计需要,STC89C52相对ATS89C52价格便宜,且抗干扰能
10、力强。考虑到成本因素,因此选用STC89C52。1.2.2 显示模块选择方案和论证:方案一:采用点阵式数码管显示。点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且也相对较高,所以不用此种作为显示。方案二:采用LED数码管动态扫描。LED数码管价格便宜,对于显示数字最合适,但功耗较大,且显示容量不够,所以也不用此种方案。方案三:采用LCD液晶显示屏。液晶显示屏的显示功能强大,可显示大量文字,显示多样,清晰可见,且价格适中,所以采用了LCD数码管作为显示。1.2.3 时钟芯片的选择方案和论证:方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、
11、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以与闰年补偿的年进行计数,而且精度高,工作电压2.5V5.5V围,2.5V时耗电小于300nA.1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用STC89C52单片机作为主控制系统;采用DS1302作为时钟芯片;采用1602 LCD液晶作为显示器件。第2章 主要元件介绍2.1 STC89C52介绍2.1.1 STC89C52主要功能与PDIP
12、封装STC89C52是由宏晶科技公司生产的与工业标准MCS-51指令集和输出管脚相兼容的单片机。STC89C52主要功能如表1所示,其PDIP封装如图2所示表1:STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能2.1.2 STC89C52引脚介绍主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线
13、外接晶振引脚(2根)XTAL1(Pin19):片振荡电路的输入端XTAL2(Pin20):片振荡电路的输出端控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的外部选通,接低电平从外部程序存储器读指令,如果接高电平则从部程序存储器读指令。可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(Pin39Pin32):8
14、位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7图2:STC89C52 PDIP封装图2.1.3 STC89C52最小系统最小系统是指能进行正常工作的最简单电路。STC89C52最小应用系统电路如图3所示。它包含五个电路部分:电源电路、时钟电路、复位电路、片外程序存储器选择电路、输入/输出接口电路。其中电源电路、时钟电路、复位电路是 保证单片机系统能够正常工作的最基本的三部分电
15、路,缺一不可。电源电路 芯片引脚VCC一般接上直流稳压电源+5V,引脚GND接电源+5V的负极,电源电压围在45.5之间,可保证单片机系统能正常工作。为提高电路的抗干扰性能,通常在引角Vcc与GND之间接上一个10uF的电解电容和一个0.1uF片电容,这样可抑制杂波串扰,从而有效确保电路稳定性。时钟电路 单片机引脚18和引脚19外接晶振与电容, STC89C52芯片的工作频率可在233MHz围之间选,单片机工作频率取决于晶振XT的频率,通常选用11.0592MHz晶振。两个小电容通常取值3pF,以保证振荡器电路的稳定性与快速性。复位电路 一般若在引脚RST上保持24个工作主频周期的高电平,单片
16、机就可以完成复位,但为了保证系统可靠地复位,复位电路应使引脚RST保持10ms以上的高电平。如图复位电路带有上电自动复位功能,当电路上电时,由于C1电容两端电压值不能突变,电源+5V会通过电容向RST提供充电电流,因此在RST引脚上产生一高电平,使单片机进入复位状态。随着电容C1充电,它两端电压上升使得RST电位下降,最终使单片机退出复位状态。正常运行时,可按复位按钮对单片机复位图3:STC89C52最小系统2.2 DS1302时钟芯片介绍22.1 DS1302概述DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时
17、,具有闰年补偿功能,工作电压为2.5V5.5V。采用双电源供电(主电源和备用电源),同时提供了对后背电源进行涓细电流充电的能力。采用三线接口与CPU进行同步通信图4:DS1302封装图2.2.2 DS1302引脚介绍各引脚功能为:Vcc: 主电源;Vcc2:备用电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电;当Vcc2Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟输入端,控制数据的输入与输出I/O: 三线接口时的双向数据线 CE: 输入信号,在读、写数据期间必须为高2.2.3 DS1302使用方法(1) 时钟芯片DS1302的工作原理: DS1302在每次进行
18、读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如图5所示。表2为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,
19、在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2) DS1302的控制字节DS1302的控制字如表所示。控制字节最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始传输1RAMA4A3A2A1A0RDCKWR表2:DS1302控制字(3) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输
20、入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。其读写时序如图示图5:DS1302读写时序(4)DS1302寄存器DS1302中与时间、日期有关的寄存器共有12个,其中7个存放数据的格式为BCD码格式,其读写地址如下表所示读寄存器写寄存器Bit7Bit7Bit7Bit7Bit7Bit7Bit7Bit7围81H80HCH10秒秒00-5983H82H10分分00-5985H84H12010时时0-2324AM/PM1-1287H86H10日日1-3189H88H10月月1-128BH8AH00000周1-78DH
21、8CH10年年00-998FH8EHWP0000000表3:DS1302时钟寄存器第一行秒寄存器,CH为时钟暂停标志位,该位为1时时钟停止,该位为0时时钟运行第二行分寄存器,bit0bit6表示分钟数,因采用BCD编码,所以低四位最大能表示的数字为9,计数满向高三位进1。第三行时寄存器,12/24用来定义DS1302小时的运行模式,12小时模式下bit5为1表示PM下午,bit5为0表示AM上午第八行控制寄存器,bit7是写保护位WP,当WP为1时,写保护位可防止对任一寄存器的写操作,在任何的对时钟和RAM的写操作之前,WP位必须为0 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器
22、、时钟突发寄存器与与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。2. 3 1602字符液晶介绍2.3.1 1602液晶概述工业字符型液晶,1602是指显示的容为16*2,即能够同时显示两行,每行16个字符。常见的1602字符液晶有两种,一种显示的是绿色背光黑色字体,另一种显示
23、蓝色背光白色字体,目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全一样的。本课题所用1602液晶模块,显示屏是蓝色背光白色字体。如图6所示图6:1602字符液晶2.3.2 1602引脚介绍 编号符号引脚说明编号符号引脚说明1GND电源地2VCC电源正极3VO液晶显示对比度调节端4RS数据/命令选择端5R/W读写选择6E使能信号7D0数据口8D1数据口9D2数据口10D3数据口11D4数据口12D5数据口13D6数据口14D7数据口15BLA背光电源正16BLK背光电源负表4:1602字符液晶引脚说明各个引脚具体功能说明:第1脚:GND为地电源。第2脚:VCC接5V正电源
24、。第3脚:VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生重影,使用一个1K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:DB0DB7为8位双向数据线。第1516脚:背光灯电源。2.3.3 1602字符液晶使用方法(1)基本操作时序操作输入输出读状态RSL,RWH,EHD0D7状态字写指令RSL,RWL,D0D7指令码,E高脉冲无读数据RSH,RWH,EH
25、D0D7数据写数据RSH,RWL,D0D7数据,E高脉冲无图7:1602液晶读时序图图8:1602液晶写时序图(2)RAM1602液晶控制器芯片部带有80个8位的RAM缓冲区,其地址和屏幕的对应关系如图7示图9(3)1602字符液晶字库1602液晶模块部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 。 高位低位00000010001
26、10100010101100111101010111100110111101111XXXX00000Pp-PXXXX0001!1AQaqqXXXX0010“2BRbrXXXX0011#3CScsXXXX0100$4DTdtXXXX0101%5EUeuoXXXX0110&6FVfvXXXX01117GWgwXXXX1000(8HXhxfXXXXX1001)9IYiy-1yXXXX1010*:JZjz千XXXX1011+;Kk万XXXX1100,NnXXXX1111/?O-o第3章 系统硬件设计3.1 电路设计框图图1:硬件框图3.2 系统硬件概述本电路以STC89C52单片机最小系统为控制核心,
27、时钟电路由高精度低功耗的DS1302提供,采用三线接口与CPU进行同步通信,输入部分采用四个独立式按键S1、S2、S3、S4。1602液晶显示部分,D0D7口与单片机P0口相连。具体电路连接,详见附录1第4章 系统的软件设计4.1程序流程框图图10:主程序框图图11:按键程序图4.2 源程序#include/52单片机头文件,规定了52单片机的寄存器和IO口等#include/_nop_空指令与左右循环移位子函数库 #define uchar unsigned char/宏定义#define uint unsigned int/宏定义sbit lcden=P27;/定义下面通过lcden来操作
28、P27口,1602液晶使能控制端sbit lcdwr=P25;/定义下面通过lcdrw来操作P25口,1602读写选择端sbit lcdrs=P26;/定义选数据寄存器选指令寄存器控制端sbit sda=P34;/定义DS1302数据总线sbit rst=P35;/DS1320复位sbit sck=P36;/定义时钟总线sbit s1=P10;/定义设置按钮sbit s2=P11;/定义调时按钮sbit s3=P12;/定义确定按钮sbit s4=P13/12/24小时切换键char hour,fen,miao,ri,yue,nian,zhou,s1num,s2num,flag1,flag2;
29、/定义变量数据类型uchar code table= 20 - - ;/要写入1602液晶的数据uchar code table1= : : ;/字库中的字可直接以外加“”号的形式直接写入/*延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. delay(500);大约延时500ms*/void delay(uint z) uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); /*向1602液晶中写一个指令*/void write_(uchar )lcdwr=0;/lcdwr为读写控制端,lcdwr=0,这里可不写lcdrs=0;
30、 /液晶rs接口为0时,写指令,rs为1时写数据P0=; /将要写的指令赋给P0口,delay(5); /由1602读写操作时序图,先将指令赋给P0口,延时后将使能lcden=1; 端lcden置高,再延时一段时间,然后将lcden置低,这样指令delay(5); 就写入到LCD了lcden=0;/*向液晶写数据*/void write_data(uchar date),与写指令类似,这里lcdrs设为1lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;/*初使化1602液晶*/void init_1602()uchar num;lcdwr=0
31、;lcden=0;write_(0x38);/设置LCD为16*2显示、5*7点阵、8位数据接口模式write_(0x0c);/开显示、不显示光标write_(0x06);/写一个字符后,地址指针加1write_(0x01);/显示清0write_(0x80);/将指针指向初始位置for(num=0;num14;num+)/循环函数,用于将 20 - - 写入液晶write_data(tablenum);write_(0x80+0x40+4);/将指针指向1602液晶的第二行,第四个字段for(num=0;num8;num+)/功能与上同,用于将 : : 写入write_data(table1
32、num);/*显示时间、日期子函数*/void write_sfm(uchar add,uchar time)/用于在1602上显示年、月、日、时、分、秒。Add为显示位置,time为要显示的容uchar shi,ge;shi=time/16; /将从DS1302中读取的BCD码数据转化成10进制个位和10 ge=time%16; 进制十位write_(add+0x80);/定义显示在液晶的什么位置write_data(0x30+shi);/由1602液晶字库可知,09的数据码分别对应0x300x39write_data(0x30+ge);/初使化中设定了写一个字符后,地址指针加1,因此这里
33、不用重标写位/*显示周子函数*/void write_zhou(uchar time1),用于在1602上显示周信息,与显示 时间日期子函数类似uchar ge;ge=time1%16;/一周七天,因此只需个位write_(0x80+13);write_data(0x30+ge);/*写数据字节子函数*/void write_1302_byte(uchar temp)/用来发送8位数据信息uchar i;for(i=0;i=1;/右移一位sck=1;/在SCK上升沿的时候字节写入DS1302/*1302写数据子函数*/void write_1302(uchar addd,uchar dat)r
34、st=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_1302_byte(addd);/发送地址write_1302_byte(dat);/发送数据rst=0;/*读DS1302数据函数*/uchar read_1302(uchar add)/输入地址add,返回读取的数据uchar i,temp=0x00;rst=0;/_nop_();/_nop_();sck=0;/_nop_();/_nop_();rst=1;/_nop_();/_nop_();write_1302_byte(add);for(i=0;i=1;/右移一位_nop_();_nop_()
35、;_nop_();sck=1;rst=0;_nop_(); /以下为DS1302复位的稳定时间_nop_();rst=0;sck=0;_nop_();_nop_();_nop_();_nop_();sck=1;_nop_();_nop_();sda=0;_nop_();_nop_();sda=1;_nop_();_nop_();return(temp);/将temp值返回/*初始化DS1302子函数*/void inital_1302()write_1302(0x8e,0x00); /禁止写保护 write_1302(0x80,0x53);/秒 /以下写入初始化时间 日期:11/05/01.星
36、期: 7. 时write_1302(0x84,0x13);/时 间:23:59:55write_1302(0x82,0x43);/分write_1302(0x8c,0x11);/年write_1302(0x88,0x05);/月write_1302(0x86,0x01);/日write_1302(0x8a,07);/星期write_1302(0x8e,0x80);/开保护void keyscan()/*键盘子函数 S1功能键:在24小时显示模式下,该键被第一次按下后进入秒调整模式,再次按下后进入分调整模式,接着是调时模式、调年模式、调月模式、调日模式、调周模式,当每八次按下该键后退出S2 调整
37、键:在调整模式下,该键每按一次,相应时间或日期加1S3 确定键:在调整模式下,该键被按下后,退出调整模式,并将调整后的时间、日期写入DS1302S4 显示模式调整键 用于对时间的12/24小时模式的切换*/if(s1num=0&s4=0)/ 12/24小时切换键delay(5);if(s4=0)s2num+;while(!s4);if(s2num=1)/24小时切换成12小时int ge,shi;flag1=1;hour=read_1302(0x85);ge=hour%16;shi=hour/16;if(shi=1&ge=1&ge=3&ge=9)/13点19点hour=hour-0x12;hour=hour+0x80;hour=hour+0x20;if(shi=2&ge=0)/20点hour=0xa8;if(shi=2&ge=1)hour=0xa9;if(shi=2&ge=2)hour=0xb0;if(shi=2&ge=3)hour=0xb1;write_1302(0x8e,0x00);write_1302(0x84,hour);write_1302