基于STC89C52液晶显示数字万年历设计报告

合集下载

基于89C52的电子万年历

基于89C52的电子万年历

目录1设计要求 (2)2方案论证与对比 (2)2.1液晶显示器控制方式选择 (2)2.2并行接口动态显示电路选择 (2)2.3LCD液晶显示器的接口方法选择 (3)2.4液晶显示器限流电阻选择 (4)3系统硬件电路的设计 (5)3.1主控模块AT89C52 (5)3.2显示模块电路设计 (6)4系统软件设计 (7)4.1系统软件概述 (7)4.2主要子程序设计 (8)4.2.1 时钟中断服务子程序设计 (8)4.2.2时间调整子程序设计 (9)4.2.3 判断闰年子程序设计 (9)4.2.4 精度分析分析与计算 (10)4.2.5 第一次初值的设置 (10)4.2.6 重载初值的方法 (10)5系统仿真与测试 (11)5.1系统仿真 (11)5.2功能测试 (11)6总结 (12)参考文献 (13)1设计要求本课题以AT89C52单片机为核心,设计并制作出智能LCD电子钟,具有以下基本功能:能进行时间、年份、日期、星期显示;能区分是否闰年;能检测室温并显示。

扩展功能部分可以通过控制按键使时间暂停、可以调整校正时间并通过按键切换轮流显示时间、年份、日期、星期。

2方案论证与对比2.1液晶显示器控制方式选择采用LCD液晶显示,具有超精致影像画质、十足平面显示、节省空间、节省能源等优点,但按控制方式不同,LCD可分为被动矩阵式LCD及主动矩阵式LCD两种。

可根据不同需要采用不同的方式。

方案一被动矩阵式LCD被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。

由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但成本低廉。

方案二主动矩阵式LCD目前应用比较广泛的主动矩阵式LCD,也称TFT-LCD(Thin Film Transistor-LCD,薄膜晶体管LCD)。

TFT液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。

与CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。

万年历毕业设计

万年历毕业设计

黑龙江农业经济职业学院毕业论文基于STC89C52万年历的设计姓名: X X X指导教师: X X专业: xxxxxxxxxxx班级: xxx20xx年xx月xx日目录摘要 (1)前言 (2)1. 系统基本设计思路 (3)2. 单元电路方案论证 (3)2.1控制器模块 (3)2.2计时模块 (3)2.3显示模块 (3)2.4最终方案 (4)3. 主要芯片介绍 (4)3.1STC89C52单片机 (4)3.2DS12C887时钟芯片 (5)4. 程序流程图 (6)结论 (7)参考文献 (8)致谢 (9)附录 1 原理图 (10)附录 2 主要源程序 (11)基于STC89C52万年历的设计摘要:本设计采用STC89C52单片机作为主控制器,用DS12C887时钟芯片计时、DS18B20检测温度,单片机通过时钟芯片获取时间数据、DS18B20采集温度信号,处理后把时间和温度数据通过4-16线译码器和锁存器送给15位共阴数码管同步显示年、月、日、时、分、星期和温度。

该万年历设有三个按键:S1、S2和S3键,使之具备了校时功能。

关键词:单片机,DS12C887,译码器,数码管前言随着微电子技术和超大规模集成电路技术的不断发展,家用电子产品种类日益丰富,数字显示的万年历已经越来越流行。

单片机是在集成电路芯片上集成了各种元件的微型计算机,这些元件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口电路。

由于单片机具有体积小、价格低、可靠性高、开发应用方便等特点因此在现代电子技术和工业领域应用较为广泛,在智能仪表中单片机是应用最多、最活跃的领域之一。

在控制领域中,现如今人们更注意计算机的低成本、小体积、运行的可靠性和控制的灵活性。

时钟芯片DS12C887自带晶振和电池,计时精度高,在没有外部电源的情况下可工作10年,可计算2100年前的年,月,日,时,分,秒,星期七种日历信息,并带有闰年补偿功能。

基于89C52单片机和DS1302的万年历设计

基于89C52单片机和DS1302的万年历设计

基于89C52单片机和DS1302的万年历设计摘要古人依靠日冕、漏刻记录时间,而随着现代科技的发展,电子万年历已经成为日渐流行的日常计时工具。

本文研究的万年历系统拟用STC89C52单片机控制,以DS1302时钟芯片计时、1602液晶屏显示。

系统主要由单片机控制电路,显示电路以及校正电路三个模块组成。

本文阐述了系统的硬件工作原理,所应用的各个接口模块的功能以及其工作过程,论证了设计方案理论的可行性。

