多功能万年历毕业设计_第1页
多功能万年历毕业设计_第2页
多功能万年历毕业设计_第3页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、目录引言 . 11 系统功能与方案论证 . 11.1 系统功能 . 11.2 系统基本方案选择和论证 11.2.1 单片机芯片的选择方案和论证. 21.2.2 显示模块选择方案和论证 . 21.2.3 时钟芯片的选择方案和论证 . 21.2.4 温度传感器的选择方案与论证. 31.3 电路设计最终方案决定 32 系统的硬件设计与实现 . 32.1 电路设计框图 32.2 系统硬件概述 42.3 各系统电路及工作原理 42.3.1 AT89S52 单片机最小系统设计 42.3.2 时钟电路模块的设计. 52.3.3 温度采集电路的设计. 62.3.4 LCD1602 液晶显示模块设计 62.3.

2、5 电源电路 . 82.3.6 闹钟电路设计 . 92.3.7 键盘输入电路 . 93 软件设计 . 103.1 主程序框图 . 113.2 DS1302 时间处理 . 113.3 环境温度采集 143.4 键盘扫描 143.5 音乐播放 143.6 公历转农历 14结束语 . 16参考文献 . 17附录 . 17附录 A 程序 . 17附录 B 原理图 . 40致 . 错误! 未定义书签。多功能万年历毕业设计引言电子万年历是实现对年、月、日、时、分、秒数字显示的计时装置,广泛用于个人、 家庭、车站、码头、办公室、银行大厅等场所,成为人们日常生活中的必需品。数字集 成电路的发展和石英晶体振荡器

3、的广泛应用,使得数字钟的精度远远超过老式钟表。钟 表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子万年历精度高, 功能易于扩展,可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定 时广播、自动启闭路灯等电路。因此,研究电子万年历及扩大其应用有着非常现实的意 义。1 系统功能与方案论证1.1 系统功能 LCD显示年、月、日、时、分、秒、星期、温度、农历等信息手动调整年、月、日、时、分、星期、温度上限、闹铃时间温度报警闹铃播放音乐日历时间掉电保护公历与农历自动关联闹铃可选择关闭、每天循环或只响应一次三种模式可选用USB直流12V或5V电源或交流9V电源对电路进行供电1.2

4、 系统基本方案选择和论证由于现在市面上的电子万年历的种类比较多, 因此到底选择什么样的方案在设计中 是至关重要的。正确地选择方案就可以使产品更加人性化,并且可以减小开发的难度, 缩短开发的周期,降低产品的成本等等,因此就会被人们普遍接受,并且能够更快地将 产品推向市场实现其自身的价值。1.2.1 单片机芯片的选择方案和论证 方案一:采用89C51芯片作为硬件核心,采用Flash ROM部具有4KB ROM存储空间,能于3V的超低压工作,而且与 MCS-51系列单片机完全兼容,但是运用于电路设计中时由于 不具备 ISP 在线编程技术,在烧写程序时需要专门的下载器。采用AT89S52片ROM全都采

5、用Flash ROM能以3V的超底压工作;同时也与MCS-51 系列单片机完全该芯片部存储器为 8KBROM存储空间,同样具有89C51的功能,且具有 在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功 能时,烧写程序方面,再加上本系统程序较大,需要较大的存储空间,因此选择采用 AT89S52乍为主控制系统。1.2.2 显示模块选择方案和论证 方案一:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用 动态扫描法与单片机连接时,占用的单片机口线少。但所需数码管太多,布线和焊接困 难极易出错,因此不采用LED数码管作为显示。采用点阵式数码管显示

6、,点阵式数码管是由八行八列的发光二极管组成,对于显示 文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作 为显示。采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,显示多样, 清晰可见,但是价格贵,需要的接口线多,本设计所需显示的容较多。所以在此设计中 采用LCD1602液晶显示屏。1.2.3 时钟芯片的选择方案和论证 方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大, 所以不采用此方案。采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性

