1、基于单片机,1760 语音模块的液晶 LCD 时钟专业系部:电气工程系班 级:智能电子 111学生姓名:欧 阳 志 勇完成日期: 2013 年 5 月湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇2摘 要我设计的 LCD 时钟温度系统是由中央控制器、温度检测器、时钟系统、语音模块,LCD 液晶显示器及键盘部分组成。控制器采用单片机 AT89C52,温度检测部分采用 DS18B20 温度传感器,时钟系统用时钟芯片 DS1302,用 LCD 液晶 12864 作为显示器,用语音模块1706 构成报警器。单片机通过时钟芯片 DS1302 获取时间数据,对数据处理后显示时间;温度传
2、感器 DS18B20 采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器 LCD12864显示,键盘是用来调时,调闹钟,调显示时间,播放铃声。语音模块用来播放铃声;关键字:单片机 LCD 液晶 DS18B20 DS1302 LCD12864语音 1760;一、 设计目的及意义1.随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是数据采集及处理,键盘控制,显示系统及报警系统与单片机有效结合,意义:本设计是通
3、过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇3累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。二、方案设计及方案论证1.时钟温度的总体设计思路按照系统的设计功能要求,本时钟,铃声,温度系统的设计必须采用单片机软件系统实
4、现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整,闹铃及显示。获得时钟温度数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。2.时钟温度系统方案论证2.1 时钟系统方案选择方案 1:通过单片机内部的定时器 /计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案 2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。用专用时钟芯片硬件成本相对较高,但它
5、的精度很高,软件编程很简单。综上所述,选择方案 2。2.2 单片机的选择对于单片机的选择,如果用 8031 系列,由于它没有内部 RAM,系统又需要大量内存存储数据,因而不可用;51 系列单片机的 ROM为 4K,对于我们设计的系统可能有点小;52 系列单片机与 51 系列的结构一样,而 ROM 扩大为 8K,对我们设计系统提供充足的空间湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇4进行功能的扩展。再有 51 系列单片机与 52 系列的单片机价格差不多。因此,我们选择 52 系列的单片机。2.3 显示系统的方案比较方案 1:用数码管或 LED 显示。方案 2:用液晶 16
6、02 显示。方案 3:用液晶 12864 显示。时钟和温度的显示可以用数码管或 LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用 1602 液晶显示数据有限,显示数据的可读性不好,用可以显示汉字的 12864 液晶显示器还可以增加显示信息的可读性,让人看起来会很方便。 2.4 报警系统的方案比较方案 1:用长鸣的蜂鸣器实现闹钟铃声及温度超限报警。方案 2:用喇叭加语音芯片实现闹钟铃声及温度超限报警。用喇叭加语音芯片成本也不是很高,声音也不错,用蜂鸣器,成本低,电路结构简单,而且体
7、积小。但功能有限,限于设计所需要的功能,用蜂鸣器和语音结合为最佳选择。所以我们采用方案1.2 结合。2.5 温度系统方案选择方案 1:用热敏电阻等测温元件测出电压,再转换成对应的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。方案 2:用 DS18B20 直接测温。DS18B20 温度传感器是美国DALLAS 半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。经比较,我们选择方案 2。温度实现只能通过外部的温度传感器来实现。经上网查阅及市场考察,DS18b20 体积小,只有 3 只脚,电路接法
8、简单。内部含有湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇5寄存器为我们设计实现上下限报警功能提供保障。精度为 0.5C,也符合我们设计的要求。DS18B20 也是我们通常使用的型号,因此温度传感器用 DS18B20。2.6 键盘控制方案选择方案 1:购买集成键盘,采用矩阵形式连接。方案 2:购买单个复位开关做成键盘。虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。单片机的 IO 口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。3. .时钟温度系统总体设计初步确定设计系统由单片机主控模块、时钟模块、测温模块、语音模块、显示模块、键盘接口模块共
9、6 个模块组成,电路系统框图如图所示。 主控器件AT89C52DB1820 温度采集系统DS1320时间采集系统12864显示系统语音报警系统键盘控制系统三硬件设计部分1单片机最小系统电路设计湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇61.1 单片机芯片选择单片机采用52系列单片机。由ATMEL公司生产的AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得AT89C5
10、2为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89C52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护
11、你的硬件电路。AT89C52 有 40 个引脚,32 个外部双向输入/输出(I/O)端口,同时内含 2 个外中断口,2 个 16 位可编程定时计数器,2 个全双工串行通信口,片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和 Flash 存储器结合在一起,特别是可反复擦写的 Flash 存储器可有效地降低开发成本。其芯片外观及引脚图如下:图1.1_1 图1.1_2湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇71.2单片机管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的
12、管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电
13、阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C
14、52的一些特殊功能口,如下表所示:管脚 备选功能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 (外部数据存储器写选通)湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇8P3.7 /RD (外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁
15、存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/
16、VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。1.3 单片机最小系统单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。1) 复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。如下图所示: 湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇92)
17、 晶振电路晶振电路原理图如 3-2:3-2 晶振模块原理图选取原则:电容选取 30pF,晶振为 11.0592MHz。3) 电源AT89C52 单片机的供电电源是 5V 的直流电,我们直接通过USB 电源线供电;4) EA 非/Vpp 脚我们没有用外部扩展 ROM,因此 EA 非/Vpp 为高电平,即接+5V 电源或是悬空,为了简化电路将这个引脚悬空。湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇102 时钟系统电路设计2.1 时钟芯片选择我们采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。它
18、采用主电源和备用电源双电源供电。它的工作电压范围 2.05.5V,在 2.2V 时,小于 300nA。它内部含有 31个字节的静态 RAM,可提供用户访问。 DS1302 可以对年、月、日、周日、时、分、秒进行计时 ,可以达到我们设计的基本的要求。内部的寄存器为我们调时,闹钟定时提供了寄存空间。备用用电源也实现了当系统断电后,时钟仍然可以保持。而且它是串行接口,与单片机通信所需要的接口少。不像DS12887 等芯片并行通信需要很多 IO 口。2.2 DS1302管脚及寄存器说明(1)DS1302 的引脚排列Vcc1 为后备电源,VCC2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。
19、DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电。当 Vcc2 大于 Vcc10.2V 时,Vcc2 给 DS1302 供电。当 Vcc2 小于Vcc1 时,DS1302 由 Vcc1 供电。因此,我们 vcc1 用 3V 的纽扣电池作为备用电源,vcc2 用系统电源作为主电源。X1 和 X2 是振荡源,外接 32.768kHz 晶振。RST 是复位/片选线,通过把 RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇11/命令序列送入移位寄存器;其次,RST 提
20、供终止单字节或多字节数据的传送手段。当 RST 为高电平时,所有的数据传送被初始化,允许对 DS1302 进行操作。如果在传送过程中 RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,在 Vcc2.5V之前,RST 必须保持低电平。只有在 SCLK 为低电平时,才能将 RST置为高电平。I/O 为串行数据输入输出端(双向)。SCLK 为时钟输入端。 (2)DS1302 的寄存器说明DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等
21、。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个 RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为 C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为 FEH(写)、FFH(读)。 2.3 DS1302时钟电路DS1302 时钟电路如下图所示:湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇12DS1302 与单片机的连接仅需 3 条线:时钟线 SCLK、数据线 I/O 和复位线 RST。时钟线 SCL
22、K 与 P2.0 相连,数据线 I/O 与 P2.1 相连,复位线 RST 与 P2.2 相连。由于 DS1302 是靠涓细电流充电来实现串行输入输出的,因此,在 SCLK 、I/O、 RST 线上要加上拉电阻,其中,它们的电流应该在 500u1mA 之间,若电源为 5V,则 R 约为 5k,因此,我们的电阻 R=4.7K。但是经过查阅有关资料知道如果 DS1302 不是接p0 口可以不接上拉电阻,为了节省成本,所以没有接上拉电阻。在单电源与电池供电系统中,vcc1 提供低电源并提供低功率的备用电源。Vcc2 提供高电源作为芯片供电的主电源。因此,这里 vcc1用 3V 纽扣电池,vcc2 用
23、 5V 的系统电源。晶振为 32.768KHz 接入 X1、X2 引脚。3 温度系统电路3.1 温度芯片的选择温度实现只能通过外部的温度传感器来实现。经上网查阅资料及湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇13市场考察,DS18b20 体积小,只有 3 只脚,电路接法简单。它能够直接读出被测温度。内部含有寄存器为我们设计实现上下限报警功能提供保障。用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;精度为 0.5C,也符合我们设计的要求。DS18B20 也是我们通常使用的型号,因此温度传感器用 DS18B20。3.2 DS1
24、8B20 内部结构描述DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EERAM。高速暂存 RAM 的结构为 8 个字节的存储器,结构如图 4.1 所示。头两个字节包含测得的温度信息,第三和第四字节是 TH 和 TL 的拷贝,是易失的,每次上电复位时被刷新。第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20 工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如图 4.2 所示。低 5 位一直为1,TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。TM R1 R0 1 1 1 1
25、1图 4.2 配置寄存器温度 LSB温度 MSBTH 用户字节 1TL 用户字节 2配置寄存器保留保留保留CRC图 4.1 高速暂存 RAM 结构图1 字节2 字节3 字节4 字节5 字节6 字节7 字节8 字节9 字节EEROMTH 用户字节 1TL 用户字节 2湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇143.3 DS18b20温度系统电路DS18B20 系统电路如下:DS18B20 有两种接法:一是单线接法即只接QT。这种方法应用它内部的寄生电源,因此在 QT上要用一个 MOSFET 把I/O 线只接拉到电源上。二是从 vdd 脚加上电源。方法一适合于远距离温度监
26、控,不需要本地电源。而我们只是设计测温系统,选择方法二就行了,还有 MOSFET极容易烧,我们不用它。Vdd 接 5V 电源,vss 接地,QT 与 P3.7 相连。4 语音芯片 1760 的介绍;ISD1700 是华邦 ISD 公司 2007 年新推出的单片优质语音录放电路,该芯片 提供多项新功能,包括内置专利的多信息管理系统,新信息提示( vAlert ) , 双运作模式(独立 播放 REC=P06;录音ERASE=P05;擦除 FWD=P04;下一曲7 液晶显示系统设计7.1 12864 液晶显示电路现在流行低碳生活,节能减排已成为人们处理事情首先想到的问题,所以这个显示的时候背光控制时
27、间为 10s 左右,同时关背光的时候关掉显示器的电源,降低功耗。湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇17四、软硬件调试部分1) 软件调试软件调试,我是在 keil 软件平台和单片机学习板上来完成的。当我写部分程序在 keil 软件经过调试,开始出现很多错误和警告。通过逐个错误排错及修改。得出下列经验, (1)调用函数最好在头文件中进行申明,主函数写在最后;(2 )特别注意一些字母的大小写,一般要用英语文字写, 最后对程序进行相应的扩展完善,由于按键不灵敏我们加上声音程序。2)硬件调试硬件调试,我们用万用表,单片机学习板来完成的。首先,我们调试 LCD1602 显示
28、。我将液晶显示程序下载到单片机内,连好所有的线,通电后,观察显示结果。唉!液晶竟然不显示。我们用万用表测试各连线是否导通及某些点的电压,竟然有些线路没连通啊!然后,我们调试 DS1302 时钟芯片。连上按键模块,液晶显示模块,单片机最小系统,时钟系统,温度系统,连接所有线,通上电源后,观察到液晶显示能正常显示啦,但有乱码显示。后面我检测程序出错啦;改正程序后,没乱码啦且能够正常显示啦,然后逐渐完善功能。湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇18整个硬件调试完成啦!五总结与体会想到课题以后,讨论整个过程如何实施,以及选择哪个课题进行设计。在初步方案确定好后,开始研究所
29、需的器材,在列出初稿后,买好器材,便进入了设计阶段。经过将一个五一的设计,反复地讨论各个环节,反复调试,终于完成 LCD 液晶时钟设计。虽然达到设计要求,并完成了一定发挥部分,但单片机的资源并没完全得到应用。这是不用单片机学习板,自己动手制作出来的作品。在本次设计是液晶,单片机,语音,键盘控制的综合应用,其间,遇到许多困难。我真真正正的意识到,在写程序时,逻辑思维要清晰,要有好的写程序的层次感,模块化清晰,要有耐心。这样出错啦,才能及时知道问题出在哪。在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设
30、计中的最大收获。 六 使用说明:刚上电;为主页面;S5 键为进入菜单;进入菜单 :可以调时;设定闹钟;设定你的主页面;调背光显示时间;播放铃声;S6;为确认键加开关背光;但背光灭了时;按下 S6;开背光;倒计时 30s;因为语音模块内存不大;所以就没录语音整点报时啦,内存两首铃声。如果可以买个内存大的语音芯片完全可以改装的更好。湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇19功能简介:具有年,月,日,时间,星期,两个闹钟设置功能;整点报时;温度测量;LCD 液晶时钟系统设计原理电路图湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇20各个模块子函数voi
31、d Delayus(UINT8 t) /微妙延时void Delayms(UINT16 t) /1ms 延时UINT8 scan_key(void) /读按键值void Tiao(void) /调节按键void Tiem() /定时器初始化void JieRi(void) /以下是公历节日void Year(void) /年void TiaoShi(void) /调时函数void TiaoNao(void) /调闹钟函数void TiaoXiu(void) / 调休眠函数void spk_Timer(void) /闹铃void LinSheng(void) /铃声调节湖南铁道职业技术学院 电气
32、工程学院 智能电子 111 班 欧阳志勇21void INT0_time() interrupt 0 /菜单外部中断 0 函数void timer0() interrupt 1 /定时器 0 定时休眠void led_Timer() /关、开背光UINT8 ZhengShi() /判断整点到否void BaoDian() /整点报时void main(void) /主函数子函数具体内容:#include #include UINT8 DateTime7;UINT8 dispstr116=“20 年 月 日 “;UINT8 dispstr216=“星期 “;UINT8 idata dispstr
33、39=“ “;UINT8 idata dispstr416=“菜单 S5 “;UINT8 idata dispstr916=“闹 1 “; UINT8 idata dispstr1016=“闹 2 “; UINT8 idata dispstr1116=“显示时间 “;UINT8 code dispstr512=“ S1:调时间 “;UINT8 code dispstr612=“ S2:调闹钟 “;UINT8 code dispstr716=“ S3:调显示时间 “;UINT8 code dispstr814=“ S4:播放歌曲 “;UINT8 idata dispstr126=“铃声 “;UI
34、NT8 idata dispstr136=“铃声 “;UINT8 code lin114=“ S1:放音 PLAY “;UINT8 code lin215=“ S2:下一曲 FWD “;UINT8 code lin313=“ S3:录音 REC “;UINT8 code lin416=“ S4:擦删 ERASE “;UINT8 code LCD112=“元旦节快乐 “; UINT8 code LCD212=“世界湿地日 “;UINT8 code LCD312=“世界气象日 “;UINT8 code LCD412=“国际妇女节 “;UINT8 code LCD512=“中国植树节 “;UINT8
35、 code LCD614=“消费者权益日 “;UINT8 code LCD710=“世界水日 “; UINT8 code LCD812=“愚人节快乐 “;UINT8 code LCD912=“中国清明节 “;UINT8 code LCD1012=“世界地球日 “; 湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇22UINT8 code LCD1112=“国际劳动节 “;UINT8 code LCD1212=“中国青年节 “;UINT8 code LCD1312=“世界护士节 “;UINT8 code LCD1412=“国际儿童节 “;UINT8 code LCD1512=“
36、世界环境日 “;UINT8 code LCD1612=“国际爱眼日 “;UINT8 code LCD1712=“世界土地日 “;UINT8 code LCD1812=“国际禁毒日 “; UINT8 code LCD1912=“香港回归日 “; UINT8 code LCD2012=“中国建军节 “;UINT8 code LCD2112=“中国老师节 “;UINT8 code LCD2216=“九一八事件纪念日“;UINT8 code LCD2312=“中国国庆节 “;UINT8 code LCD2412=“世界动物日 “;UINT8 code LCD2512=“世界邮政日 “;UINT8 co
37、de LCD2616=“辛亥革命纪念日 “; UINT8 code LCD2716=“澳门回归纪念日 “;UINT8 code LCD288=“平安夜 “;UINT8 code LCD298=“圣诞节“;UINT8 SetTime117=0x00,0x10,0x10,0x10,0x05,0x05,0x13,0x00,0x00,0x00,0,1,0x00,0x00,0x00,0,1; /设定时间,闹钟 最初始值codeunsignedchar MAX17=90,90,36,49,19,7,153,90,36,7,2,5,90,36,7,2,5;/调时最大值UINT8 code DAY8=“712
38、3456“;UINT16 code dimer5=30,60,120,300,600;sbit spk=P36;sbit led=P27;sbit RLAY=P07;sbit REC=P06;sbit ERASE=P05;sbit FWD=P04;#define S1 0x0e#define S2 0x0d#define S3 0x0b#define S4 0x07、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、void Delayus(UI
39、NT8 t) /微妙延时UINT8 i;i=t;for(;i0;i-);void Delayms(UINT16 t) /1ms 延时UINT8 S=60,F=0;char Y=0;char biaozhi=0;int W1=0,W2=0;UINT8 n;sbit G=P33;int K=0;int H;static unsigned int count=0;湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇23UINT16 i,j;for(i=0;i0)SetTime1K-1-;if(SetTime1K-1=15) | (SetTime1K-1=31)|(SetTime1K-1
40、=47) |(SetTime1K-1=63) |(SetTime1K-1=79)SetTime1K-1=SetTime1K-1-6;elseSetTime1K-1=MAXK-1-1;break;case S3:K+;if(K=18)湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇24K=8;elseif(K=8)K=1; break;/ case S4:Y+;/ Y%=2;H=K;、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、void
41、 Tiem() /定时器初始化TMOD=0x01;TH0=0XDC;TL0=0X00;ET0=1;EA=1;TR0=1;IT0=1;EX0=1;、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、void JieRi(void) /以下是公历节日if(DateTime4=0x01 else if(DateTime4=0x02 else if(DateTime4=0x02 else if(DateTime4=0x03 else if(DateTime4=0x03
42、else if(DateTime4=0x03 else if(DateTime4=0x03 else if(DateTime4=0x04 else if(DateTime4=0x04 else if(DateTime4=0x04 else if(DateTime4=0x05 else if(DateTime4=0x05 else if(DateTime4=0x05 else if(DateTime4=0x06 else if(DateTime4=0x06 else if(DateTime4=0x06 else if(DateTime4=0x06 else if(DateTime4=0x06 湖
43、南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇25else if(DateTime4=0x07 else if(DateTime4=0x08 else if(DateTime4=0x09 else if(DateTime4=0x09 else if(DateTime4=0x10 else if(DateTime4=0x10 else if(DateTime4=0x10 else if(DateTime4=0x10 else if(DateTime4=0x12 else if(DateTime4=0x12 else if(DateTime4=0x12 else Dis_Str(
44、3,0,dispstr4);、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、void Year(void) /年UINT8 ReYear;ReYear=DateTime6%18; /农历年模 12,取余运算switch(ReYear)case 0:Dis_Str(1,0,“龙年“);break; /余 0 即整除 农历 龙年case 1:Dis_Str(1,0,“蛇年“);break; /蛇年case 2:Dis_Str(1,0,“马年“);break;case 3
45、:Dis_Str(1,0,“羊年“);break;case 4:Dis_Str(1,0,“猴年“);break;case 5:Dis_Str(1,0,“鸡年“);break;case 6:Dis_Str(1,0,“狗年“);break;case 7:Dis_Str(1,0,“猪年“);break;case 8:Dis_Str(1,0,“鼠年“);break;case 9:Dis_Str(1,0,“牛年“);break;case 10:Dis_Str(1,0,“虎年“);break;case 11:Dis_Str(1,0,“兔年“);break; 、 、 、 、 、 、 、 、 、 、 、 、
46、、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、void TiaoShi(void) /调时函数lcd_wcmd(0x01);Delayms(1);spk=0;Delayms(100);spk=1;while(G!=0)湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇26Tiao();Delayms(1);count+;if(H-1)=0) dispstr37= ;else dispstr36=SetTime10/16+0x30;dispstr37=SetTime10%16+
47、0x30;if(H-1)=1 dispstr34= ;elsedispstr33=SetTime11/16+0x30;dispstr34=SetTime11%16+0x30;if(H-1)=2 dispstr31= ;elsedispstr30=SetTime12/16+0x30;dispstr31=SetTime12%16+0x30; if(H-1)=3 dispstr111= ;elsedispstr110=SetTime13/16+0x30; dispstr111=SetTime13%16+0x30;湖南铁道职业技术学院 电气工程学院 智能电子 111 班 欧阳志勇27if(H-1)=4
48、 dispstr17= ;else dispstr16=SetTime14/16+0x30;dispstr17=SetTime14%16+0x30;if(H-1)=5 elsedispstr24=DAYSetTime15if(H-1)=6 dispstr13= ;elsedispstr12=SetTime16/16+0x30;dispstr13=SetTime16%16+0x30;dispstr32=:;dispstr35=:;Dis_Str(0,0,dispstr1);Dis_Str(2,0,dispstr2);Dis_Str(1,3,dispstr3);count%=3;DS1302_Set1302(SetTime1);Del