系统程序采用C语言编写,经Keil软件进行调试后在Proteus软件中进行仿真测试,可以显示年、月、日、星期、时、分、秒,并具有校准功能和与即时时间同步的功能。

实验结果表明此万年历实现后具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

关键词:万年历单片机DS1302 lcd1602目录第一章前言............................................................................................. 错误!未定义书签。

1.1引言(课题研究的意义) (1)1.2本课题主要的研究工作 (1)1.2.1研究内容 (1)1.2.2论文章节安排 (2)1.3本章小结 (2)第二章单片机的概述 (3)2.1单片机的定义和特点 (3)2.1.1单片机的定义 (3)2.1.2单片机的特点 (3)2.2单片机的发展现状和趋势 (3)2.3编程语言的选择 (4)2.4本章小结 (4)第三章设计要求和方案论证 (5)3.1设计要求 (5)3.2单片机芯片的选择方案和论证 (5)3.3显示模块选择方案和论证 (5)3.4时钟芯片的选择方案和论证 (6)3.5电路设计最终方案决定 (6)3.6本章小结 (6)第四章系统的硬件设计与实现 (7)4.1电路设计框图 (7)4.2系统硬件概述 (7)4.3主要单元电路的设计 (7)4.3.1 STC89C52单片机简介 (7)4.3.2单片机主控制模块的设计 (10)4.3.3时钟电路模块的设计 (11)4.3.4独立式键盘设计 (13)4.3.5显示模块的设计 (13)4.4本章小结 (15)第五章系统的软件设计 (16)5.1程序流程图 (16)5.1.1系统总流程图 (16)5.1.2时钟程序流程图 (16)5.1.3液晶显示程序流程图 (17)5.2程序的设计 (18)5.2.1读写DS1302程序 (18)5.2.2液晶显示程序 (19)5.3本章小结 (19)第六章结束语 (20)致谢词 (21)参考文献 (22)附录一:系统电路图 (23)附录二:系统程序 (24)第一章前言1.1引言(课题研究的意义)万年历是我国古代传说中最古老的一部太阳历。

基于STC89C52液晶显示数字万年历设计报告

基于STC89C52液晶显示数字万年历设计报告

西安邮电学院开放实验设计报告系部名称电子与信息工程系学生姓名专业名称电子与信息工程班级实习时间基于STC89C52液晶显示数字万年历1.引言在51单片机应用系统中,常常需要记录实时的时间信息。

比如,在数据采集时,对默写重要的事件常常需要记录下准确的发生事件;又比如在银行营业大厅中使用的利率或汇率显示屏,上面除了显示利率或者汇率等数据外,还需要显示实时的时间信息,其中包括年,月,日,星期,时间等。

下面我们利用STC89C52和液晶显示器LCD1602和实时时钟芯片DS1302来实现实时时钟并利用液晶显示器进行显示。

1. 单片机STC89C52STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,STC89C52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8 位微控制器8K字节在系统可编程Flash。

2. 实时时钟芯片DS1302DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

基于STC89C52的闹铃万年历设计

基于STC89C52的闹铃万年历设计

目录前言 (3)第1章概述 (4)第1.1节单片机设计电子时钟的背景 (4)第1.2节本设计任务及要求 (4)第2章系统功能及总体结构 (5)第2.1节工作原理 (5)第2.2节总体方框图 (5)第2.3节方案论证比较 (5)第3章硬件电路设计 (9)第3.1节系统所需的硬件介绍 (9)第3.2节系统硬件设计 (15)第4章软件设计 (16)第4.1节软件设计概述 (16)第4.2节显示程序设计 (16)第4.3节时钟程序设计 (16)第5章系统测试 (18)第5.1节系统的调试 (18)第5.2节数据测试 (18)第5.3节误差分析 (18)结论 (20)参考文献 (21)致谢............................................ 错误!未定义书签。

附录 (23)附录1:实物照片说明 (23)附录2:部分源程序 (23)【摘要】:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,在生活和生产的各领域中,凡是有时间显示和控制要求的地方都会有单片机的身影出现,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,因此本次设计则采用单片机为核心来实现对以时间显示和记录提示的闹铃万年历设计。

本次设计的闹铃万年历的电路,具有三大功能、分别表示小时时间显示,年月日时间显示,时间记录提示功能,试验中用数码管显示,蜂鸣器模拟语音提示。

基于题目基本要求,本系统对功能设置、数据装入和定时设定功能进行了重点设计。

此外,扩展了掉电记忆、万年历显示、LED状态指示等。

该系统设计采用以单片机AT89S52为核心,结合数码管显示以及必要的外围电路,通过功能设置和数据输入,完成不同功能下的显示。