7、能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,31 X 8位的RAM做为数据暂存区,工作电压 2.5V5.5V围,2.5V时耗电小于300nA。温度传感器的选择方案与论证方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格 线性的,会产生较大的测量误差。万案一:采用数字式温度传感器DS18B20此类传感器为数字式传感器而且仅需要一条数据线 进行数据传输,易于与单片机连接,可

8、以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量围广等优点。1.3电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用AT89S52作为主控制系统;DS1302实现时钟;数字式温度传感器;LCD1602字符液晶显示屏作为显示。2系统的硬件设计与实现2.1电路设计框图图1 系统框图2.2 系统硬件概述本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片显示公历的年、月、日、星期、时、分、秒和农历的月、日,同时完成对它们的自动调整 和掉电保护,全部信息用液晶显示器显示出来。键盘输入由四个按键来实现,用这四个 按键可以对

9、日期、时间、星期、温度报警上限进行调整,并可以对闹铃的开关和闹铃的 时间进行设置。闹铃功能通过蜂鸣器来实现。温度的采集通过DS18B20来实现。电源电路可选用直流12V或5V电源9V交流电源输入,再经过稳压集成块输出 +5V电压,可稳 定工作。系统框图如图 1 所示,其软硬件设计简单,时间记录准确,可广泛应用于长时 间连续显示的系统中。2.3 各系统电路及工作原理本设计分为单片机控制电路、DS1302时钟电路、DS18B20温度采集电路、1602显示 电路、键盘输入电路、闹铃电路、电源电路几个模块。充分利用硬件电路的可靠性、稳 定性和芯片的方便性,使整体电路简单可行。2.3.1 AT89S52

10、 单片机最小系统设计AT89S52是一种低功耗,高性能 CMOS 8位单片机,片含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的 高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片集 成了通用 8 位中央处理器和 ISP Flash 存储单元。(1) AT89S52的引脚及功能AT89S52 单片机的引脚说明如图 2所示。图 2 AT89S52 的引脚P0 口为一个8位漏级开路双向I/O 口,每脚可吸收8TTL门电流。当P1 口的管脚第 一次写1时,被定义为高阻

11、输入。P0能够用于外部程序数据存储器,它可以被定义为数 据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0 输出原码,此时P0外部必须被拉高,即是要接上拉电阻。P1、P2、P3 口都是部提供上拉电阻的8位双向I/O 口,能接收输出4TTL门电流。当各自管脚写入1后,部上拉为高,都可用作输入。在FLASH编程和校验时,P1 口作为 第八位地址接收;P2 口接收高八位地址信号和控制信号。 P3 口可作为AT89S52的一些 特殊功能口。RST是复位信号引脚。/EA/VPP是程序存储器的读选通信号端。当/EA保持低电平时,对ROM勺读操作限 定在外部程序存储器

12、;当/EA端保持高电平时,对ROM勺读操作从部程序存储器开始。XTAL1(19脚)是反向振荡放大器的输入及部时钟工作电路的输入端。XTAL2(18脚)是来自反向振荡器的输出端。(2) AT89S52单片机最小系统单片机的最小系统如图3所示,电路中轻触按键、C3和R9组成单片机的复位电路, 连接到单片机的第9脚,它是施密特触发输入,当振荡器起振后,单片机上电瞬间,RC电路充电,RST引脚端出现正脉冲,RST高电平单片机保持复位状态。此时,ALE/PSEN PO、P1/ P2/ P3 口都输出高电平,RST变成低电平后,进入工作状态。当需要手动复位 时,按下轻触按键,RST为高电平,单片机进入复位

13、状态,松开按键后,进入工作状态。18/ 19脚之间接一个石英晶体及两个电容, 构成稳定的自激振荡器,振荡信号是单片机 工作的基本节拍。5V120u1"*C3R91 0K12MHz2P1_ 23P1 34P1_ 45P1 56P1_ 67P1 789K11 0K21 1K31 2K41 31 41 51 61 71 81 9F0P101FC22 2uFC12 2u FP1.0 /T2VCCP1.1 /T2EXP0.0P1.2P0.1P1.3P0.2P1.4P0.3P1.5P0.4P1.6P0.5P1.7P0.6RST/VPDP0.7RXD/P3 0TXD/P3. 1AL E/PROGI

