电子万年历课程设计报告_第1页
电子万年历课程设计报告_第2页
电子万年历课程设计报告_第3页
电子万年历课程设计报告_第4页
电子万年历课程设计报告_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、赣南师院物理与电子信息学院课程设计报告书姓名: 张华宾 班级: 13电气工程及其自动化 学号: 130806058 时间: 2015.10.30 目录1设计任务和要求22方案论证22.1 方案比较22.1.1 方案一22.1.2 方案二32.2 方案选择33系统硬件设计33.1 主控电路的设计33.1.1 关于AT89C51单片机33.1.2 振荡器电路的设计63.1.3 复位电路的设计73.2 DS1302时钟电路93.3 LCD1602液晶显示的设计114 软件设计124.1 主控程序的设计124.2 DS1302时钟电路流程设计134.3 LCD显示电路和按键流程设计145 系统测试结果

2、及分析155.1测试方法155.2 测试结果及分析156 结束语与心得体会15参考文献16附录116附录230设计题目电子万年历的设计设计要求 基本要求:(1)具有显示年、月、日、星期、时、分、秒等功能;(2)万年历具有闰月识别显示功能;(3)具备年、月、日、星期、时、分、秒校准功能;设计过程 摘要: 本次课程设计以实现电子万年历,即在利用LCD电路进行显示年、月、日、星期、时、分、秒等功能。本设计要求利用AT89C51作为主控芯片完成主控电路的设计,辅助电路要求包括显示电路、时钟电路、按键电路等。本系统使用了专门的时钟芯片DS1302,读出其时间在LCD1602上显示,并能通过按键对其进行调

3、时和校准。关键字:AT89C51单片机、DS1302,LCD1602,电子万年历1.设计任务和要求(1) 应用AT89S52单片机设计单片机实现对DS1302的控制(2) . 选用LCD1602显示,实时显示年、月、日、星期、时、分、秒,采用按键式实现时钟对表和快慢调整;(3) 硬件设计部分,根据设计的任务选定合适的单片机,根据控制对象设计接口电路。设计的单元电路必须有工作原理,器件的作用,分析和计算过程;(4) 软件设计部分,根据电路工作过程,画出软件流程图,根据流程图编写相应的程序,进行调试并打印程序清单;(5) 原理图设计部分,根据所确定的设计电路,利用Protel99se和Protue

4、s工具软件绘制电路原理图。2.方案论证2.1 方案比较2.1.1 方案一电子万年历的设计,硬件控制电路主要用了AT89C51芯片处理器、数码管显示器。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序等组成。原理框图如图2.1所示。 AT89C51单片机最小系统模块 按键模块数码管显示模块图2.1 方案1原理框图(1)控制按键:用于手动控制、手动调整、预置值的输入等(2)输出显示:数码管显示。2.1.2 方案二硬件控制电路主要用了AT89C51芯片处理器、LCD1602显示器、DS1302实时时钟。根据各自芯片的功能互相连接成电子万年历的控制

5、电路。软件控制程序主要有主控程序、电子万年历的时间控制程序等组成。原理图框图如图2.2所示。 AT89C51单片机最小系统模块 按键模块1602液晶显示模块DS1302模块 图2.2方案二原理框图本系统使用8052作为CPU,由CPU来控制时钟芯片DS1302,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V5.5V范围内。液晶显示方式显示功能强,效果直观。2.2 方案选择将方案一与方案二进行比较:LED数码管动态扫描。相对于液晶显示比较经济实惠,但液晶显示比数码管显示美观,LED数码管在操作上比较繁琐。液晶显示方

6、式显示功能强,效果直观。方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V5.5V范围内。综上所述,在价格、功能、操作的难易程度方面选择方案二。3.系统硬件设计公交车报站系统主要由四个部分组成,即主控电路、时钟电路、LCD液晶显示电路。各部分电路的设计在本章中做了详细的说明。3.1 主控电路的设计3.1