在发挥部分,该系统还添加了万年历的功能,使得用户可以随时知道当前的时间;当设定时间达到时,会发出蜂鸣提示。

测试表明,该系统具有操作简单,控制精确,更加人性化等特点。

数字万年历课程设计报告

数字万年历课程设计报告

数字万年历课程设计报告课程名称:微机原理课程设计题目:万年历摘要随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

由其是单片机技术的应用产品已经走进了千家万户。

电子万年历的出现给人们的生活带来的诸多方便。

本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。

本设计以数字集成电路技术为基础,单片机技术为核心。

本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。

本设计是一种基于STC89C51单片机控制,DS1302报时的数字时钟设计。

它具有多项显示和控制功能。

能用LCD实时显示当前年、月、日、星期、时间;可对时间进行调整;具有调整时间和日期功能。

本设计通过一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。

系统由主控制器AT89C51、时钟电路DS1302、显示电路、按键电路和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。

关键词:STC89C52单片机、LCD液晶显示、DS1302时钟芯片目录一、设计任务与要求 ........................................................................... - 6 -1.1 设计任务 .............................................................................................. - 6 -1.2 设计要求 .............................................................................................. - 6 -1.3 发挥部分 .............................................................................................. - 6 -二、方案总体设计 ..................................................................................... - 7 -2.1 显示部分 .............................................................................................. - 7 -2.2 时钟信号的选择 .................................................................................. - 8 -2.3 总体方案 .............................................................................................. - 8 -三、硬件设计 ..................................................................................... - 10 -3.1 单片机最小系统 ................................................................................ - 10 -3.2 DS1302时钟电路............................................................................... - 17 -3.3 LCD液晶显示模块............................................................................ - 19 -3.4 按键电路 ............................................................................................ - 21 -3.5 电源指示灯部分 ................................................................................ - 25 -四、软件设计 ..................................................................................... - 26 -4.1 主程序流程图显示 ............................................................................ - 26 -4.2 时间设定程序流程图 ........................................................................ - 27 -五、系统仿真与调试 ......................................................................... - 29 -5.1 Proteus仿真软件简介 ....................................................................... - 29 -5.2 仿真及实物 ........................................................................................ - 31 -六、设计总结 ..................................................................................... - 34 -七、参考文献 ..................................................................................... - 35 -一、设计任务与要求1.1 设计任务基于52单片机的DS1302万年历;1.2 设计要求基于52单片机,利用DS1302时钟芯片生成万年历,使用液晶显示年月日时分秒,显示值可通过按键修改。

stc89c52 lcd1602 数字万年历

stc89c52 lcd1602 数字万年历