14、NT0/P3. 2PSEN(NTT/P3. 3P2.7T0/P3. 4P2.6T1/P35P2 5WR/P3 6P2 4RD7P3.7P2.3XT AL 2P2.2XT AL 1P2.1GNDP2.0AT 89S523 93 83 73 63 33 23 12 92 8U13 5342 42 35V40P2 7P2_ 3P2 2图3单片机最小系统时钟电路模块的设计(1) DS1302芯片介绍日历时钟芯片DS130是一种串行接口的实时时钟,芯片部具有可编程日历时钟和31 个字节的静态RAM日历时钟可自动进行闰年补偿,计时准确,接口简单,使用方便, 工作电压围宽(2.55.5V),功耗低,芯片自身

15、还有对备份电池进行涓流充电的功能。DS1302采用8脚DIP封装,其引脚排列如图4所示图 4 DS1302 引脚图VCC1和VCC2分别是主电源和后备电源弓I脚,DS1302由VCC1或VCC冲较大者供电。XI, X2为振荡源引脚,需外接32.768KHZ晶振。(2)DS1302 的应用DS1302与单片机之间采用3线串行通信方式。串行时钟信号SCLK接到单片机的P1.0 引脚;数据输入/输出信号I/O接到单片机的P1.1引脚;复位/或通信允许信号RST接 到单片机的P1.2引脚,RST=1 允许通信,RST=0禁止通信。单片机AT89S52作为主机通 过控制SCLK I/O和RST信号实现两

16、芯片间的数据传送。DS1302时钟电路如图5所示。图 5 DS1302 时钟电路2.3.3 温度采集电路的设计温度传感器DS18B20是一种数字式的温度传感器,具有测量精度高,电路连接简 单等特点,此类传感器仅需要一条数据线进行数据传输。温度采集模块如图 6 所示。图 6 温度采集模块2.3.4 LCD1602 液晶显示模块设计(1) 1602字符型LCD简介LCD液晶显示器是一种被动式的显示器,本身并不发光,而是利用液晶在电压作用本设计采用 16下,能改变光线通过方向的特性而达到显示白底黑字或黑字白底的目的列X 2行的字符型LCD1602带背光的液晶显示器LCD1602主要技术参数:显示容量

17、:16X 2个字符工作电压:4 .55.5V工作电流:2.0mA (5.0V)它的引脚图如图8所示:图8 1602引脚图第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最 高,对比度过高时会产生“鬼影”。第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平是进行读操作,低电平时进行写操作。当 RS 和RW同为低电平时可以写入指令或显示地址,当 RS为低电平且RW为高电平是可以读 忙信号,当RS为高RW为氐电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变为低电平时,液晶执行指令。第15、16两脚为背光电源

18、。(2)指令说明初始化设置1)显示模式设置表1显示模式指令表指令码功能00111000设置16X2显示,5X7点阵,8位数据接口2)显示开关及光标设置表2显示开关及光标指令表指令码功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示000001NSN=1当读与一个字符后地址指针加1,且光标加1N-C当读与一个字符后地址指针减1,且光标减1S=1当写一个字符,整屏显示左移(N-1)或右移(3) LCD1602的应用电路5VAT89S525V10uFC4R910KC542 2uFC62 2uFP1_01P1.0/T2VCCP1_12P1.1

19、 /T2EXP0.0P123P1.2P0.1PI34P1.3P0.2P145P1.4P0.3P156P1 5P0.4P0.5P1_6/P1.6P1/8P1.7P0.69RST/VPDP0 7K110RXD/P3. 0TA/Vp pALE/PROGkznTXD/P3 1P3.212INT0 /P3.2PSENK313INI1 丿P3. 3P2.714T0/P3. 4P2.615T1/P3. 5P2.516WR/P3 6P2 41 /RD/P3 7P2 318XT AL 2P2.219XT AL 1P2 120GNDP2.0U1-39-P0.038P071 3 /P0.236P0.335P0.43