7、.1 关于AT89C51单片机AT89C51单片机的结构框图如图3.1所示。它主要由下面几个部分组成:1个8位中央处理单元(CPU)、片内Flash存储器、片内RAM、4个8位的双向可寻址I/O口、1个全双工UART(通用异步接收发送器)的串行接口、2个16位的定时器/计数器、多个优先级的嵌套中断结构,以及一个片内振荡器和时钟电路。在AT89C单片机结构中,最显著的特点是内部含有Flash存储器,而在其他方面的结构,则和Inter公司的8051的结构没有太大的区别。CPU中断控制振荡器片内Flash存储器总线控制片内RAM4I/O端口ETC定时器1定时器0串行端口外部中断P0 P2 P1 P3

8、地址/数据TXD RXD计数器输入图3.1 AT89C51单片机的结构框图(1)主要性能与MCS-51 兼容;4K字节可编程闪烁存储器; 1000次写/擦循环;数据保留时间10年;全静态工作:0Hz-24Hz;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器; 6个中断源;可编程串行通道;片内振荡器和时钟电路另外,AT89C51是用静态逻辑来设计的,其工作频率可下降到0Hz,并提供两种可用软件来选择的省电方式空闲方式(Idle Mode)和掉电方式(Power Down Mode)。在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统

9、都继续工作。在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,故只保存片内RAM中的内容,直到下一个硬件复位为止。(2)引脚功能说明AT89C51引脚图如图3.2所示。图3.2 AT89C51引脚图VCC:供电电压。VSS:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,

10、P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH

11、编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,口管脚备选功能:P3.0 RXD(串行输入口);P3.1 TXD(串行输出口);P3.2 /INT0(外部中断0);P3.3 /INT1(外部中断1);P3.4 T0(记时器0外部输入); P3.5 T1(记时器1外部输入); P3.6 /WR(外部数据存储器写选通);P3.7 /

12、RD(外部数据存储器读选通);P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微

13、拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。.XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.1.

14、2 振荡器电路的设计89系列单片机的内部振荡器电路如图3.3所示,由一个单级反相器组成。XTAL1为反相器的输入,XTAL2为反相器的输出。可以利用它内部的振荡器产生时钟,只要在XTAL1和XTAL2引脚上外接一个晶体及电容组成的并联谐振电路,便构成一个完整的振荡信号发生器,如图3.5示,此方法称为内部方式。XTAL2XTAL1内部定时/PD400D1D2Q1RfQ2VCCQ3Q4图3.3 AT89C51单片机内部振荡器电路另一种使用方法如图3.4示,由外部时钟源提供一个时钟信号到XTAL1端输入,而XTAL2端浮空。在组成一个单片机应用系统时,多数采用图3.5所示的方法,这种方式的结构紧凑,

15、成本低廉,可靠性高。振荡器的等效电路如图3.5上部所示。在图中给出了外接元件,即外接晶体及电容C1,C2,并组成并联谐振电路。在电路中,对电容C1和C2的值要求不是很严格,如果用高质的晶振,则不管频率为多少,C1,C2通常都选择30pF。有时,在某些应用场合,为了降低成本,晶体振荡器可用陶瓷振荡器代替。如果使用陶瓷振荡器,则电容C1,C2的值取47pF。XTAL2XTAL1GNDNCCMOS门外部振荡信号图3.4 外部时钟接法 XTAL1XTAL289系列单片机GND内部定时VCC/PDRf石英晶体或陶瓷振荡器C1C2图3.5 片内振荡器等效电路通常,在单片机中对所使用的振荡晶体的参数要求:E

16、SR(等效串联电阻):根据所需频率按图366选取。C0(并联电容):最大7.0pF。CL(负载电容):30pF+3pF。其误差及温度变化的范围要按系统的要求来确定。6005004003002001000 4 8 12 16图3-6 ESR与频率的关系曲线在本设计中,采用的是内部方式,即如图3.5所示,在XTAL1和XTAL2引脚上外接一个12MHZ的晶振及两个30pF的电容组成。3.1.3 复位电路的设计89系列单片机与其他微处理器一样,在启动的时候都需要复位,使CPU及系统各部件处于确定的初始状态,并从初始状态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当

17、系统处于正常工作状态时,且振荡器稳定后,如RST引脚上有一个高电平并维持2个机器周期(24个振荡周期),则CPU就可以响应并将系统复位。复位时序如图3.7所示,因外部的复位信号是与内部时钟异步的,所以在每个机器周期的S5P2都对RST引脚上的状态采样。当在RST端采样到“1”信号且该信号维持19个振荡周期以后,将ALE和/PSEN接成高电平 ,使器件复位。在RST端电压变低后,经过1-2个机器周期后退出复位状态,重新启动时钟,并恢复ALE和/PSEN的状态。如果在系统复位期间将ALE和/PSEN引脚拉成低电平,则会引起芯片进入不定状态。| S5 | S6 | S1 | S2 | S3 | S4

