基于单片机的具有语音提示的lcd电子时钟设计_第1页
基于单片机的具有语音提示的lcd电子时钟设计_第2页
基于单片机的具有语音提示的lcd电子时钟设计_第3页
基于单片机的具有语音提示的lcd电子时钟设计_第4页
基于单片机的具有语音提示的lcd电子时钟设计_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

湖南铁道职业技术学院 电气工程学院智能电子111班欧阳志勇基于单片机,1760语音模块的液晶LCD时钟专业系部:电气工程系班级:智能电子111[摘要]我设计的LCD时钟温度系统是由中央控制器、温度检测器、时钟系统、语音模块,LCD液晶显示器及键盘部分组成。控制器采用单片机AT89C52,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶12864作为显示器,用语音模块1706构成报警器。单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器LCD12864显示,键盘是用来调时,调闹钟,调显示时间,播放铃声。语音模块用来播放铃声;[关键字]:单片机LCD液晶DS18B20DS1302LCD12864语音1760;

一、设计目的及意义1.随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是数据采集及处理,键盘控制,显示系统及报警系统与单片机有效结合,意义:本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。二、方案设计及方案论证1.时钟温度的总体设计思路按照系统的设计功能要求,本时钟,铃声,温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整,闹铃及显示。获得时钟温度数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。2.时钟温度系统方案论证2.1时钟系统方案选择方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。综上所述,选择方案2。2.2单片机的选择对于单片机的选择,如果用8031系列,由于它没有内部RAM,系统又需要大量内存存储数据,因而不可用;51系列单片机的ROM为4K,对于我们设计的系统可能有点小;52系列单片机与51系列的结构一样,而ROM扩大为8K,对我们设计系统提供充足的空间进行功能的扩展。再有51系列单片机与52系列的单片机价格差不多。因此,我们选择52系列的单片机。2.3显示系统的方案比较方案1:用数码管或LED显示。方案2:用液晶1602显示。方案3:用液晶12864显示。时钟和温度的显示可以用数码管或LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用1602液晶显示数据有限,显示数据的可读性不好,用可以显示汉字的12864液晶显示器还可以增加显示信息的可读性,让人看起来会很方便。2.4报警系统的方案比较方案1:用长鸣的蜂鸣器实现闹钟铃声及温度超限报警。方案2:用喇叭加语音芯片实现闹钟铃声及温度超限报警。用喇叭加语音芯片成本也不是很高,声音也不错,用蜂鸣器,成本低,电路结构简单,而且体积小。但功能有限,限于设计所需要的功能,用蜂鸣器和语音结合为最佳选择。所以我们采用方案1.2结合。2.5温度系统方案选择方案1:用热敏电阻等测温元件测出电压,再转换成对应的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。方案2:用DS18B20直接测温。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。经比较,我们选择方案2。温度实现只能通过外部的温度传感器来实现。经上网查阅及市场考察,DS18b20体积小,只有3只脚,电路接法简单。内部含有寄存器为我们设计实现上下限报警功能提供保障。精度为0.5°C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。2.6键盘控制方案选择方案1:购买集成键盘,采用矩阵形式连接。方案2:购买单个复位开关做成键盘。虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。单片机的IO口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。3..时钟温度系统总体设计初步确定设计系统由单片机主控模块、时钟模块、测温模块、语音模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如图所示。主主控器件AT89C52DB1820温度采集系统DS1320时间采集系统12864显示系统语音报警系统键盘控制系统三.硬件设计部分单片机最小系统电路设计1.1单片机芯片选择单片机采用52系列单片机。由ATMEL公司生产的AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。其芯片外观及引脚图如下:图1.1_1图1.1_2单片机管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写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”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”P3口也可作为AT89C52的一些特殊功能口,如下表所示:管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。1.3单片机最小系统单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。如下图所示:晶振电路晶振电路原理图如3-2:3-2晶振模块原理图选取原则:电容选取30pF,晶振为11.0592MHz。电源AT89C52单片机的供电电源是5V的直流电,我们直接通过USB电源线供电;EA非/Vpp脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源或是悬空,为了简化电路将这个引脚悬空。2时钟系统电路设计2.1时钟芯片选择我们采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。它采用主电源和备用电源双电源供电。它的工作电压范围2.0~5.5V,在2.2V时,小于300nA。它内部含有31个字节的静态RAM,可提供用户访问。

DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。内部的寄存器为我们调时,闹钟定时提供了寄存空间。备用用电源也实现了当系统断电后,时钟仍然可以保持。而且它是串行接口,与单片机通信所需要的接口少。不像DS12887等芯片并行通信需要很多IO口。2.2DS1302管脚及寄存器说明(1)DS1302的引脚排列Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。因此,我们vcc1用3V的纽扣电池作为备用电源,vcc2用系统电源作为主电源。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。

(2)DS1302的寄存器说明DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。2.3DS1302时钟电路DS1302时钟电路如下图所示:DS1302与单片机的连接仅需3条线:时钟线SCLK、数据线I/O和复位线RST。时钟线SCLK与P2.0相连,数据线I/O与P2.1相连,复位线RST与P2.2相连。由于DS1302是靠涓细电流充电来实现串行输入输出的,因此,在SCLK、I/O、RST线上要加上拉电阻,其中,它们的电流应该在500u~1mA之间,若电源为5V,则R约为5k,因此,我们的电阻R=4.7K。但是经过查阅有关资料知道如果DS1302不是接p0口可以不接上拉电阻,为了节省成本,所以没有接上拉电阻。在单电源与电池供电系统中,vcc1提供低电源并提供低功率的备用电源。Vcc2提供高电源作为芯片供电的主电源。因此,这里vcc1用3V纽扣电池,vcc2用5V的系统电源。晶振为32.768KHz接入X1、X2引脚。3温度系统电路3.1温度芯片的选择温度实现只能通过外部的温度传感器来实现。经上网查阅资料及市场考察,DS18b20体积小,只有3只脚,电路接法简单。它能够直接读出被测温度。内部含有寄存器为我们设计实现上下限报警功能提供保障。用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;精度为0.5°C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。3.2DS18B20内部结构描述DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8个字节的存储器,结构如图4.1所示。头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如图4.2所示。低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。温度温度LSB温度MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC图4.1高速暂存RAM结构图1字节2字节3字节4字节5字节6字节7字节8字节9字节EEROMTH用户字节1TL用户字节2TMTMR1R011111图4.2配置寄存器3.3DS18b20温度系统电路DS18B20系统电路如下:DS18B20有两种接法:一是单线接法即只接QT。这种方法应用它内部的寄生电源,因此在QT上要用一个MOSFET把I/O线只接拉到电源上。二是从vdd脚加上电源。方法一适合于远距离温度监控,不需要本地电源。而我们只是设计测温系统,选择方法二就行了,还有MOSFET极容易烧,我们不用它。Vdd接5V电源,vss接地,QT与P3.7相连。4语音芯片1760的介绍;ISD1700是华邦ISD公司2007年新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示(vAlert),双运作模式(独立&嵌入式),以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。一、特点:·可录、放音十万次,存储内容可以断电保留一百年·两种控制方式,两种录音输入方式,两种放音输出方式·可处理多达255段以上信息·有丰富多样的工作状态提示·多种采样频率对应多种录放时间·音质好,电压范围宽,应用灵活二、电特性:·工作电压:2.4V-5.5V,,最高不能超过6V·静态电流:0.5-1μA·工作电流:20mA1700引脚图5键盘控制系统设计按键需要6个,分别实现为时间调整、闹钟调整、时间加减、确认、移位。用单片机的6个I/O口接收控制信号,其电路图如下:6个按键的一端与地相连,另一端分别与P0.0、P0.1、P0.2、P0.3、P0.4、P0.5,按键一按下就输入低电平。6报警提示电路系统设计6.1报警电路由蜂鸣器、三极管、电阻,语音模块等构成电路图如下:与单片机的接口分别是P3.6语音模快RLAY=P0^7;播放REC=P0^6;录音ERASE=P0^5;擦除FWD=P0^4;下一曲7液晶显示系统设计7.112864液晶显示电路现在流行低碳生活,节能减排已成为人们处理事情首先想到的问题,所以这个显示的时候背光控制时间为10s左右,同时关背光的时候关掉显示器的电源,降低功耗。四、软硬件调试部分1)软件调试软件调试,我是在keil软件平台和单片机学习板上来完成的。当我写部分程序在keil软件经过调试,开始出现很多错误和警告。通过逐个错误排错及修改。得出下列经验,(1)调用函数最好在头文件中进行申明,主函数写在最后;(2)特别注意一些字母的大小写,一般要用英语文字写,最后对程序进行相应的扩展完善,由于按键不灵敏我们加上声音程序。2)硬件调试硬件调试,我们用万用表,单片机学习板来完成的。首先,我们调试LCD1602显示。我将液晶显示程序下载到单片机内,连好所有的线,通电后,观察显示结果。唉!液晶竟然不显示。我们用万用表测试各连线是否导通及某些点的电压,竟然有些线路没连通啊!然后,我们调试DS1302时钟芯片。连上按键模块,液晶显示模块,单片机最小系统,时钟系统,温度系统,连接所有线,通上电源后,观察到液晶显示能正常显示啦,但有乱码显示。后面我检测程序出错啦;改正程序后,没乱码啦且能够正常显示啦,然后逐渐完善功能。整个硬件调试完成啦!五.总结与体会想到课题以后,讨论整个过程如何实施,以及选择哪个课题进行设计。在初步方案确定好后,开始研究所需的器材,在列出初稿后,买好器材,便进入了设计阶段。经过将一个五一的设计,反复地讨论各个环节,反复调试,终于完成LCD液晶时钟设计。虽然达到设计要求,并完成了一定发挥部分,但单片机的资源并没完全得到应用。这是不用单片机学习板,自己动手制作出来的作品。在本次设计是液晶,单片机,语音,键盘控制的综合应用,其间,遇到许多困难。我真真正正的意识到,在写程序时,逻辑思维要清晰,要有好的写程序的层次感,模块化清晰,要有耐心。这样出错啦,才能及时知道问题出在哪。在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。六使用说明:刚上电;为主页面;S5键为进入菜单;进入菜单:可以调时;设定闹钟;设定你的主页面;调背光显示时间;播放铃声;S6;为确认键加开关背光;但背光灭了时;按下S6;开背光;倒计时30s;因为语音模块内存不大;所以就没录语音整点报时啦,内存两首铃声。如果可以买个内存大的语音芯片完全可以改装的更好。功能简介:具有年,月,日,时间,星期,两个闹钟设置功能;整点报时;温度测量;LCD液晶时钟系统设计原理电路图各个模块子函数voidDelayus(UINT8t) //微妙延时voidDelayms(UINT16t) //1ms延时UINT8scan_key(void) //读按键值voidTiao(void) /////////////////////调节按键voidTiem() //定时器初始化voidJieRi(void)//以下是公历节日voidYear(void) //年voidTiaoShi(void) //调时函数voidTiaoNao(void) //调闹钟函数voidTiaoXiu(void) // 调休眠函数voidspk_Timer(void) //闹铃voidLinSheng(void) //铃声调节voidINT0_time()interrupt0 //菜单外部中断0函数voidtimer0()interrupt1 //定时器0定时休眠voidled_Timer() //关、开背光UINT8ZhengShi() //判断整点到否voidBaoDian() //整点报时voidmain(void) //主函数子函数具体内容:#include<main.h>#include<YB12864ZA.h>UINT8DateTime[7];UINT8dispstr1[16]="20年月日";UINT8dispstr2[16]="星期℃";UINT8idatadispstr3[9]="";UINT8idatadispstr4[16]="菜单S5";UINT8idatadispstr9[16]="闹1";UINT8idatadispstr10[16]="闹2";UINT8idatadispstr11[16]="显示时间";UINT8codedispstr5[12]="S1:调时间";UINT8codedispstr6[12]="S2:调闹钟";UINT8codedispstr7[16]="S3:调显示时间";UINT8codedispstr8[14]="S4:播放歌曲";UINT8idatadispstr12[6]="铃声";UINT8idatadispstr13[6]="铃声";UINT8codelin1[14]="S1:放音PLAY";UINT8codelin2[15]="S2:下一曲FWD";UINT8codelin3[13]="S3:录音REC";UINT8codelin4[16]="S4:擦删ERASE";UINT8codeLCD1[12]="元旦节快乐";UINT8codeLCD2[12]="世界湿地日";UINT8codeLCD3[12]="世界气象日";UINT8codeLCD4[12]="国际妇女节";UINT8codeLCD5[12]="中国植树节";UINT8codeLCD6[14]="消费者权益日";UINT8codeLCD7[10]="世界水日";UINT8codeLCD8[12]="愚人节快乐";UINT8codeLCD9[12]="中国清明节";UINT8codeLCD10[12]="世界地球日";UINT8codeLCD11[12]="国际劳动节";UINT8codeLCD12[12]="中国青年节";UINT8codeLCD13[12]="世界护士节";UINT8codeLCD14[12]="国际儿童节";UINT8codeLCD15[12]="世界环境日";UINT8codeLCD16[12]="国际爱眼日";UINT8codeLCD17[12]="世界土地日";UINT8codeLCD18[12]="国际禁毒日";UINT8codeLCD19[12]="香港回归日";UINT8codeLCD20[12]="中国建军节";UINT8codeLCD21[12]="中国老师节";UINT8codeLCD22[16]="九一八事件纪念日";UINT8codeLCD23[12]="中国国庆节";UINT8codeLCD24[12]="世界动物日";UINT8codeLCD25[12]="世界邮政日";UINT8codeLCD26[16]="辛亥革命纪念日";UINT8codeLCD27[16]="澳门回归纪念日";UINT8codeLCD28[8]="平安夜";UINT8codeLCD29[8]="圣诞节";UINT8SetTime1[17]={0x00,0x10,0x10,0x10,0x05,0x05,0x13,0x00,0x00,0x00,0,1,0x00,0x00,0x00,0,1}; //设定时间,闹钟最初始值codeunsignedcharMAX[17]={90,90,36,49,19,7,153,90,36,7,2,5,90,36,7,2,5};//调时最大值UINT8codeDAY[8]="7123456";UINT16codedimer[5]={30,60,120,300,600};UINT8S=60,F=0;charY=0UINT8S=60,F=0;charY=0;charbiaozhi=0;intW1=0,W2=0;UINT8n;sbitG=P3^3;intK=0;intH;staticunsignedintcount=0;sbitled=P2^7;sbitRLAY=P0^7;sbitREC=P0^6;sbitERASE=P0^5;sbitFWD=P0^4;#defineS10x0e#defineS20x0d#defineS30x0b#defineS40x07、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidDelayus(UINT8t) //微妙延时{ UINT8i; i=t; for(;i>0;i--);}voidDelayms(UINT16t) //1ms延时{ UINT16i,j; for(i=0;i<t;i++) for(j=0;j<114;j++);}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、UINT8scan_key(void) //读按键值{ UINT8key; if((P0&0x0f)==0x0f)return(0xff); Delayms(10); if((P0&0x0f)==0x0f)return(0xff); key=(P0&0x0f); while((P0&0x0f)!=0x0f); return(key);}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidTiao(void) //调节按键{ UINT8temp; temp=scan_key(); switch(temp) { caseS1:SetTime1[K-1]++; if((SetTime1[K-1]==10)||(SetTime1[K-1]==26)||(SetTime1[K-1]==42)||(SetTime1[K-1]==58)||(SetTime1[K-1]==74)) { SetTime1[K-1]=SetTime1[K-1]+6; } SetTime1[K-1]%=MAX[K-1]; break; caseS2:if(SetTime1[K-1]>0) { SetTime1[K-1]--; if((SetTime1[K-1]==15)||(SetTime1[K-1]==31)||(SetTime1[K-1]==47)||(SetTime1[K-1]==63)||(SetTime1[K-1]==79)) SetTime1[K-1]=SetTime1[K-1]-6; } else SetTime1[K-1]=MAX[K-1]-1; break; caseS3:K++; if(K==18) { K=8; } else if(K==8){ K=1;} break; // caseS4:Y++; // Y%=2; } H=K;}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidTiem() //定时器初始化{ TMOD=0x01; TH0=0XDC; TL0=0X00; ET0=1; EA=1; TR0=1; IT0=1; EX0=1;}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidJieRi(void)//以下是公历节日{ if(DateTime[4]==0x01&&DateTime[3]==0x01){ Dis_Str(3,0,LCD1);} elseif(DateTime[4]==0x02&&DateTime[3]==0x02){ Dis_Str(3,0,LCD2);} elseif(DateTime[4]==0x02&&DateTime[3]==0x10){ Dis_Str(3,0,LCD3);} elseif(DateTime[4]==0x03&&DateTime[3]==0x08){ Dis_Str(3,0,LCD4);} elseif(DateTime[4]==0x03&&DateTime[3]==0x12){ Dis_Str(3,0,LCD5);} elseif(DateTime[4]==0x03&&DateTime[3]==0x15){ Dis_Str(3,0,LCD6);} elseif(DateTime[4]==0x03&&DateTime[3]==0x22){ Dis_Str(3,0,LCD7);} elseif(DateTime[4]==0x04&&DateTime[3]==0x01){ Dis_Str(3,0,LCD8);} elseif(DateTime[4]==0x04&&DateTime[3]==0x05){ Dis_Str(3,0,LCD9);} elseif(DateTime[4]==0x04&&DateTime[3]==0x22){ Dis_Str(3,0,LCD10);} elseif(DateTime[4]==0x05&&DateTime[3]==0x01){ Dis_Str(3,0,LCD11);} elseif(DateTime[4]==0x05&&DateTime[3]==0x04){ Dis_Str(3,0,LCD12);} elseif(DateTime[4]==0x05&&DateTime[3]==0x12){ Dis_Str(3,0,LCD13);} elseif(DateTime[4]==0x06&&DateTime[3]==0x01){ Dis_Str(3,0,LCD14);} elseif(DateTime[4]==0x06&&DateTime[3]==0x05){ Dis_Str(3,0,LCD15);} elseif(DateTime[4]==0x06&&DateTime[3]==0x06){ Dis_Str(3,0,LCD16);} elseif(DateTime[4]==0x06&&DateTime[3]==0x25){ Dis_Str(3,0,LCD17);} elseif(DateTime[4]==0x06&&DateTime[3]==0x26){ Dis_Str(3,0,LCD18);} elseif(DateTime[4]==0x07&&DateTime[3]==0x01){ Dis_Str(3,0,LCD19);} elseif(DateTime[4]==0x08&&DateTime[3]==0x01){ Dis_Str(3,0,LCD20);} elseif(DateTime[4]==0x09&&DateTime[3]==0x10){ Dis_Str(3,0,LCD21);} elseif(DateTime[4]==0x09&&DateTime[3]==0x18){ Dis_Str(3,0,LCD22);} elseif(DateTime[4]==0x10&&DateTime[3]==0x01){ Dis_Str(3,0,LCD23);} elseif(DateTime[4]==0x10&&DateTime[3]==0x04){ Dis_Str(3,0,LCD24);} elseif(DateTime[4]==0x10&&DateTime[3]==0x09){ Dis_Str(3,0,LCD25);} elseif(DateTime[4]==0x10&&DateTime[3]==0x10){ Dis_Str(3,0,LCD26);} elseif(DateTime[4]==0x12&&DateTime[3]==0x20){ Dis_Str(3,0,LCD27);} elseif(DateTime[4]==0x12&&DateTime[3]==0x24){ Dis_Str(3,0,LCD28);} elseif(DateTime[4]==0x12&&DateTime[3]==0x25){ Dis_Str(3,0,LCD29);} elseDis_Str(3,0,dispstr4);}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidYear(void) //年{ UINT8ReYear; ReYear=DateTime[6]%18;//农历年模12,取余运算 switch(ReYear) { case0:Dis_Str(1,0,"龙年");break;//余0即整除农历龙年 case1:Dis_Str(1,0,"蛇年");break;//蛇年 case2:Dis_Str(1,0,"马年");break; case3:Dis_Str(1,0,"羊年");break; case4:Dis_Str(1,0,"猴年");break; case5:Dis_Str(1,0,"鸡年");break; case6:Dis_Str(1,0,"狗年");break; case7:Dis_Str(1,0,"猪年");break; case8:Dis_Str(1,0,"鼠年");break; case9:Dis_Str(1,0,"牛年");break; case10:Dis_Str(1,0,"虎年");break; case11:Dis_Str(1,0,"兔年");break; }}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidTiaoShi(void) //调时函数{ lcd_wcmd(0x01); Delayms(1); spk=0; Delayms(100); spk=1; while(G!=0) { Tiao(); Delayms(1); count++; if(((H-1)==0)&&(count>1))//???????? { dispstr3[6]=''; dispstr3[7]=''; } else { dispstr3[6]=SetTime1[0]/16+0x30; dispstr3[7]=SetTime1[0]%16+0x30; } if((H-1)==1&&(count>1)) { dispstr3[3]=''; dispstr3[4]=''; } else { dispstr3[3]=SetTime1[1]/16+0x30; dispstr3[4]=SetTime1[1]%16+0x30; } if((H-1)==2&&(count>1)) { dispstr3[0]=''; dispstr3[1]=''; } else { dispstr3[0]=SetTime1[2]/16+0x30; dispstr3[1]=SetTime1[2]%16+0x30; } if((H-1)==3&&(count>1)) { dispstr1[10]=''; dispstr1[11]=''; } else { dispstr1[10]=SetTime1[3]/16+0x30; dispstr1[11]=SetTime1[3]%16+0x30; } if((H-1)==4&&(count>1)) { dispstr1[6]=''; dispstr1[7]=''; } else { dispstr1[6]=SetTime1[4]/16+0x30; dispstr1[7]=SetTime1[4]%16+0x30; } if((H-1)==5&&(count>1)) dispstr2[4]=''; else dispstr2[4]=DAY[SetTime1[5]&0x07]; if((H-1)==6&&(count>1)) { dispstr1[2]=''; dispstr1[3]=''; } else { dispstr1[2]=SetTime1[6]/16+0x30; dispstr1[3]=SetTime1[6]%16+0x30; } dispstr3[2]=':'; dispstr3[5]=':'; Dis_Str(0,0,dispstr1); Dis_Str(2,0,dispstr2); Dis_Str(1,3,dispstr3); count%=3; } DS1302_Set1302(SetTime1); Delayms(200); lcd_wcmd(0x01); Delayms(1); spk=0; Delayms(50); spk=1;}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidTiaoNao(void) //调闹钟函数{ spk=0; Delayms(100); spk=1; lcd_wcmd(0x01); Delayms(1); while(G!=0) { Tiao(); Delayms(1); count++; if(((H-1)==7)&&(count>1))//???????? { dispstr9[7]=''; dispstr9[8]=''; } else { dispstr9[7]=SetTime1[7]/16+0x30; dispstr9[8]=SetTime1[7]%16+0x30; } if(((H-1)==8)&&(count>1)) { dispstr9[4]=''; dispstr9[5]=''; } else { dispstr9[4]=SetTime1[8]/16+0x30; dispstr9[5]=SetTime1[8]%16+0x30; } if(((H-1)==9)&&(count>1)) { dispstr9[10]=''; } else { dispstr9[10]=DAY[SetTime1[9]&0x07]; } if(((H-1)==10)&&(count>1)) { if(SetTime1[10]==0) { dispstr9[12]=''; dispstr9[13]=''; dispstr9[14]=''; W1=0; } else { dispstr9[12]=''; dispstr9[13]=''; dispstr9[14]=''; W1=1; } } else { if(SetTime1[10]==0) { dispstr9[12]='N'; dispstr9[13]='o'; dispstr9[14]=''; W1=0; } else { dispstr9[12]='Y'; dispstr9[13]='e'; dispstr9[14]='s'; W1=1; } } if(((H-1)==11)&&(count>1)) { dispstr12[4]=''; } else { dispstr12[4]=SetTime1[11]+0x30; } if(((H-1)==12)&&(count>1)) { dispstr10[7]=''; dispstr10[8]=''; } else { dispstr10[7]=SetTime1[12]/16+0x30; dispstr10[8]=SetTime1[12]%16+0x30; } if(((H-1)==13)&&(count>1)) { dispstr10[4]=''; dispstr10[5]=''; } else { dispstr10[4]=SetTime1[13]/16+0x30; dispstr10[5]=SetTime1[13]%16+0x30; } if(((H-1)==14)&&(count>1)) dispstr10[10]=''; else dispstr10[10]=DAY[SetTime1[14]&0x07]; if(((H-1)==15)&&(count>1)) { if(SetTime1[15]==0) { dispstr10[12]=''; dispstr10[13]=''; dispstr10[14]=''; W2=0; } else { dispstr10[12]=''; dispstr10[13]=''; dispstr10[14]=''; W2=2; } } else { if(SetTime1[15]==0) { dispstr10[12]='N'; dispstr10[13]='o'; dispstr10[14]=''; W2=0; } else { dispstr10[12]='Y'; dispstr10[13]='e'; dispstr10[14]='s'; W2=2; } } if(((H-1)==16)&&(count>1)) dispstr13[4]=''; else dispstr13[4]=SetTime1[16]+0x30; dispstr9[6]=':'; dispstr10[6]=':'; Dis_Str(0,0,dispstr12); Dis_Str(3,0,dispstr13); Dis_Str(1,0,dispstr9); Dis_Str(2,0,dispstr10); count%=3; } Delayms(500); lcd_wcmd(0x01); Delayms(1); spk=0; Delayms(50); spk=1; }、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidTiaoXiu(void) // 调显示时间函数{ charn=0; UINT8temp; spk=0; Delayms(100); spk=1; lcd_wcmd(0x01); Delayms(1); while(G!=0) { temp=scan_key(); switch(temp) { caseS1:n++; n%=5; break; caseS2:if(n>0) n--; else n=4; break; } F=dimer[n]/60; S=dimer[n]%60; dispstr11[8]=F/10+0x30; dispstr11[9]=F%10+0x30; dispstr11[10]=':'; dispstr11[11]=S/10+0x30; dispstr11[12]=S%10+0x30; Dis_Str(2,0,dispstr11); } Delayms(500); lcd_wcmd(0x01); Delayms(1); spk=0; Delayms(50); spk=1; }、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidspk_Timer(void) //启动闹铃函数{ staticcharn2=1; staticcharn1=1; if((SetTime1[7]==DateTime[1])&&(SetTime1[8]==DateTime[2])&&(SetTime1[9]==DateTime[5])&&(W1==1)) { while(n2) { play(50); Delayms(1000); RLAY=0; Delayms(1000); RLAY=1; Delayms(500); n2=0; } n2=0; } else { n2=1; } if((SetTime1[10]==DateTime[1])&&(SetTime1[11]==DateTime[2])&&(SetTime1[12]==DateTime[5])&&(W2==2)) { while(n1) { play(50); Delayms(1000); RLAY=0; Delayms(1000); RLAY=1; Delayms(500); n1=0; } n1=0; } else { n1=1; }}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidLinSheng(void) //播放铃声函数{ UINT8temp; spk=0; Delayms(100); spk=1; lcd_wcmd(0x01); Delayms(1); while(G) { Dis_Str(0,0,lin1); Dis_Str(1,0,lin2); Dis_Str(2,0,lin3); Dis_Str(3,0,lin4); temp=scan_key(); switch(temp) { caseS1:RLAY=0; Delayms(1000); RLAY=1; break; caseS2:FWD=0; Delayms(500); FWD=1; break; caseS3:REC=0; while(!S3); REC=1; break; caseS4:ERASE=0; Delayms(500); ERASE=1; break; } } spk=0; Delayms(100); spk=1; lcd_wcmd(0x01); Delayms(1);}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidINT0_time()interrupt0 //菜单外部中断0函数{ UINT8temp; spk=0; Delayms(100); spk=1; lcd_wcmd(0x01); Delayms(1); while(G) { Dis_Str(0,1,dispstr5); Dis_Str(1,1,dispstr6); Dis_Str(2,1,dispstr7); Dis_Str(3,1,dispstr8); temp=scan_key(); switch(temp) { caseS1:K=1;TiaoShi();break; caseS2:K=8;TiaoNao();break; caseS3:TiaoXiu();break; caseS4:LinSheng();break; } } spk=0; Delayms(100); spk=1; lcd_wcmd(0x01); Delayms(1);} 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidtimer0()interrupt1 //定时器0定时休眠{ staticunsignedcharnum=0; TH0=0XDC; TL0=0X00; num++; if(num==100) { num=0; if(S==0) { if(F>0) F--; S=60; } S--; } if((S==0)&&(F==0)) { led=1; TR0=0; }}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidled_Timer() //关、开背光{ if(G!=1) { led=!led; if((S==0)&&(F==0)) { F=dimer[n]/60; S=dimer[n]%60; TR0=1; } }}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、UINT8ZhengShi() //判断整点到否{ chari; for(i=0;i<24;i++) { if(DateTime[2]==baoshi[i]&&DateTime[1]==0) { zd=baoshi[i]; biaozhi=1; } } if(DateTime[1]>5) { biaozhi1=0; biaozhi=0; } return(zd);} //、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、voidBaoDian() //整点报时{ UINT8Hour; staticcharbiaozhi1=0; staticcharout=0; Hour=ZhengShi(); if(biaozhi1==0) { if(biaozhi==1) { while(Hour) { FWD=0; Delayms(500); FWD=1; Delayms(2000); Hour--; } out=1; biaozhi=0; biaozhi1=1; } if(out==1) { play(50); Delayms(1000); RLAY=0; Delayms(1000); RLAY=1; Delayms(500); out=0; } } if(DateTime[1]>2) { biaozhi1=0; }}voidmain(void) //主函数{ UINT16T; Tiem(); led=0; Delayms(100); Lcd_Init(); Delayms(100); DS1302_Set1302(SetTime1); while(1) { count++; DS1302_Get1302(DateTime); dispstr1[2]=DateTime[6]/16+0x30; dispstr1[3]=DateTime[6]%16+0x30; dispstr1[6]=DateTime[4]/16+0x30; dispstr1[7]=DateTime[4]%16+0x30; dispstr1[10]=DateTime[3]/16+0x30; dispstr1[11]=DateTime[3]%16+0x30; Dis_Str(0,0,dispstr1); dispstr2[4]=DAY[DateTime[5]&0x07]; dispstr3[0]=DateTime[2]/16+0x30; dispstr3[1]=DateTime[2]%16+0x30; dispstr3[3]=DateTime[1]/16+0x30; dispstr3[4]=DateTime[1]%16+0x30; if(count>3) { dispstr3[5]=''; dispstr3[2]=''; } else { dispstr3[5]=':'; dispstr3[2]=':'; } dispstr3[6]=DateTime[0]/16+0x30; dispstr3[7]=DateTime[0]%16+0x30; spk_Timer(); Dis_Str(1,3,dispstr3); T=read_temp(); if(T<0) { if(T>-10) dispstr2[9]='-'; else dispstr2[8]='-'; } dispstr2[8]=T/100+0x30; dispstr2[9]=T/10%10+0x30; dispstr2[10]='.'; dispstr2[11]=T%10+0x30; Dis_Str(2,0,dispstr2); dispstr4[11]=F/10+0x30; dispstr4[12]=F%10+0x30; dispstr4[13]=':'; dispstr4[14]=S/10+0x30; dispstr4[15]=S%10+0x30; Year(); JieRi(); led_Timer(); count%=4; }S1 S2 S3 S4 S5 S6 S7SPK开关电源TR电源指示灯电源指示灯开关MKS1:加 S5:菜单S2:减 S6:确认S3:移位 S7:复位ganemploymenttribunalclaimEmploymenttribunalssortoutdisagreementsbetweenemployersandemployees.Youmayneedtomakeaclaimtoanemploymenttribunalif:youdon'tagreewiththedisciplinaryactionyouremployerhastakenagainstyouyouremployerdismissesyouandyouthinkthatyouhavebeendismissedunfairly.Formoreinformationaboutdismissalandunfairdismissal,see