#include <REG52.H>#include <INTRINS.H> //库函数头文件,代码中引用了_nop_()函数// 定义控制信号端口sbit RS=P2^4; //P2.4sbit RW=P2^5; //P2.5sbit E=P2^6; //P2.6sbit set=P3^4; //设置键sbit enter=P3^5; //确认键sbit add1=P3^6; //加1键sbit sub1=P3^7; //减1键bit k=0,f=0;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示char sec,min,hour,week,day,month,year,n,m;unsigned char count,key;unsigned char lcdd[]="0123456789";/*声明调用函数*/void dispd(); //日期显示函数void dispt(); //时间显示函数unsigned char keys();//按键扫描函数void lcd_w_cmd(unsigned char com); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数void delay1(); //软件实现延时函数,5个机器周期/*主函数*/void main(){TMOD=0x01; //设置为定时器模式1TH0=0x3c; //晶振6MHz,定时时间100msTL0=0xb0;IE=0x82; //开全局中断和定时中断TR0=1; //启动定时器sec=0; //秒min=0; //分hour=0; //时week=0; //星期day=1; //日month=1; //月year=0; //年count=0; //中断次数清0n=-3; //设置键按下次数,第一行日期m=-3; //设置键按下次数,第二行时间 P0=0xff; // 送全1到P0口int1(); // 初始化LCDdelay(255);while(1){key=keys(); //读取按键switch(key){case 0xe0: //按下设置键{TR0=0;k=1;if(f==0){n=n+3;if(n==9){n=0;m=0;f=1;}}else{m=m+3;if(m==12){m=0;n=0;f=0;}}if(f==0){lcd_w_cmd(0x0d);lcd_w_cmd(0x86+n);}else{lcd_w_cmd(0x0d);lcd_w_cmd(0xc4+m);}} break;case 0xd0: //按下确认键{k=0;TR0=1;n=-3;m=-3;f=0;} break;case 0xb0: //按下加1键{if(k==1){if(f==0){if(n==0){year++;if(year==100) year=0;}else if(n==3) {month++;if(month==13) month=1;}else {day++;if(day==32) day=1;}dispd(); //调用第一行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0x86+n);//返回设置值显示地址 }else{if(m==0){hour++;if(hour==24) hour=0;}else if(m==3) {min++;if(min==60) min=0;}else if(m==6){sec++;if(sec==60) sec=0;}else {week++;if(week==7) week=0;}dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址 }}} break;case 0x70: //按下减1键{if(k==1){if(f==0){if(n==0){year--;if(year<0) year=99;}else if(n==3) {month--;if(month==0) month=12;}else {day--;if(day==0) day=31;}dispd(); //调用第一行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0x86+n);//返回设置值显示地址}else{if(m==0){hour--;if(hour<0) hour=23;}else if(m==3) {min--;if(min<0) min=59;}else if(m==6){sec--;if(sec<0) sec=59;}else {week--;if(week<0) week=6;}dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;}if(k==0) {dispd();dispt();} //调用LCD显示函数}}/*延时函数*/void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<20;j++);}/*延时函数1*/void delay1(){_nop_();_nop_();_nop_();}/*LCD初始化函数*/void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0c); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}/*LCD读状态函数*///返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;RW=1; //RW=1,RS=0,读LCD状态delay1();RS=0;delay1();E=1; //E端时序delay1();s=P0; //从LCD的数据口读状态delay1();E=0;delay1();RW=0;delay1();return(s); //返回读取的LCD状态字}/*LCD写命令函数*/void lcd_w_cmd(unsigned char com){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; // RW=0,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();P0=com; //将com中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*LCD写数据函数*/void lcd_w_dat(unsigned char dat){unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环 RW=0;delay1();RS=1; // RW=1,RS=0,写LCD数据delay1();E=1; // E端时序delay1();P0=dat; // 将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*****定时中断函数*****/void timer0() interrupt 1{TH0=0x3c;TL0=0xb0;count++;if(count==10){count=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;week++;day++;if(week==7) week=0;if(day==29&&month==2&&year%4!=0) {day=1;month++;}else if(day==30&&month==2&&year%4==0) {day=1;month++;}else if(day==31&&(month==4||month==6||month==9||month==11)) {day=1;month++;}elseif(day==32&&(month==1||month==3||month==5||month==7||month==8||month= =10||month==12)) {day=1;month++;}if(month==13){month=1;year++;if(year==100) year=0;}}}}}}/*按键扫描函数*/unsigned char keys(){unsigned char cod,del;P3=0xf0;cod=P3&0xf0; //读入P3口键值if(cod!=0xf0) //先检测有无按键按下{delay(100); //去抖if(cod!=0xf0){cod=P3&0xf0; //读入键值do //等待键释放{P3=0xf0;del=P3&0xf0;}while(del!=0xf0);return(cod);//返回键值}}return(0xf0); //返回该值}/*第一行显示日期函数*/void dispd(){lcd_w_cmd(0x0c); //设置光标不显示、不闪烁delay(20);lcd_w_cmd(0x83); //第一行起始显示地址0x80+0x03 delay(20);lcd_w_dat('2');delay(2);lcd_w_dat('0');delay(2);lcd_w_dat(lcdd[year/10]);delay(2);lcd_w_dat(lcdd[year%10]);delay(2);lcd_w_dat('-');delay(2);lcd_w_dat(lcdd[month/10]);delay(2);lcd_w_dat(lcdd[month%10]);delay(2);lcd_w_dat('-');delay(2);lcd_w_dat(lcdd[day/10]);delay(2);lcd_w_dat(lcdd[day%10]);delay(2);}/*第二行显示时间、星期函数*/void dispt(){lcd_w_cmd(0x0c); //设置光标不显示、不闪烁delay(20);lcd_w_cmd(0xc3); //第二行起始显示地址0x80+0x43 delay(20);lcd_w_dat(lcdd[hour/10]);delay(2);lcd_w_dat(lcdd[hour%10]);delay(2);lcd_w_dat(':');delay(2);lcd_w_dat(lcdd[min/10]); delay(2);lcd_w_dat(lcdd[min%10]); delay(2);lcd_w_dat(':');delay(2);lcd_w_dat(lcdd[sec/10]); delay(2);lcd_w_dat(lcdd[sec%10]); delay(2);lcd_w_dat(' ');delay(2);lcd_w_dat('W');delay(2);lcd_w_dat(lcdd[week]); delay(2);}。

基于STC89C52的万年历程序