18、 | S5 | S6 | S1 | S2 | S3 | S4 | S5 | S6 | S1 | S2 | S3 |RST:INST ADDR INST ADDR INST ADDR INST ADDR INST ADDR INSTALE:/PSEN:P0:11振荡周期19振荡周期图3.7 内部复位定时时序(1) 手动复位手动复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源VCC之间接一个按钮。当人为按下按钮时,则VCC的+5V电平就会直接加到RST端。由于人的动作很快也会使按钮保持接通达数十毫秒,所以,保证能满足复位的时间要求。手动复位的电路如图3.8所示。Vcc

19、 AT89C51RST GND8.2k10uF+Vcc图3.8 手动复位电路(2) 上电复位AT89C51的上电复位电路如图3.9所示,只要在RST复位输入引脚上接一电容至VCC端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1uF。上电复位的过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1

20、MHz,起振时间则为10ms。在图3.8的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“1”态。如果系统在上电时得不到有效的复位,则在程序计数器PC中将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。VccAT89C51RST8.2k10uF+VccGND 图3.9 上电复位电路3.2 DS1302时钟电路DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口

21、与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行小电流充电的能力。DS1302的外部引脚分配如图3.3所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。图3.10DS1302的外部引脚分配各引脚的功能为: Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2

22、V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入,控制数据的输入与输出; I/O:三线接口时的双向数据线; :输入信号,在读、写数据期间,必须为高。该引脚有两个功能:一、开始控制字访问移位寄存器的控制逻辑;二、提供结束单字节或多字节数据传输的方法。 (1)DS1302的工作原理 DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作

23、时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下最多可达248的数据。 (2)DS1302的寄存器和控制命令 DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式,如表3.3所示。 表3.3 DS1302有关日历、时间的寄存器读寄存器写寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0范围81h80hCH10秒秒00-5983h82h10秒分00-5985h84h12/24010时时1-12/0-23AM/PM87h86h0010日日1-3189h88h000

24、10月月1-128Bh8Ah00000周日1-78Dh8Ch10年年00-998Fh8EhWP0000000DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COHFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 (3)与单片机接口电路原理图 电路原理图如图3.4所示,DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。图3.

25、11 DS1302与单片机的连接电路原理图3.3 LCD1602液晶显示的设计1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。管脚功能:第1脚:GND为电源地;第2脚:VCC接5V电源正极;第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高