Dismissal.Youcanmakeaclaimtoanemploymenttribunal,evenifyouhaven't

appealed

againstthedisciplinaryactionyouremployerhastakenagainstyou.However,ifyouwinyourcase,thetribunalmayreduceanycompensationawardedtoyouasaresultofyourfailuretoappeal.Rememberthatinmostcasesyoumustmakeanapplicationtoanemploymenttribunalwithinthreemonthsofthedatewhentheeventyouarecomplainingabouthappened.Ifyourapplicationisreceivedafterthistimelimit,thetribunalwillnotusuallyacceptit.Ifyouareworriedabouthowthetimelimitsapplytoyou,takeadvicefromoneoftheorganisationslistedunder

Furtherhelp.Employmenttribunalsarelessformalthansomeothercourts,butitisstillalegalprocessandyouwillneedtogiveevidenceunderanoathoraffirmation.Mostpeoplefindmakingaclaimtoanemploymenttribunalchallenging.Ifyouarethinkingaboutmakingaclaimtoanemploymenttribunal,youshouldgethelpstraightawayfromoneoftheorganisationslistedunder

Furtherhelp.Ifyouarebeingrepresentedbyasolicitoratthetribunal,theymayaskyoutosignanagreementwhereyoupaytheirfeeoutofyourcompensationifyouwinthecase.Thisisknownasa