20、4P0.533P0.632P0.7313D-405V29-28-272622P2.121P2.0252423P2.2LCD1602BUB<_JB7BD6BD5BD4BD3BD2BD1BDobh殽o VCUVOSV6 3P5 8P4 2古3 1古P0.7R1P0.610KR2P0.51 0K R3csop4rtupCTOPLfop3 7nup2 RKUP45P0.4R41I1T0RP0.3R51Ip'p'p'图9 LCD1602显示模块2.3.5 电源电路为了方便使用,本系统设计了双电源,既可选择交流9V供电,也可选用直流12V或5V供电。本系统还设置了 USE接口

21、,可方便使用MP3或手机充电器对电路进行供电。 电源模块如图10所示。采用直流或交流电源供电时,电路经过二极管IN4007半波整流和电容C3滤波后送 入三端稳压管7805产生+5V的电压再经滤波后为电路进行供电。 采用直流+5V稳压电源 时,须接上跳帽,这时三端稳压管 7805不工作。JLED电源模块图10VCCGND21OVvinDNG闹钟电路设计本设计的闹钟电路直接采用 PNF型三极管驱动蜂鸣器发声,当单片机的P1.7引脚送出低电平时,PNP型三极管饱和导通,蜂鸣器发声,为高电平时不发声,因此通过单 片机产生不同频率的脉冲从P1.7引脚送出,蜂鸣器就会发出各种音调的声音。闹钟电路如图11所

22、示。图11闹钟电路键盘输入电路 本系统设置了四个功能按键:K1、K2、K3 K4,如图12所示。 K1的功能:按一下进入阴历显示界面,按两下进入模式选择界面,按三下,退出 模式选择界面,回到主页面。在闹铃响的时候,按一下可停止闹铃。 K2的功能:对时间、日历、闹铃时间、闹铃开关、温度报警等容进行选择。 K3的功能:对相应的容进行加一操作。 K4的功能:对相应的容进行减一操作。K1K1AT89S525V12345-8910K2'K2K3K4121314151617181920P1.0/T2VCCP1.1/T2EXP0.0P1.2P0.1P1.3P0.2P1.4P0.3P1.5P0.4P1

23、.6P0.5P1.7P0.6RST/VPDP0.7RXD/P3. 0EA7VppTXD/P3. 1ALE/PROGINT0/P3. 2PSENTNT1/P3. 3P2.7T0/P3. 4P2.6T1/P3. 5P2.5WR/P3.6P2.4RD/P3.7P2.3XTAL2P2.2XTAL1P2.1GNDP2.0U14039383736353433313029282625242221图12键盘输入电路3软件设计为了方便编写、调试和增加可读性,本设计的软件部分采用C语言进行编写。本系统主要程序模块包括 AT89S52主控程序、DS1302时间处理、环境温度采集LCD1602显示、键盘扫描、音乐播放