26、(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。特性3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的

27、字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM特征应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。电路原理图如图3.5所示,图3.12LCD1602与单片机的连接电路原理图4 软件设计4.1 主控程序的设计系统总体流程图如图4.1所示,系统流程图设计分析如下:首先,设备上电以后,程序开始运行。进入主函数后,开始对系统的一些初始化。当有设置键按下时进入时间修改模式,无按键按下时读取时间等数据送入显示器显示。在时间修改模式下设置时间完成后再将时间送入时钟芯片之后再送如显示器显示。图4.1 整体流程图4.2DS1302时钟电路流程设计 时钟

28、流程图如图4.2所示,流程图分析:DS1302开始计时时,首先进行初始化,当有中断信号时,读取时钟芯片的时间数据送入液晶显示。这时若有设置键按下,进行时间修改,完成后将时间数据送入1302芯片,若没有按键按下,直接送入EPROM中,送入液晶显示。 4.2 DS1302时钟电路程序流程图 图4.3 LCD显示程序流程图4.3LCD显示电路和按键流程设计显示流程图如图4.3,4.4所示,流程图分析如下:首先对1602显示屏进行初始化(初始化大约持续10ms),然后检查忙信号,若BF=0,则获得显示RAM地址,写入相应的数据显示。若BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到

29、BF=0为止。 从图4.4可知,调整年月日星期的流程,主要是要注意年月日星期的范围大小。如果我们按下了调整键,当我们按下时间加一键时,相应的位置上时间将会加一,同样的当我们按下减一键时,相应位置上的时间也会减一。比如我们时间调整正好在星期的位置上,当我们按下S1键时,我们可以看到星期加一,当我们按下S2键的时候,我们可以看到星期减一。同样的,对于年月日也是同样的调整,当我们按下复位键时,所以的时间将复位。 整个系统的主要程序的流程如上述程序流程图所示,而程序的清单见附录1。 图4.4 时间调整流程二 5 系统测试结果及分析5.1测试方法 首先准备好一个5v的直流电源,为本系统加上电源。一上电,

30、可以看到LCD1602液晶上会显示年,月,日,星期,时,分,秒。同时也可以看到时钟在走。这个时候我们按下时钟调整键,进行时钟的调整。5.2 测试结果及分析系统加上电源,我们可以看到了LCD602液晶上会显示年,月,日,星期,时,分,秒以。同时也可以看到时钟在走。这个时候我们按下时钟调整键,进行时钟的调整。测试后可以正确的调整时钟。6 结束语与心得体会本次设计中在最初的设计中,对于51 单片机进行了充分的了解。程序编写中,由于思路不清晰,开始时遇到了很多的问题,通过和老师及同学的讨论,以及对大量书籍资料和论坛中成功的品进行借鉴,明白了编程中的的主要算法和实现,从而解决问题。对于液晶屏幕,开始并不

31、是很了解,在运用时查看了大量的手册资料,并阅读了网友对于1602和DS1302驱动编写代码,从而掌握了1602和DS1302用法。 通过本次设计,使我对单片机的了解有了更加深一步,我发现只有动手做才会孰能技巧,还有对材料的整理和理解。这次设计运用到的知识很多方面,尤其是单片机,像AT89C51,引脚多,硬件内部线路接通,所以用起来很方便,还有DS1302芯片与单片机之间的连接以及如何使用它们。当然也要对这些元器件作相应调查。主要就是电路原理图,还有对引脚的作用熟悉。对于软件方面则是灵活运用单片机有关的程序语言,还有很多扩展功能,由于知识匮乏,但是理论知识还是比较详细的。我们最大的成功之处是在这

32、整个过程,动脑寻求解决一个一个问题的办法,对程序是不断思索,把复杂的程序一点一点的分解开,从而使的程序不再显得很难写了,使得本系统能成功。参考文献1 冯建华,赵亮单片机应用系统设计与产品开发M北京:人民邮电出版社,20042 何立民单片机高级教程(第一版)M北京:北京航空航天大学出版社,20013 张志良单片机原理及控制技术(第2版)北京:机械工业出版社,2005 4 谭浩强著程序设计与开发技术M北京:清华大学出版社,1991.5 赵海霞,李艳. 单片机应用项目化教程 北京:清华大学出版社,20136余西存,曹国华单片机原理及接口技术M西安电子科技大学出版,2000附录1#include<

33、;reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char/时钟芯片控制接口/sbit sck=P11;sbit io=P12;sbit rst=P13;/1602液晶控制接口/sbit rs=P26;sbit en=P27;/按键/sbit key1=P35;sbit key2=P36;sbit key3=P37;/uchar writetime7;uchar code table="0123456789"/?/时钟读写地址/uchar code wri

34、teadd7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;uchar code readadd7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;uchar nian,zhou,yue,ri,shi,fen,miao;/时间暂存变量uchar date_flag;/调整年月日时分秒int code monthTotal13 = 0,31,59,90,120,151,181,212,243,273,304,334,365;int NM=0,ND=0;NY=0;unsigned long code lunar200y199 = 0x04AE53,0x

35、0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/*1901-1910*/ 0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754,/*1911-1920*/ 0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E,/*1921-1930*/

36、 0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48,/*1931-1940*/ 0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51,/*1941-1950*/ 0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x6AD53C,/

37、*1951-1960*/ 0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46,/*1961-1970*/ 0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50,/*1971-1980*/ 0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0x09374

38、6,0x5497BB,/*1981-1990*/ 0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645,/*1991-2000*/ 0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E,/*2001-2010*/ 0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC,0x05

39、2B50,0x0A9345,0x474AB9,/*2011-2020*/ 0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43,/*2021-2030*/ 0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C,/*2031-2040*/ 0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0

40、x5B52BA,0x06D24E,0x0ADA42,0x355B37,/*2041-2050*/ 0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42,/*2051-2060*/ 0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B,/*2061-2070*/ 0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54

41、F,0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6,/*2071-2080*/ 0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743,0x452738,0x0D264A,0x8E933E,/*2081-2090*/ 0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 /*2091-2099*/;void toLunar(int year,int month,int day)

42、 long bySpring,bySolar,daysPerMonth; int index,flag; if( (lunar200yyear-1901 & 0x0060) >> 5) = 1) bySpring = (lunar200yyear-1901 & 0x001F) - 1; else bySpring = (lunar200yyear-1901 & 0x001F) - 1 + 31; bySolar = monthTotalmonth-1 + day - 1; if( (!(year % 4) && (month > 2)

43、bySolar+; if (bySolar >= bySpring) / bySolar -= bySpring; month = 1; index = 1; flag = 0; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth = 29; else daysPerMonth = 30; while(bySolar >= daysPerMonth) bySolar -= daysPerMonth; index+; if(month = (lunar200yyear - 19

44、01 & 0xF00000) >> 20) ) flag=!flag; if(flag = 0) month+; else month+; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth=29; else daysPerMonth=30; day = bySolar + 1; else /? bySpring -= bySolar; year-; month = 12; if ( (lunar200yyear - 1901 & 0xF00000) >

45、> 20) = 0) index = 12; else index = 13; flag = 0; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth = 29; else daysPerMonth = 30; while(bySpring > daysPerMonth) bySpring -= daysPerMonth; index-; if(flag = 0) month-; if(month = (lunar200yyear - 1901 & 0xF00000)

46、 >> 20) flag =!flag; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth = 29; else daysPerMonth = 30; day = daysPerMonth - bySpring + 1; ND = day; /农历日 NM = month; /农历月 NY = year; /农历年void delay(uchar ms)/延时uchar x,y;for(x=ms;x>0;x-)for(y=110;y>0;y-);/void ds

