基于STC89C52液晶显示数字万年历设计报告
基于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的万年历设计摘要古人依靠日冕、漏刻记录时间,而随着现代科技的发展,电子万年历已经成为日渐流行的日常计时工具。
本文研究的万年历系统拟用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液晶显示数字万年历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的闹铃万年历设计
目录前言 (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 数字万年历
#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的万年历程序
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(); //函数声明
基于STC89C52万年历的仿真与设计
基于STC89C52万年历的仿真与设计郭占苗【期刊名称】《微型电脑应用》【年(卷),期】2017(33)2【摘要】Based on STC89C52,the paper designs a permanent calendar system which can display time,date,week and temperature.DS1302 is a kind of permanent calendar chip that can reckon time,including of seconds,minutes,hours,year,month,day week and so on.Besides,theDS18B20 has the function of temperature acquisition.There are four buttons in the permanent calendar system besides the reset button,one could add or subtract time,set alarm and buzzer warning by operating the buttons.All the phenomena can be real-time displayed and achieved human-computer interaction function via the LCD 1602.The author has written the C program by using the Keil software,simulated circuit diagram to reduce the blindness of welding by Proteus,and made physical circuit realize the integration of design,simulation and production.The design realizes the combination of theory and practice of practical significance.%基于STC89C52设计一款具有时间、星期、年月日和温度显示的万年历,主要由DS1302实现时分秒、年月日和星期的计时功能,DS18B20实现温度采集功能,该万年历除复位按键外,还设置有4个按键,可以对时间进行“加"“减”设置,同时还具备定时功能,定时时间到则蜂鸣器报警,在LCD1602液晶屏上进行实时显示,实现人机交互.利用Keil软件编写C程序,通过Proteus仿真以减少焊接盲目性,最后进行实物电路制作,实现设计、仿真与制作的一体化,具有理论与实践结合的现实意义.【总页数】5页(P30-34)【作者】郭占苗【作者单位】西安航空职业技术学院电子工程学院,西安710089【正文语种】中文【中图分类】TP399【相关文献】1.Proteus仿真设计基于单片机AT89C51的电子万年历 [J], 王怀平;王仁波;胡开明2.基于单片机和12864LCD模块的万年历设计与仿真 [J], 陈红;李玮3.基于STC89C52多功能体育用计时器的仿真与设计 [J], 谭艳春;朱又敏4.基于STC89C52多功能体育用计时器的仿真与设计 [J], 谭艳春; 朱又敏5.基于AT89C51单片机的万年历设计与Proteus仿真 [J], 王来志; 王小平因版权原因,仅展示原文概要,查看原文内容请购买。
AT89C52的电子万年历课程设计报告
基于89c52多功能万年历设计报告班级:电子信息工程2班学院:电子信息工程学号:**********姓名:***一、设计任务:设计一个具有多功能的电子万年历。
二、基本要求:1、能够显示阳历年、月、日、星期、小时、分、显示模块采用LCD液晶显示,要求能用按键调整时间。
2、能显示阴历月、日3、具有定时报警功能,能够进行整点语音报时。
4、具有闹钟设定的功能。
发挥部分:1、掉电存储功能,可存储掉电前用户定时设置。
2、具有日程管理,可以设定指定日期的日程,可以设置日成的提醒时间,并可用语音进行提示。
三、方案设计与论证方案一:按照系统设计的功能的要求,初步确定系统由主控模块、时钟模块、显示模块、语音模块各键盘接口模块共5个模块组成,电路系统构成框图如图1所示。
主控芯片使用52系列AT89C52单片机,时钟芯片使用美国DALLAS公司推出的一款高性能、低功耗、带RAM的实时时钟DS1302。
采用DS1302作为计时芯片,可以做到计时准确。
更重要的是,DS1302可以在很小电流的后备电源(2.5V--5.5V 电源,在2。
5V时耗电小于300nA)下继续计时,而且DS1302可以编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本功不耗电。
显图1 电子万年历电路系统构成框图方案二:按照系统设计的要求和功能,将系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,语音模块,电源电路、复位电路、晶振电路几个模块,系统框图如图2所示。
主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间和设定闹钟,显示模块采用LCD12864,时钟电路模块采用DS1302实时时钟实现对时间,日期的操作。
图2 基于AT89C52单片机的电子万年历系统框图方案三:按照系统设计的要求和功能,将系统分为主控制器模块、显示模块、按键开关模块、蜂鸣器电路模块。
系统框图如图3所示,主控制模块采用AT89C52单片机为控制中心,显示模块采用液晶LCD12864显示,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。
基于STC89C52单片机的多功能电子万年历
摘要本文介绍了基于STC89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法。
本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。
系统以STC89C52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。
温度采集选用DS18B20芯片,万年历采用直观的数字显示,数据显示采用1602A液晶显示模块,可以在LCD上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。
此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。
关键字:万年历温度计液晶显示ABSTRACTThis paper introduces the based on STC89C52 multi-function electronic calendar of the hardware structure and software and hardware design method. This design by data display module, temperature acquisition module, time processing module and set module four modules. With STC89C52 single-chip microcomputer system for the controller to serial clock calendar chip DS1302 record calendar and time, it can be to date and time, minutes and seconds for the time, also has a leap year compensation and other functions. Temperature gathering choose DS18B20 chip, calendar by using object digital display, data showed that the 1602 A liquid crystal display module, can be in the LCD shows at the same time year, month, day, Sunday, when, minutes and seconds, still have time calibration etc. Function. This calendar has read the convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages, has a broad market prospect.Key words:Perpetual Calendar thermometer LCD display目录摘要 (I)ABSTRACT (II)前言....................................................................................................................... I V 1 绪论 .. 01.1 课题研究的背景 01.2课题的研究目的与意义 01.3课题解决的主要内容 02 系统的方案设计与论证 (1)2.1单片机芯片设计与论证 (2)2.2按键控制模块设计与论证 (2)2.3时钟模块设计与论证 (2)2.4温度采集模块设计与论证 (3)2.5显示模块模块设计与论证 (3)3 系统硬件的设计 (4)3.1 STC89C52单片机 (4)3.2时钟芯片DS1302接口设计与性能分析 (7)3.3温度芯片DS18B20接口设计与性能分析 (10)3.4 LCD显示模块 (15)3.5按键模块设计 (16)3.6复位电路的设计 (17)4 系统的软件设计 (19)4.1主程序流程图的设计 (19)4.2 程序设计 (21)5 系统的机体设计 (27)5.1系统的模块组成 (27)5.2 功能实现 (27)结论 (29)参考文献 (30)致谢 (31)附录 (32)前言随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
基于STC89C52RC万年历毕业设计
基于STC89C52RC万年历毕业设计目录第一章前言 (1)1.1 引言 (2)1.2功能要求 (3)第二章系统硬件电路的设计 (6)2.1电路设计 (6)2.2系统硬件概述 (7)第三章系统软件设计 (11)3.1程序设计 (11)3.2程序流程图 (12)结论 (15)致谢 (16)参考文献 (17)附录(主程序源代码) (18)第一章前言随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。
二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。
第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。
第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。
第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指标计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步……我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。
商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。
本设计为软件,硬件相结合的一组设计。
在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。
基本的要了解一些主要器件的基本功能和作用。
除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC89系列单片机制成电子控制电路,采用软件和硬件结合的方法,控制LCD液晶显示,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。
51单片机,万年历设计报告
摘要:本次数字电子钟课程设计采用stc公司的stc89c52为基本芯片,外配以11.0592MHZ的晶振作为时钟电路,按键与电阻电容组成的复位电路,通过程序下载软件与数字钟硬件连接,实现24小时的时,分,秒计时系统。
该电子万年历设置3个按键,实现对年,月,日时,分,秒加一减一以及确定的作用。
在具体数码显示中能够实现自动记时,手动调时,满位自动清0的作用。
关键词数字万年历;STC89C52;硬件设计;软件设计设计任务与要求:1、电子时钟显示用LED 数码八段管显示,由左向右分别为:年、月、日、时、分、秒,比如:2011 07 13 23-20-40 表示2011年7月13日23时20分40秒;2、按下按键实现切换位进行闪烁调时,按下按键实现位加一,按下另外的按键实现位减一;系统整体设计方案比较与选择:本系统共分为两个模块:一个是单片机最小系统;另外一个是显示和按键的拓展模块;方案一:键盘输入使用独立式键盘,(由于键盘数量仅仅只有三个,太多了浪费),八段管采用共阳极数码管动态扫描,使用芯片译码;方案二:键盘使用矩阵式键盘;八段管采用动态显示,不通过芯片译码;方案分析:方案一显然可操作性较强;程序也较为简单,而我们采用的是方案二,因为因为之前做其他实验的时候已经做好了显示模块,和按键模块,为了节约成本和提高程序的难度,因而选择方案二。
设计与论证:本设计的程序设计需要考虑两个方面:第一,时钟,时钟进位是秒分各为60进制,小时为24进制,第二,日期,小时与日期的关系是24小时为一天,每个月的天数又有说不同,1,3,5,7,8,10,12为大月,每月有31天,2月得看润年与否,闰年有29天,非闰年有28天,其他月份为小月30天。
要考虑到时钟自己走的时候和时钟在调整的过程中所遇到的极限值的问题,即在调整到最后一个数字的时候能根据各种情况来调整。
电路设计:本设计采用最小的系统板和八段数码管显示模块,以及矩阵按键模块,整体设计框图如下:显示模块原理图:显示模块的PCB图:。
基于STC89C52液晶显示数字万年历设计报告
寄存器名称
7
6
5
4
3
21Biblioteka 01RAM/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
慢充电寄存器
5.DS1302的读写
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。
下面我们利用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。
基于STC89C52的多功能万年历课程设计
信息与通信工程学院作品名称负责人:任霞专业班级:通信122成员:任霞马木提亚库普李宗卿指导教师:杨亚宁完成日期:2014年11 月7 日目录目录 (1)一、设计任务和要求 (1)1.1设计任务 (1)1.2性能指标 (1)二、设计方案及原理 (2)2.1方案一 ................................................................................. 错误!未定义书签。
2.2方案二 ................................................................................. 错误!未定义书签。
2.3本设计采用方案及原理 ..................................................... 错误!未定义书签。
三、系统硬件设计 (3)3.1单片机最小系统设计 (4)3.2温度电路 (4)3.3时钟电路 (5)3.4显示电路 (6)3.5按键电路 (6)3.6闹钟电路 (6)四.系统软件设计 (10)4.1主程序设计 (10)4.2温度部分程序设计 (11)4.3时钟部分程序设计 ............................................................. 错误!未定义书签。
4.4键盘部分程序设计.............................................................. 错误!未定义书签。
4.5显示部分程序设计.............................................................. 错误!未定义书签。
4.6闹钟部分程序设计.............................................................. 错误!未定义书签。
基于单片机的万年历设计
基于单片机的万年历设计二、实验要求设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。
此外还可以通过按键进行闹钟设置以及事件提醒功能,用蜂鸣器进行闹铃提醒。
最后附加一个温湿度检测的功能,用温湿度传感器检测室内的温湿度并将温湿度数据在显示屏上显示出来。
三、实验设备和仪器1.用STC89C52芯片作为系统板的主控芯片2.DHT11温湿度传感器3.DS1302时钟芯片4.LCD1602显示屏四、实验各模块原理介绍4.1 STC89C52单片机STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
(1)主要特性8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载;(2)器件参数1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。
2. 工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机)3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O 口(32个),复位后为:P1/P2/P3 是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片。
基于STC89C52RC万年历程序
TICK_CNT EQU 40H ;T0溢出计数器SECOND EQU 41H ;存储数据用真值,未用BCD码MINUTE EQU 42HHOUR EQU 43HDAY EQU 44HMONTH EQU 45HYEAR EQU 46HYUSHU EQU 47H ;存放余数FLASH_FLAG EQU 27H ;时间日期调整标志;R7: 0-时间;1-日期;中断向量表ORG 0000HLJMP MAINORG 0003HLJMP EX0_INTORG 000BHLJMP T0_INTORG 0013HLJMP EX1_INT;主程序ORG 0030HMAIN: NOP;初始化堆栈MOV SP,#60H;初始化变量MOV SECOND,#0MOV MINUTE,#0MOV HOUR,#0MOV DAY,#21MOV MONTH,#1MOV YEAR,#96MOV FLASH_FLAG,#00HMOV R7,#00H;MOV TL0,#0B0H ; 定时50msMOV TH0,#3CHMOV TICK_CNT,#20 ;装计数初值(1s计数器)MOV TMOD,#01HSETB ET0SETB EX0SETB EX1SETB EA ;开中断SETB PX0SETB PX1 ;设置中断优先级SETB TR0 ; 启动定时器T0LOPP:LCALL DISPLAY ;调用显示子程序LJMP LOPP; ------------------------------------------------- ; 定时器0中断T0_INT: MOV TL0,#0B0HMOV TH0,#3CH ; 重装载DJNZ TICK_CNT,NOT_1S ;1秒到?AJMP IS_1SNOT_1S: LJMP T0_RET; 1秒时间到IS_1S: PUSH ACCMOV A,SECONDCJNE A,#59,IN3 ; 59s到?AJMP IN4IN3: LJMP SECOND_INC ; 秒加1IN4: MOV SECOND,#0 ; 秒进位MOV A,MINUTECJNE A,#59,IN5 ; 59分到?AJMP IN6IN5: LJMP MINUTE_INCIN6: MOV MINUTE,#0 ; 分进位MOV A,HOURCJNE A,#23,HOUR_INC ; 23h到?MOV HOUR,#0 ; "时"进位MOV A,MONTHCJNE A,#2,NOT_FEB ; 是否二月?;2月处理;--------------------------FEB: NOPACALL DIV4MOV A,YUSHUCJNE A,#0,NOT_LEAP_Y ;是否闰年?LEAP_Y: MOV A,DAY ;闰年CJNE A,#29,DAY_INCMOV DAY,#1MOV MONTH,#3LJMP RESET_CNT;非闰年NOT_LEAP_Y: MOV A,DAYCJNE A,#28,DAY_INC ;MOV DAY,#1MOV MONTH,#3LJMP RESET_CNT;---------------------------;非2月处理;30/31天?NOT_FEB:NOPCJNE A,#4,Y01AJMP MON_30DY01: CJNE A,#6,Y02 ;是否小月?AJMP MON_30DY02: CJNE A,#9,Y03AJMP MON_30DY03: CJNE A,#11,T11AJMP MON_30D;31天T11: MOV A,DAY ;大月CJNE A,#31,DAY_INCAJMP NEXT_MONTH;30天MON_30D:MOV A,DAY ;小月CJNE A,#30,DAY_INC;天进位NEXT_MONTH: MOV DAY,#1MOV A,MONTHCJNE A,#12,MONTH_INC; 月进位MOV MONTH,#1MOV A,YEARCJNE A,#99,YEAR_INCMOV YEAR,#0AJMP RESET_CNT;年加1YEAR_INC: M OV A,YEARINC AMOV YEAR,AAJMP RESET_CNTMONTH_INC: MOV A,MONTHINC AMOV MONTH,AAJMP RESET_CNTDAY_INC: MOV A,DAYINC AMOV DAY,AAJMP RESET_CNTHOUR_INC:MOV A,HOURINC AMOV HOUR,AAJMP RESET_CNTMINUTE_INC: MOV A,MINUTE INC AMOV MINUTE,AAJMP RESET_CNTSECOND_INC: MOV A,SECONDINC AMOV SECOND,ARESET_CNT: POP ACCMOV TICK_CNT,#20T0_RET: RETI;--------------------------------------------------------------------;-------------------------------------------------------------------; sub: LED Display;显示子程序DISPLAY:MOV DPTR,#TAB1 ; 装段选表MOV A,R7 ;CJNE A,#00H,DISP_DATE ; 显示时间?DISP_TIME: MOV R0,#SECOND ;AJMP TSADISP_DATE: MOV R0,#DAY ; ;显示日期;显示时间或日期TSA: MOV A,@R0MOV B,#10DIV AB ;取十位MOVC A,@A+DPTRMOV R2,A ;存段选MOV A,B ;取个位MOVC A,@A+DPTRMOV R1,A ;存段选;------------INC R0MOV DPTR,#TAB1MOV A,@R0MOV B,#10DIV ABMOVC A,@A+DPTRMOV R4,AMOV DPTR,#TAB2MOV A,BMOVC A,@A+DPTRMOV R3,A;-------------INC R0MOV DPTR,#TAB1MOV A,@R0MOV B,#10DIV ABMOVC A,@A+DPTRMOV R6,AMOV DPTR,#TAB2MOV A,BMOVC A,@A+DPTRMOV R5,A;---------------------;P1:位选线;P0:段选线TDP: MOV P0,R1MOV A,FLASH_FLAGCJNE A,#03H,A02 ;是否闪烁?AJMP A03A02: CJNE A,#06H,A04;A03: MOV A,TICK_CNTRRC AJNC A05A04: MOV P1,#0DFH ;开D6 A05: LCALL DELAYMOV P1,#0FFH ;关位选MOV P0,R2MOV A,FLASH_FLAGCJNE A,#03H,B02AJMP B03B02: CJNE A,#06H,B04B03: MOV A,TICK_CNTRRC AJNC B05B04: MOV P1,#0EFH ;开D5 B05: LCALL DELAYMOV P1,#0FFH ;关;Display DS4MOV P0,R3MOV A,FLASH_FLAGCJNE A,#02H,C02AJMP C03C02: CJNE A,#05H,C04C03: MOV A,TICK_CNTRRC AJNC C05C04: MOV P1,#0F7H ;开D4 C05: LCALL DELAYMOV P1,#0FFH ;关;Display DS3MOV P0,R4MOV A,FLASH_FLAGCJNE A,#02H,D02AJMP D03D02: CJNE A,#05H,D04D03: MOV A,TICK_CNTRRC AJNC D05D04: MOV P1,#0FBH ;开D3D05: LCALL DELAYMOV P1,#0FFH;Display DS2MOV P0,R5MOV A,FLASH_FLAGCJNE A,#01H,E02AJMP E03E02: CJNE A,#04H,E04E03: MOV A,TICK_CNTRRC AJNC E05E04: MOV P1,#0FDH ;开D2E05: LCALL DELAYMOV P1,#0FFHMOV P0,R6MOV A,FLASH_FLAGCJNE A,#01H,F02AJMP F03F02: CJNE A,#04H,F04F03: MOV A,TICK_CNTRRC AJNC F05F04: MOV P1,#0FEH ;开D1F05: LCALL DELAYMOV P1,#0FFHRET;-------------------------------------------------------------------D_CNT_2 EQU 28HD_CNT_1 EQU 29HD_CNT_4 EQU 30HD_CNT_3 EQU 31H; ---------------------------------------- ;短延时DELAY: MOV D_CNT_2,#2D_LOOP2: MOV D_CNT_1,#100 ;[1]D_LOOP1: DJNZ D_CNT_1,D_LOOP1 ;[2]DJNZ D_CNT_2,D_LOOP2 ;[2]RET;长延时(用于键盘去抖动)DELAY2: MOV D_CNT_4,#60D_LOOP4:MOV D_CNT_3,#100 ;[1]D_LOOP3:DJNZ D_CNT_3,D_LOOP3 ;[2]DJNZ D_CNT_2,D_LOOP4 ;[2]RET; ---------------------------------------- ;除法子程序,用于判断闰年DIV4: PUSH ACCPUSH BMOV A,YEARMOV B,#4DIV ABMOV YUSHU,BPOP ACCPOP BRET;--------------------------------------------------------- ;外部中断0; sub: INT0 interrupt; 处理按键K0,切换时间/日期显示或者调整时间EX0_INT:PUSH ACCLCALL DELAY2 ;长延时,去抖动JB P3.2,OUTMOV A,FLASH_FLAG ;装标志位CJNE A,#00H,JYY ;是否为零?MOV A,R7 ;R7取反XRL A,#0FFHMOV R7,AOUT: LJMP EX0_RET;-------------------------------------------------------JYY: CJNE A,#01H,JMM;调节年MOV A,YEARCJNE A,#99,YY0MOV YEAR,#0LJMP YYFYY0: INC AMOV YEAR,AYYF: LJMP EX0_RET;---------------------------------------JMM: CJNE A,#02H,JDD;调节月MOV A,MONTHCJNE A,#12,MM0MOV MONTH,#1LJMP MMFMM0: INC AMOV MONTH,AMMF: LJMP EX0_RET;****************************************************** *****JDD: CJNE A,#03H,ADH ;调节天MOV A,MONTHCJNE A,#2,NFBIFB: NOPLCALL DIV4MOV A,YUSHUCJNE A,#0,ANGARN: MOV A,DAYCJNE A,#29,D0ALJMP D0BD0A: LJMP DDAD0B: LJMP DD1ANG: MOV A,DAYCJNE A,#28,D0ALJMP DD1NFB: NOPCJNE A,#4,Y04LJMP AD1Y04: CJNE A,#6,Y05LJMP AD1Y05: CJNE A,#9,Y06LJMP AD1Y06: CJNE A,#11,Y07LJMP AD1Y07: NOPMOV A,DAYCJNE A,#31,D0ALJMP DD1AD1: NOPMOV A,DAYCJNE A,#30,D0ADD1: MOV DAY,#1LJMP DDFDDA: MOV A,DAYINC AMOV DAY,ADDF: LJMP EX0_RET;--------------------------------------------------- ADH: CJNE A,#04H,ADM ;调节时MOV A,HOURCJNE A,#23,JH0MOV HOUR,#0LJMP JHFJH0: MOV A,HOURMOV HOUR,AJHF: LJMP EX0_RET;----------------------------------------- ADM: CJNE A,#05H,ADS ;调节分MOV A,MINUTECJNE A,#59,JM0MOV MINUTE,#0LJMP JMFJM0: MOV A,MINUTEINC AMOV MINUTE,AJMF: LJMP EX0_RETADS: MOV A,SECOND ;调节秒CJNE A,#59,JS0MOV SECOND,#0LJMP EX0_RETJS0: MOV A,SECONDINC AMOV SECOND,AEX0_RET:NOPJNB P3.2,EX0_RET ;判断键盘是否释放RETI;---------------------------------------------------------; 处理按键K1EX1_INT:PUSH ACCLCALL DELAY2 ;长延时,去抖动JB P3.3,EX1_RETNOPMOV A,R7CJNE A,#00H,DIS_DATE;显示时间MOV A,FLASH_FLAGCJNE A,#00H,ED2MOV FLASH_FLAG,#04H ; 标志位置04AJMP EX1_RETED2: CJNE A,#06H,ED1;reach 06HMOV FLASH_FLAG,#00H ;重置为0AJMP EX1_RET;显示日期DIS_DATE:MOV A,FLASH_FLAGCJNE A,#03H,ED1;== 03HMOV FLASH_FLAG,#00H ;重置为0AJMP EX1_RET;标志加1,ED1: INC AMOV FLASH_FLAG,AEX1_RET: NOPJNB P3.3,EX1_RETPOP ACCRETI;----------------------------------------------; code tableTAB1: DB 0c0h,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H TAB2: DB 040H,79H,24H,30H,19H,12H,02H,78H,00H,10H END。
基于单片机的液晶显示“万年历”设计
单片机液晶显示“万年历”一、设计任务利用STC89C52RC单片机设计一个具有如下功能的电子万年历:(一)、能够显示年、月、日、时、分、秒、星期(二)、能正确显示闰年日期(三)、用独立键盘进行校时二、硬件设计1、系统框图按照系统设计的要求和功能,将系统分为主控模块、时钟电路模块、按键扫描模块、LCD显示模块、蜂鸣器电路、电源电路、复位电路、晶振电路几个模块,系统框图如图1所示。
主控模块采用STC89C52RC单片机,按键模块用5个按键,用于调整时间和设定闹钟,显示模块采用LCD1602,时钟电路模块采用DS1302实时时钟实现对时间,日期的操作。
图1 基于AT89C52RC单片机的电子万年历系统框图2、原理图基于STC89C52RC单片机的电子万年历硬件仿真电路图如图10所示,系统由STC89C52RC单片机、按键扫描电路、显示电路、时钟电路、晶振电路、复位电路、蜂鸣器电路组成。
图2 电子万年历仿真图3、各部分介绍(1)、主控模块控制芯片使用STC89C52,控制系统如下图:图3 STC89C52RC主控模块主控制芯片采用STC89C52,系统包括晶振电路、复位电路、下载接口。
(2)、时钟芯片时钟芯片使用DS1302,该模块电路原理图如下图:图4 DS1302时钟电路时钟电路采用的是ds1302芯片,DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
工作电压与单片机的输入电压比较适合。
上面是它的一些基本的应用介绍。
下面是它的引脚的描述:图5 DS1302引脚下面是DS1302的时钟寄存器。
我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。
当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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表示进行读操作,控制字节总是从最低位开始输出。