24、、公历转农历等几部分。3.1主程序框图3.2 DS1302时间处理DS1302在任何数据传送时必须先初始化,把RSTW置为高电平,然后把8位地址和 命令字装入移位寄存器,数据的读/写可以用单字节或多字节的突发模式进行。所有的 数据应在时钟的下降沿变化,而在时钟的上升沿,在芯片或与之相应的设备进行输入。(1)命令字节命令字节的格式如表3所示表3 DS1302的命令字节格式DD6D5D4D3D2D1D01RAMA4A3A2A1A0RDCKWR每次数据的传输都是有命令字节开始的, 这里的最高有效位必须是1。D6是RAM为 1)或时钟(为0)的标识位。D1D5定义片寄存器的地址。最低有效位(D0定义了

25、 写操作(为0时)或读操作(为1时),命令字节的传输时钟从最低有效位开始。(2)数据输入输出(I/O )在控制指令字输入后的下一个 SCLK时钟的上升沿时,数据被写入 DS1302数据输 入从低位即位0开始,如下图-14所示。同样,在紧跟8位的控制指令字后的下一个 SCLK 脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-15所示。RSTl_SCLKI/O(R/AO Al A2 A3 M R/C 1 ) ( LX1 U1:-2 LJ t>4 OS 06 D7 )图14读出DS1302数据图15写DS1302控制字(3)日历、时钟寄存器及其控制字DS1302共有1

26、2个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表 4所示,其中奇数为读操作,偶数为 写操作。表4 DS1302的日历、时钟寄存器及其控制字寄存器 名命令字取值 围各位容写操作读操作76543210秒寄存器80H81H00-59CH10SECSEC分钟寄存器82H83H00-59010MINMIN小时寄存器84H85H1-12 或00-2312/24010APHRHR日期寄存器86H87H01-28,29,30,310010DATEDATE月份寄存器88H89H01-12000IOMMONTH周日寄存器8AH8BH01-0700000DA

27、Y年份寄存器8CH8DH00-9910YEARYEAR时间处理子程序流程图如图16所示,程序见附录图16时间处理程序框图3.3环境温度采集温度采集子程序流程图如图17所示,程序见附录图17温度采集程序框图3.4键盘扫描键盘扫描子程序流程图如图18所示,按键功能说明详见键盘输入电路部分, 程序则 见附录一。3.5音乐播放对于单片机产生音乐,关键是控制频率的输出。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,本设计中利用单片机的 定时/计数器TO来产生这样方波频率信号,因此,我们只

28、要把一首歌曲的音阶对应频率 关系弄正确即可。程序和程序说明见附录一。3.6公历转农历本设计采用的是按年查表法来实现公历转换成农历,这样可最大限度地减少表格所占的程序空间。这里采用了三个字节来表示一年的农历信息。计算公历日对应的农历日期的方法:先计算出公历日离当年元旦的天数,然后查表 取得当年的春节日期计算出春节离元旦的天数,二者相减即可算出公历日离春节的天 数,以后只要根据大小月和闰月信息,减一月天数调整一月农历月份,即可推算出公历 日所对应的农历日期。如公历日不到春节日期,农历年要比公历年小一年,农历大小月取前一年的信息,农历月从12月向前推算2。公历转农历程序流程图如图19所示,程序见附录

29、图18键盘扫描框图图19公历转农历程序流程图结束语本设计以AT89S52单片机为核心,利用软件编程,通过键盘控制、温度传感器、日 历时钟芯片和LCD液晶显示基本达到预想效果。本设计硬件系统相对简单,使用方便。 程序部分是本设计的一个难点,为了实现较多的功能,程序变得相当庞大,调试起来比 较麻烦。由于本人能力有限,程序还未能进一步优化,为了节约成本,系统未能实现更 多的功能,如农历年、天干地支和星期自动关联等。参考文献1 顾滨,伟军,王泰,鲍可进,铁香.单片微计算机原理、开发及应用M.:高等教育,2000.15-35.2 朱思荣.用51单片机实现公历与农历、星期的转换, 1-2.wen ku.b

30、aidu./view/4994b7d8ce2f0066f5332293.html3 DS18B20 中文资料,1-22.we nku.baidu./view/fe0be6e8998fcc22bcd10d2e.html4 DS1302中文资料,1-8.doc88./p-.html1602的使用说明及 C语言例程,1-5.we nku.baidu./view/086ce729915f804d2b16c1b5.html7805应用电路图.电子技术资料.elecfa ns./article/88/131/138/2007/4.html7 窦振中.单片机外围器件实用手册输出通道器件分册M.:航空航天大学

31、,2002.467-479.8 建清,鲁金,王春生.从零开始学单片机技术M.:国防工业,2006.28-31.。9 徐爱钧.单片机原理实用教程-基于proteus虚拟仿真M.:电子工业,1996.258-267.10 齐,朱宁西.单片机应用系统设计技术一基于C51的protues 仿真(第2版)M.:电子工业,2009.260-269.附录附录A程序*使用 LCD1602 DS1302时钟芯片、DS18B20温度传感器完成该万年历*/#include<reg52.h>#include"LM016L.h"#include"DS1302.h"#i

32、nclude"yinli.h"#include"DS18B20.h"#include"KeyScan.h"#include"MODE.h"#include"OPEN.h"#include"SoundPlay.h"#define uint unsigned int /宏定义#defi ne uchar un sig ned charvoid open();/上电显示void KeyScan();/键盘扫描void SetTime_Mode();/调时void SetDate_M

33、ode();/调日期void SetYear_Week_Mode(); /调年和星期void SetRing_Mode();/闹钟设置void SetTemp_Mode();/温度上限设置模式void InitialSound(void); /音乐初始化void Guangbiao_Flash();/光标闪烁void Play(unsignedchar*Sound,unsignedcharSignature,unsigned Octachord,unsigned int Speed);日历主函数 钟设置的时间,是的话执行相应动作uchar i;if(alarm=1)alarm=0;write_

34、(0x01);write_(0x80+0x00);for(i=0;i<15;i+)write_date(ringtablei);InitialSound();Play(Music,0,3,360);continue;if(flag=0)/正常显示模式下tempchange(); / 温度转换命令display1(l_tmpdisplay,8);显示时间Temp_Display(); / 显示温度 deal(); /温度处理*void main()init();Warn_Ling_init();Read_RTC();open(); /上电显示函数write_(0x01); / 清屏whil

35、e(1)time_date(); / 时间处理KeyScan();/键盘扫描if(flag=1)/显示农历模式下GetChinaCalendar(l_tmpdisplay10*10+l_tmpdispla y11+2000,l_tmpdisplay13*10+l_tmpdisplay14,l_tmpdisplay16*10+l_tmpdisplay17);display2(l_tmpdisplay,nongli);if(flag=2)/功能选择模式下if(ring_time1=l_tmpdate1&&ring_time2uchar i;=l_tmpdate2 &&

36、; flag=0&&alarm!=0)判断是否到闹EA=O;Guangbiao_Flash();write_(0x80+0x03);/ 选择菜单if(select!=8)for(i=0;menuselect/2i!='0'i+)write_date(menuselect/2i);elsefor(i=0;menu3i!='0'i+)write_date(menu3i);if(select=0|select=1)/ 调年和星期模式SetYear_Week_Mode(); if(select=2|select=3)/ 调日期模式SetDate_Mode

37、(); if(select=4|select=5)/ 调时间模式SetTime_Mode();if(select=6|select=7|select=8)/闹钟设置SetRing_Mode();if(select=9) / 设置温度上限SetTemp_Mode();*END*END*/LM016L.h/*LCD*sbit rs=P2A4; / LCD sbit rw=P2A5; /LCD sbit e=P2A6; /LCD sbit BeepIO = PM7; void delay(uchar z); / void init(); / void write_(uchar );void writ

38、e date(uchar dvoid init()rw=0;write_(0x38);/ delay(1);write_(0x0c);/ delay(1);write_(0x06);/ delay(1);write_(0x01); / delay(1);write_(0x80);void write_(uchar )rs=0;rw=0;P0=; delay(1);e=1; delay(1);e=0;数据/命令选择端读写选择端使能信号/定义输出管脚延时函数LCD初始化函数/LCD写命令;/LCD写数据/LCD初始化函数显示模式的设置开显示,光标显示光标位置清显示/LCD 写命令void writ

39、e_date(uchar date)/LCD 写数据rs=1;rw=0;P0=date;delay(1);e=1;delay(1);e=0;void delay(uchar z)/ 延时函数uchar x,y;for(x=0;x<z;x+)for(y=O;y<11O;y+);8b,0x8d;/以上是读出数据的地址ucharl_tmpdate7,l_tmpdisplay18,SetTime18,ring_time3,nongli5,alarm=2;*END*END*void Write_Ds1302_Byte(uchar temp) /写入一字节数据uchar i;for (i=0;

40、i<8;i+)数据,上升沿写入sck=0;/循环8次写入io=temp&0x01;/每次传输低字节temp>>=1;/右移一位sck=1;/DS1302.h/*钟芯片相关程序void Write_Ds1302(uchar address,uchar dat)/写入*/rst=0;sbit rst=P3A5;/时钟芯片复位端delay(1);sbit sck=P3A6;/时钟信号sck=0;sbit io=P3A4; /时钟输入/输出端void Write_Ds1302_Byte(uchar temp);/void Write_Ds1302(uchar address,

41、uchar写入一个字节dat);/ 写入delay(1);rst=1;delay(1);/启动uchar Read_Ds1302 ( uchar address );间/读取时Write_Ds1302_Byte(address);/发送地址void Read_RTC(void);/读取日历Write_Ds1302_Byte(dat);rst=0;/发送数据 恢复void Set_RTC(uchar *p);/设定日历void time_date();/时间数据处理uchar Read_Ds1302 (uchar address)/ 读取时void display1(uchar *lp,ucha

42、r lc); /void display2(uchar *lp,uchar *lc); /显示时间显示农历uchar code table0="0123456789-/:"uchar code table1="SUNMONTUEWEDTHUFRISATL"codeucharwrite_rtc_address7=0x80,0x82,0x84,0x86,0x88,0 x8a,0x8c;/写入时钟芯片的地址,顺序同上codeucharread_rtc_address7=0x81,0x83,0x85,0x87,0x89,0xuchar i,time=0x00;r

43、st=0;delay(1);sck=0;delay(1);rst=1;delay(1);Write_Ds1302_Byte(address);for (i=0;i<8;i+)/循环8次读取数据Write_Ds1302(*p,P1302i);P+;/每次传输/ 时钟下降/ 右移一位/以下为DS1302复/读取日历/地址传递/分8次读取年if(io) time|=0x80;低字节sck=1;沿读入数据time>>=1; sck=0;rst=0; delay(1);位的稳定时间rst=0;sck=0; delay(1); sck=1; delay(1); io=0; delay(1

44、); io=1; delay(1); return (time);void Read_RTC()uchar i,*p;p=read_rtc_address; for(i=0;i<8;i+) 月日时分秒星期l_tmpdatei=Read_Ds1302(*p);p+;void Set_RTC(uchar *P1302)/ 设定 日历uchar i,*p;Write_Ds1302(0x8E,0X00); /允许写入Write_Ds1302(0x8E,0x80);/ 禁止写入void time_date()/时间数据处理Read_RTC();l_tmpdisplay0=l_tmpdate2/16

45、;时l_tmpdisplay1=l_tmpdate2&0x0f;l_tmpdisplay2=12;/加入":"l_tmpdisplay3=l_tmpdate1/16;/分l_tmpdisplay4=l_tmpdate1&0x0f;l_tmpdisplay5=12;l_tmpdispla y 6=l_tmpdate0/16;/秒l_tmpdisplay7=l_tmpdate0&0x0f;l_tmpdisplay8=2;/显示2010的2l_tmpdisplay9=0;/显示2010的第一个0l_tmpdisplay10=l_tmpdate6/16;/年

46、l_tmpdisplay11=l_tmpdate6&0x0f;l_tmpdisplay12=10;/加入“-”l_tmpdisplay13=l_tmpdate4/16;/月l_tmpdisplay14=l_tmpdate4&0x0f; l_tmpdisplay15=10; l_tmpdisplay16=l_tmpdate3/16;/日l_tmpdisplay17=l_tmpdate3&0x0f;/ 传地址/8 次写入年月p=write_rtc_address;for(i=0;i<8;i+)日时分秒星期void display1(uchar *lp,uchar lc

47、)/显示时间unsigned char i;/定义变量write_(0x81);/液晶第一行显示时间和星期for(i=0;i<lc;i+)write_date(table0lpi);delay(1);write_(0x80+0x0b);switch(l_tmpdate5-1) /用英文缩写显示星期case 0: write_date(table10);write_date(table11);write_date(table12);break;case 1: write_date(table13);write_date(table14);write_date(table15);break;

48、case 2: write_date(table1 6);write_date(table17);write_date(table18);break;case 3: write_date(table19);write_date(table110);write_date(table111);break;case 4: write_date(table112);write_date(table113);write_date(table114);break;case 5: write_date(table115);write_date(table116);write_date(table117);break;case 6: write_date(table118);write_date(table119);write_date(table120);break;default:write_date(table10);write_date(table11);write_date(table12); break;write_(0x80+0x0f);write_date(table0alarm);write_(0x80+0x40); /第二行显示年for(i=8;i<lc+10;i+)write_date(table0lpi);delay(1);void displ

温馨提示

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

评论

0/150

提交评论