47、1302_write_byte(uchar date)/ds1302写字节uchar i;for(i=0;i<8;i+)sck=0;io=date&0x01;date=date>>1;sck=1;void ds1302_write(uchar add,uchar date)/向ds1302的地址里面写数据rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();ds1302_write_byte(add);ds1302_write_byte(date);rst=0;_nop_();sck=0;_nop_();io=1;sck=1;uchar

48、ds1302_read(uchar add) /从ds1302的地址里面读出数据uchar i,date;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();ds1302_write_byte(add);for(i=0;i<8;i+)date=date>>1;sck=0;if(io)date=date|0x80;sck=1;rst=0;_nop_();sck=0;_nop_();io=1;sck=1;return date;void yj1602_write_com(uchar com) /液晶写地址en=0;delay(1);en=1;del

49、ay(1);rs=0;delay(1);P0=com;en=0;delay(1);void yj1602_write_date(uchar date) /液晶写数据en=0;delay(1);en=1;delay(1);rs=1;delay(1);P0=date;en=0;delay(1);void yj1602_init() /液晶初始化yj1602_write_com(0x38);yj1602_write_com(0x0c);yj1602_write_com(0x06);yj1602_write_com(0x01);void display() /显示年月日星期时分秒温度uint yy;u

50、char j,k;writetime0=ds1302_read(readadd0);writetime2=ds1302_read(readadd2);writetime3=ds1302_read(readadd3);writetime1=ds1302_read(readadd1);writetime4=ds1302_read(readadd4);writetime5=ds1302_read(readadd5);writetime6=ds1302_read(readadd6);yj1602_write_com(0x80);yj1602_write_date('2');yj1602

51、_write_date('0');yj1602_write_date(tablewritetime0/16);yj1602_write_date(tablewritetime0%16);yj1602_write_date('-');yj1602_write_date(tablewritetime2/16);yj1602_write_date(tablewritetime2%16);yj1602_write_date('-');yj1602_write_date(tablewritetime3/16);yj1602_write_date(tablewritetime3%16);if(writetime1=1)yj1602_write_com(0x80+12);yj1602_write_date('M');yj1602_write_date('O');yj1602_write_date('N');if(writetime1=2)yj1602_write_com(0x80+12);yj1602_write_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论