单片机制作万年历方案

上传人:aa****6 文档编号:29986324 上传时间:2018-01-26 格式:DOC 页数:26 大小:97.50KB
返回 下载 相关 举报
单片机制作万年历方案_第1页
第1页 / 共26页
单片机制作万年历方案_第2页
第2页 / 共26页
单片机制作万年历方案_第3页
第3页 / 共26页
单片机制作万年历方案_第4页
第4页 / 共26页
单片机制作万年历方案_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《单片机制作万年历方案》由会员分享,可在线阅读,更多相关《单片机制作万年历方案(26页珍藏版)》请在金锄头文库上搜索。

1、单片机制作万年历方案1.1 本课题主要的研究工作本项目是一种基于 AT89C51 片机的万年历设计,本方案以 AT89C51 片机作为主控核心,与时钟芯片 DS1302、温度 DS18B20 按键、LCD1602 液晶显示器组成硬件系统。在硬件系统中设有独立按键和 LCD1602 显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行更改,读取方便、显示直观。当程序执行后,LCD 显示即时时间、年月日、星期。设置 4 个操作键:K1:选择键;K2:加键;K3:减键;K4:确定键。1 本设计的主要内容:(1)熟悉万年历各模块的工作原理;(2)选择适当的芯片和元器件,确定系统电路,绘制电路原

2、理图,尤其是各接口电路;(3)熟悉单片机使用方法和 C 语言,编写出相应模块的应用程序;(4)分别在各自的模块中调试出对应的功能,在 Proteus 软件上进行仿真,并实现各种功能。2 设计目标:万年历实现以下三个功能:(1)具有年、月、日、星期、时、分、秒等功能;(2)具备年、月、日、星期、时、分、秒校准功能,具备自动调节闰年的功能;(3)具有与即时时间同步的功能。(4)具有温度显示功能本设计是基于 51 系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。1.2 系统硬件概述本电路是以 STC89C51 单片机为控制核心,该芯片具有在线编程功能,功耗低

3、,能在 3.3V 的超低压下工作;时钟芯片采用 DS1302,它是一款高性能、低功耗、自带 RAM 的实时时钟芯片,具有掉电自动保存功能。可自动对秒、分、时、日、周、月、年进行计数,具有闰年补偿功能,而且精度高位的 RAM 做为数据暂存区,工作电压2.5V5.5V 范围内,2.5V 时耗电小于 300nA。显示模块采用 1602 显示屏,它内置 192 种字符,可显示 32 个符号或数字,清晰可见,而且功率消耗小寿命长抗干扰能力强。其工作电压为 5v。1.3单片机主控制模块的设计一个典型的单片机最小系统一般由时钟电路、复位电路、电源指示灯和外部扩展接口等部分组成。单片机的最小系统如下图所示,单

4、片机的 XTAL0 和 XTAL1 引脚用于连接晶振电路。RESET 为复位引脚,连接复位电路,用于初始化 MCU1.4显示模块的设计本设计中要对时间、温度进行显示,液晶显示屏 1602 模块作为输出。1602字符型 LCD 通常有 14 条引脚线或 16 条引脚线的 LCD,多出来的 2 条线是背光电源线。它可以显示两行,每行 16 个字符,采用单+5V 电源供电,外围电路配置简单。1602 液晶模块内部的字符发生存储器已经存储了 160 个不同的点阵字符图形,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是B(41H) ,显示时模块把地址 41H 中的点阵字符图形显示出来,我

5、们就能看到字母“A” 。LCD1602 引脚功能:1 VSS 一般接地2 VDD 接电源(+5V)3 V0 液晶显示器对比度调整端。4 RS RS 为寄存器选择。5 R/WR/W 为读写信号线。6 E E(或 EN)端为使能(enable)端,下降沿使能。1602 主要管脚介绍:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生鬼影使用时可以通过一个10K 的电位器调整对比度。RS 为寄存器选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。RW 为读写信号线端,高电平时进行读操作,低电平时进行写操作。当 RS 和 RW 共同为低电平时可以写入指

6、令或者显示地址;当RS 为高电平 RW 为低电平时可以写入数据。E 为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。将 L1602 的 RS 端和 P2.0,R/W 端和 P2.1, E 端和 P2.2 相连,当 RS=0 时,对 LCD1602 写入指令;当 RS=1 时,对 LCD1602写入数据。当 R/W 端接高电平时芯片处于读数据状态,反之处于写数据状态,E 端为使能信号端。当 R/W 为高电平,E 端也为高电平,RS 为低电平时,液晶显示屏显示需要显示的示数。显示模块电路图如图 3 所示:VSS1 VDD2V03 RS4RW5 E6DB07 DB18DB29 DB31

7、0DB411 DB512DB613 DB714E115 E216J1LCD1602P1.0(T2)1 P1.1(T2EX)2P1.23 P1.34P1.45 P1.56P1.67 P1.78P0.0 39P0.1 38P0.2 37P0.3 36P0.4 35P0.5 34P0.6 33P0.7 32P2.0 21P2.122P2.2 23P2.3 24P2.425P2.5 26P2.6 27P2.728P3.3(INT1)13 P3.2(INT0)12P3.5(T1)15 P3.4(T0)14EA/VPP 31XTAL119 XTAL018RESET9P3.7(RD)17 P3.6(WR)1