damages-basedagreement.InEnglandandWales,yoursolicitorcan'tchargeyoumorethan35%ofyourcompensation

ifyouwinthecase.Ifyouarethinkingaboutsigningupfor

adamages-basedagreement,youshouldmakesureyou'reclearaboutthetermsoftheagreement.Itmightbebesttogetadvicefromanexperiencedadviser,forexample,ataCitizensAdviceBureau.

TofindyournearestCAB,includingthosethatgiveadvicebye-mail,clickon

nearestCAB.Formoreinformationaboutmakingaclaimtoanemploymenttribunal,see

Employmenttribunals.The(lackof)airupthereWatchmCaymanIslands-basedWebb,theheadofFifa'santi-racismtaskforce,isinLondonfortheFootballAssociation's150thanniversarycelebrationsandwillattendCity'sPremierLeaguematchatChelseaonSunday."IamgoingtobeatthematchtomorrowandIhaveaskedtomeetYayaToure,"hetoldBBCSport."Formeit'sabouthowhefeltandIwouldliketospeaktohimfirsttofindoutwhathisexperiencewas."Uefahas

openeddisciplinaryproceedingsagainstCSKA

forthe"racistbehaviouroftheirfans"during

City's2-1win.MichelPlatini,presidentofEuropeanfootball'sgoverningbody,hasalsoorderedanimmediateinvestigationintothereferee'sactions.CSKAsaidtheywere"surprisedanddisappointed"byToure'scomplaint.InastatementtheRussiansideadded:"WefoundnoracistinsultsfromfansofCSKA."Agehasreachedtheendofthe

温馨提示

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

评论

0/150

提交评论