基于STC89C52的万年历程序
P0=*min_h;
delay();
SMG_S=1;
P0=0xff;
SMG_G=0;
P0=*min_l;
delay();
SMG_G=1;
P0=0xff;
}
void output_s()
{ //秒表显示秒,毫秒
sbit KEY1=P3^7; //时间设置
sbit KEY2=P3^6; //时间调整
sbit KEY3=P3^5; //退出键
} SPK=0;
while(!KEY2);
SPK=1;
}
}
}
if(KEY3==0)
{
delay_10ms(); //防抖延时
if(KEY3==0)
{ SPK=0;
}
int ch_time() //调整时间,(修改时间 )
{
P1=0XFF; //关闭数码管
P0=0xFF;
hour_h=&tab[0]; //分别保存四位数码管数据,初始化数码管初值
{
delay_10ms(); //防抖延时
if(KEY2==0)
{
hour_h++;
if(hour_h==&tab[10])
{
hour_h=&tab[0];
}SPK=0;
while(!KEY2);
uchar data *min_h_s,*min_l_s,*sec_h_s,*sec_l_s,*ms_h_s,*ms_l_s; //存储秒表
void delay();
void delay_10ms(); //函数声明
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。
2.实时时钟芯片DS1302
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。带有IIC总线接口,便于同单片机进行通信。外接32.768KHZ晶振,可实现年误差小于2分钟。
西安邮电学院
开放实验设计报告
系部名称
电子与信息工程系
学生姓名
专业名称
电子与信息工程
班级
实习时间
基于STC89C52液晶显示数字万年历
1.引言
在51单片机应用系统中,常常需要记录实时的时间信息。比如,在数据采集时,对默写重要的事件常常需要记录下准确的发生事件;又比如在银行营业大厅中使用的利率或汇率显示屏,上面除了显示利率或者汇率等数据外,还需要显示实时的时间信息,其中包括年,月,日,星期,时间等。
器。日历、时间寄存器及控制字如表1所示:
寄存器名称
7
6
5
4
3
2
1
0
1
RAM/CK
A4
A3
A2
A1
A0
RD/W
秒寄存器
1
0
0
0
0
0
0
分寄存器
1
0
0
0
0
0
1
小时寄存器
1
0
0
0
0
1
0
日寄存器
1
0
0
0
0
1
1
月寄存器
1
0
0
0
1
0
0
星期寄存器
1
0
0
0
1
0
1
年寄存器
1
0
0
0
1
1
0
写保护寄存器
1
0
0
0
1
1
1
慢充电寄存器
10YEAR
YEAR
表2:DS14302内部主要寄存器分布表
4.DS1302与MCU的连接
DS1302与CPU的连接采用IIC总线协议,即SCLK、I/O、RST。由于STC89C52无IIC总线,所以采用软件模拟IIC总线连接DS1302。
其SCLK、I/O、RST分别接单片机P1.6,P1.4,P1.5引脚。如图所示:
5.DS1302的读写
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。
3.DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字如下。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作。
3.液晶显示模块LCD 1602
LCD1602液晶显示模块是由字符型液晶显示屏(LCD),控制驱动主电路HD44780及其扩展驱动电路HD44100或与其兼容的IC,少量阻,容元件,结构件等装配在PCB板上而成。它可以显示2行字符,每行16个字符。
2.所用硬件和软件系统的介绍,实施方案
数字时钟芯片DS1302
下面我们利用STC89C52和液晶显示器LCD1602和实时时钟芯片DS1302来实现实时时钟并利用液晶显示器进行显示。
1.单片机STC89C52
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash。
1
0
0
1Байду номын сангаас
0
0
0
时钟突发寄存器
1
0
1
1
1
1
1
表1:日历、时钟寄存器与控制字对照表
最后一位RD/W为“0”时表示进行写操作,为“1”时表示读操作。
DS1302内部寄存器列表如表2所示:
寄存器名称
命令字
取值范围
各位内容


7
6
5
4
3
2
1
0
秒寄存器
80H
81H
00-59
CH
10SEC
SEC
分寄存器
82H
83H
00-59
0
10MIN
MIN
小时寄存器
84H
85H
01-12或00-23
12/24
0
A
HR
HR
日期寄存器
86H
87H
01-28,29,30,31
0
0
10DATE
DATE
月份寄存器
88H
89H
01-12
0
0
0
10M
MONTH
周寄存器
8AH
8BH
01-07
0
0
0
0
0
DAY
年份寄存器
8CH
8DH
00-99
1.数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
2.DS1302的控制字节
DS1302的控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
相关文档
最新文档