8、6VSS20VCC 40(RXD)P3.010 (TXD)P3.111 ALE/PROG 30PSEN 29U1ST8C9C52VCCVCC 10KVCC图 31.5独立式键盘设计独立式键盘每个键单独占用一根 I/O 口线。键盘的工作方式可分为编程控制方式和中断控制方式。CPU 在一个工作周期内,利用完成其他任务的空余时间,调用键盘扫描子程序,经程序查询,若无键操作,则返回;若有键操作,则进而判断是哪个键,并执行相应的键处理程序。这种方式为编程扫描方式。由于单片机在正常应用过程中,可能会经常进行键操作,因而编程控制方式使CPU 经常处于工作状态, 在进行本次设计中,只涉及到了选择、加、减、确定

9、四个功能。因此采用独立式键盘。2 电路设计框图3 程序流程框图初始化开始读、写日期、时间和温度分离日期时间温度显示值显示子程序日期、时间修改子程序定时闹铃子程序农历自动更新子程序返 回闰月子程AT89C51主控制模 块时钟模块DS1302温度模块DS18B20显示模块LCD1602键盘模块开始控制键有效,进入年调整程序等待按键程序加键有效 减键有效年加 1 减加 1控制键有效,进入日调整程序等待按键程序加键有效 减键有效日加 1 日减 1控制键有效,进入月调整程序等待按键程序加键有效 减键有效月加 1 月减 1控制键有效,进入星期调整程序等待按键程序加键有效 减键有效星期加 1 星期减 1控制

10、键有效,进入分钟调整程序等待按键程序加键有效 减键有效分钟加 1 分钟减 1按键有效,跳出时间调整程序,进入主循环程序控制键有效,进入小时调整程序等待按键程序加键有效 减键有效小时加 1 小时减 14电路图:5元件清单:元件 个数 元件 个数DS1320 1 DS18B20 1LCD1602(显示器) 1 晶振 32.768KHZ 1瓷片电容 220PF 1 3V 纽扣电池及底座 1按键 4 4.7K(9 针)排阻 1可调电阻 1K 26:程序设计1602液晶万年历程序-显示年月日,时间,温度(续) /*键盘识别程序*uchar key(void)uchar i,j;K1=0;i=P2;del

11、ay_key(500);j=P2;K1=1;if(i=j)switch(j)case 0xee: return(j);break;case 0xed: return(j);break;case 0xeb: return(j);break;case 0xe7: return(j);break; K2=0;i=P2;delay_key(500);j=P2;K2=1;if(i=j)switch(j)case 0xde: return(j);break;case 0xdd: return(j);break;case 0xdb: return(j);break;case 0xd7: return(j);

12、break; /=模式的判断=uchar key_only(void) /此程序延时较长uchar i,j;K1=0;i=P2;delay_key(500);j=P2;K1=1;if(i=j)if(j=0xee)while(j=0xee) /直到放手delay_key(50000);j=P2;delay_key(10000);return(0xee);elsereturn(0);elsereturn(0);/=指针移动=void cursor_shift_right()if(addr=0x80+0x0f)addr=0x80+0x3f;elseif(addr=0x80+0x4f)addr=0x7

13、f;LCD_Write(LCD_COMMAND, +addr);/rightvoid cursor_shift_left() if(addr=0x80)addr=0x80+0x50;elseif(addr=0x80+0x40)addr=0x80+0x10;LCD_Write(LCD_COMMAND, -addr);/left/*模式判断*void mode(void)if(key_only()=0xee) +done;if(done=4)done=0; /=警报声,分长短音=void alarm_voice(uchar i) uchar n;if(i=0)n=8;for(;n0;n-)DS13

14、02_GetTime( /获取时钟芯片的时间数据TimeToStr( /时间数据转换液晶字符DateToStr( /日期数据转换液晶字符ReadTemp(); /开启温度采集程序temp_to_str(); /温度数据转换成液晶字符GotoXY(10,1); /液晶字符显示位置Print(TempBuffer); /显示温度GotoXY(0,1);Print(CurrentTime.TimeString); /显示时间GotoXY(0,0);Print(CurrentTime.DateString); /显示日期GotoXY(15,0);Print(week_value); /显示星期 voice=voice;else if(i=1)n=10;for(;n0;n-) show_time();voice=voice;else if(i=2)n=20;for(;n0;n-)DS1302_GetTime( /获取时钟芯片的时间数据TimeToStr( /时间数据转换液晶字符ReadTemp(); /开启温度采集程序temp_to_str(); /温度数据转换成液晶字符GotoXY(10,1); /液晶字符显示位置Print(TempBuffer); /显示温度GotoXY(0,1);Print(CurrentTime.TimeString); /显示时间voice=voice;n

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号