• 986.88 KB
  • 2022-04-22 11:23:50 发布

《电子综合设计》数字钟设计文档

  • 76页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《电子综合设计》数字钟设计文档多功能数字钟摘要本系统以单片机AT89C55WD为核心控制部件。设计了实时时钟日历电路、环境温度显示电路、人机接口键盘电路、液晶显示电路等。其中实时时钟芯片采用串行通讯的DS1302,可实现年月日星期时分秒等时间信息的采集、时间调节和闹钟功能。温度采集模块采用DS18B20集成温度传感器,可对现场环境温度进行实时采集,并且对温度超限进行报警提示。人机接口键盘模块中,键盘由简单的8个按键组成,利用键盘的延迟消抖方法实现。操作非常简便和人性化。液晶显示模块则由LCD1602实现两行16个字符的液晶显示。通过交流电源(220V)降压整流为直流电源(9V),通过以7805芯片为核心的集成模块输出直流5V电压,供电来实现以上功能。设计能支持时、分、秒的时钟,时钟有时间调整功能,具有闹钟功能,具有秒表功能,倒计时功能。除上述基本要求外,又新增以下功能:(1)时间显示可实现12/24显示切换(2)提供闹钟的开关功能,并显示开关状态(3)倒计时的时间存储功能(4)放四种不同的音乐功能(5)生日闹钟(6)闹钟播放音乐(7)整点报时功能(8)温度过限音乐报警功能(9)开机显示功能(10)“电子日历”功能(11)温度报警功能(12)发声倒计时功能。关键字:单片机人机接口DS1302DS18B20LCD16027805温度报警 多功能数字钟实物图 数字钟设计报告一、设计任务与要求1、设计任务设计制作一个多功能数字钟。2、设计要求(1)基本要求(1)时钟具有计时功能,能够显示时、分、秒;(2)时钟有时间调整功能;(3)时钟具有闹钟功能;(4)时钟具有秒表计时功能;(5)时钟具有倒计时功能。(2)提高要求(1)时钟有开机显示功能;(2)时钟增加了“电子日历”功能;(3)时钟有12进制与24进制的转换功能;(4)时钟具有整体报时功能;(5)时钟附带有一个温度计功能,显示精度为0.5度;(6)时钟具有温度报警功能;(7)时钟能够提供二个一般闹钟和一个生日闹钟功能;(8)时钟提供播放四种不同的音乐功能;(9)时钟提供闹钟的开关功能,并显示开关状态;(10)时钟的秒表提供了连续计时功能,能够连续计时三次;(11)时钟具有时间存储功能;(12)时钟具有发声倒计时功能;(13)其它发挥。(3)数字钟具体功能及其按键1、开机显示界面K1:移动控制键;K2:显示复位键;K3:左右移动控制键;K4:更换界面键;K5:逐个显示控制键。2、时间显示界面K1:时间减控制键;K2:时间加控制键;K3:时间位移动键;74 K4:更换界面键;K5:12进制与24进制更换键;K7:闹钟停止控制键;K8:闹钟睡眠控制键。3、温度显示界面K1:温度减控制键;K2:温度加控制键;K3:温度位移动键;K4:更换界面键;K5:报警停止键。4、闹钟功能界面K1:闹钟时间加控制键;K2:闹钟时间减控制键;K3:闹钟时间位移动键;K4:更换界面键;K5:一般闹钟选择控制键;K6:生日闹钟显示控制键;K7:闹钟停止控制键;K8:闹钟开关控制键。5、秒表功能界面K1:秒表开始计时控制键;K2:秒表停止计时控制键;K3:秒表连续计时控制键;K4:更换界面键;K5:存储秒表时间控制键。6、倒计时功能界面K1:倒计时加控制键;K2:倒计时减控制键;K3:倒计时时间位移动键;K4:更换界面键;K5:倒计时开始停止控制键;K6:倒计时发声控制键;K7:倒计时清零控制键。二、总体方案比较与论证方案一:采用中小规模集成电路实现组合逻辑与时序逻辑电路设计,用振荡器产生的稳定的高频脉冲信号,作为数字钟的时间基准,再经分频器输出标准秒脉冲。进而得到分和小时,计数器的输出经译码器送显示器。此方案能实现数字钟的基本功能,但其他扩展功能的实现非常有限。方案二:基于单片机来实现。目前单片机技术比较成熟,功能也比较强大,时钟芯74 片采用DS1302,温度传感器采用DS18B20。显示采用1602液晶显示。此方案基本原理框图如图2-1所示图2-1原理框图此系统硬件简洁,将复杂的硬件功能用软件实现,控制多个硬件电路的执行因此系统控制灵活,能很好地满足本题的基本要求和提高要求。而且编程灵活、调试方便。从这两种电路设计方案的比较而言,利用单片机及外围电路编写软件程序来设计数字钟,简单灵活,而且可扩展各种功能,能完全达到设计要求,体现了现代计算机工具的方便、简捷、准确性。故采用第二种方案。三、模块电路分析与比较1、单片机选择方案一:由于程序代码比较多,有14K左右。采用Flash比较小的单片机,然后进行外部存储器扩展。可以选用AT89S系列,例如AT89S52,然后进行外部存储器扩展,但是,考虑到仿真比较麻烦,同时还要进行存储器的扩展,这样使电路更加复杂,不便于硬件的设计、制作。方案二:采用Flash比较大的单片机,例如AT89S54,AT89C55WD,但是AT89S54非常昂贵,使用不经济,然而AT89C55WD能够实现同样的功能,也比较便宜,抗干扰能力强,这样不仅比较经济,也使电路得到了简化,有利于硬件系统的设计、制作。基于以上分析,考虑到AT89C55WD单片机比较便宜,同时硬件电路也比较简单,有利于硬件系统的设计、制作,因此,我们采用方案二,选用AT89C55WD单片机。74 2、时钟方案选择方案一:使用单片机内部的定时/计数器,采用软件实现,可以降低系统成本,缺点是误差较大。一般用在对时间精度要求不高的场合,而且当出现断电等情况程序重新运行时,需要对时间用按键进行校正。方案二:在系统中扩展外部时钟芯片DS1302。DS1302时钟芯片内含一个实时时钟/日历电路和32字节静态RAM,可提供秒、分、时、日、日期月、年的信息,每月和闰年的信息可自动调整。通过简单的SPI串行接口,与单片机仅需用复位、数据和时钟三根I/O口线进行通信,同时DS1302可外接备用电源。在主电源关闭的情况下,也能保持时钟的连续运行。完全能满足题目掉电保护功能的要求。基于以上分析,我们决定采用串行通讯的DS1302。电路结构简单,程序容易编制,时钟精高,容易调整,具有掉电保护功能。这样就可以使用单片机内部的定时/计数器来实现秒表和倒计时的设计,其中我们用T0来实现时间的闪烁,T1来实现秒表计时和倒计时功能,能够充分的利用单片机的资源。3、温度采集方案选择 方案一:使用热敏电阻或温度传感器AD590,把测得的模拟量送入ADC0809的其中一个通道进行A/D转换,将转换后所得数字量送入单片机进行温度值变换之后显示。电路比较复杂。且精度难以保证。方案二:采用单线数字温度传感器DS18B20,DS18B20具有许多优点,该传感器结构简单,不需外接电路,数据传输采用one-wire总线,可用一根I/O数据线即供电又传输数据,在-10℃--+85℃范围内精度为±0.5℃,且分辨率较高,重复性和可靠性好。基于以上分析,方案二完全符合电路设计要求,同时电路简单,操作容易,对DS18B20编程也比较容易,故在本设计中采用方案二。4、显示模块的选择 方案一:采用数码管显示。数码管亮度高、体积小、重量轻,但其显示信息简单、有限,并且需要较高的驱动能力,功耗高,人机交互功能差,较难控制,在本题目中应用受到很大的限制。方案二:采用液晶显示。液晶显示功耗低,轻便防震。由于本题显示信息比较复杂,采用液晶显示界面友好清晰,操作方便,显示信息丰富。基于以上分析,由于系统要显示的信息较多,加上数码管操作不便,必须反复进行扫描,否则显示亮度就会变暗,故本设计中采用方案二。综上所述,经方案对比,在实际设计应用中使用AT89C55WD单片机,时钟芯片DS1302,温度传感器DS18B20,和LCD1602液晶等芯片,使电路整体结构简单,功能齐全,性能稳定、可靠,设计合理。74 四、各模块电路原理分析及原理图1、 单片机AT89C55WD模块原理及电路图单片机是整个硬件系统的核心,它即协调整机工作,又是数据处理器,是软硬件系统连接的桥梁。AT89C55WD单片机性能好,价格便宜,其片内含有20KBFlash程序存储器,存储器可循环写入/擦除10000次,具有256B内部RAM,32条可编程I/O口线,3个定时器/计数器,具有8个中断源和4个优先级的中断结构,可编程全双工串行通道等功能,因此,我们选用AT89C55WD单片机来满足程序容量大,控制较为复杂的特点,以完成题目的基本要求和发挥部分的要求。具体原理图如图4-1所示。图4-1单片机最小系统2、时钟模块原理及电路图时钟模块采用时钟芯片DS1302,DS1302是美国Dallas公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31~8的用于临时性存放数据的RAM寄存器。DS1202具有主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的引脚如图4-2:74 图4-2DS1302引脚图VCC1为后备电源VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCCI+0.2V时,VCC2给DS1302供电。当VCC2小于VCC1时,DS1302由VCC1供电。X1、X2为振荡源,外接32.768Hz晶振。RST是复位/片选线,上电运行时,在VCC≥2.5V之前RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。DS1302与单片机接口原理图如图4-3:图4-3DS1302与单片机接口原理图3、温度采集模块原理及电路图DS18B20采用3脚PR-35封装,其引脚图如图4-4所示。图4-4DS18B20引脚图74 智能温度传感器DS18B20将温度传感器、A/D传感器、寄存器、接口电路集成在一个芯片中,可实现直接数字化输出和测试,它的测温范围从-55℃~+l25℃,且在-l0℃~+85℃之间温度精度为±0.5℃,并且转换精度可编程控制。芯片出厂时为默认12位转换精度。DS18B20工作在9位、10位、11位和12位模式时的温度分辨依次为0.5℃、0.25℃、0.125℃、0.0625℃。和DS18B20线连接的微控制器的l/O口如无内部上拉电阻,必须在总线上加一个上拉电阻。阻值以5K为佳,DS18B20接收到温度转换命令(44H)后开始转换,转换完成后温度以16位带符号扩展的二进制补码形式,存储在scratchpadRAM中的第0、1字节。在执行读scratchpadRAM命令(OBEH)后,可将这两字节的温度值通过单总线传给主CPU。DS18B20的接口原理图如图4-5:图4-5DS18B20与单片机接口原理图4、显示模块电路原理及电路图LCD1602是可以显示两行每行显示l6个字符的液晶显示器。LCD1602采用8位数据传送,通过单片机的并行接口与液晶显示模块直接连接,单片机通过对这些接口的操作,实现对液晶显示模块的控制,完成相应的显示。使用LCD做数据显示,一旦数据写入LCD,数据就会一直显示在液晶屏上,不必像数码管显示那样要定时扫描才能将数据显示,其显示效果远远超过数码管显示,LCD1602与单片机接口原理图:74 图4-6LCD1602与单片机接口原理图5、键盘模块原理及电路图本系统有八个按键,操作非常简单人性化,为了提高CPU的工作效率,采用中断工作方式,同时采用中断也有一部分防抖功能,这样通过按键来实现各种功能要求,设计方案原理图如图4-7所示:图4-7键盘模块原理图6、闹钟播放音乐和温度过限报警模块原理及电路图闹铃响和温度过限报警采用单片机编程以音乐的方式实现,并最终以蜂鸣器播放出。蜂鸣器驱动电路如图4-8:闹钟采用音乐报警方式,其中音乐播放是本设计的重要创新部分,音乐播放功能没有使用任何音乐芯片,而是采用模拟音乐的频率,产生频率表,用单片机的一个口线输出,驱动蜂鸣器,输出音乐。闹钟不仅实现每天两个的功能,而且还增加了生日闹钟的功能,采用与实际相近的音乐提醒,跟使我们的实际贴近生活。在温度模块中,不仅能够实现温度的高精度采集和显示,而且还增加了温度报警功能,能够实时的检测环境温度,当温度超过一定数值,就会发声提示报警。图4-8蜂鸣器驱动电路74 五、系统调试系统调试分为硬件调试、软件调试和软硬件联调。电路按模块调试,各模块逐个调试通过后再联调。1、硬件调试对单片机及外围电路部分进行硬件调试,此部分硬件调试主要是以检查焊接是否正确,是否有虚焊,焊接引脚是否正确等情况,调试时采用数字外用表来检查。2.软件调试本系统的软件系统很大,全部用C51来编写,软件调试比较复杂。除了语法差错和逻辑差错外,当确认程序没问题时,我们通过PROTES仿真软件来进行仿真和调试。软件仿真调试无误后,再直接下载到单片机来调试。采取的是白下到上的调试方法.即单独调试好每—个模块,然后再连接成一个完整的系统调试。PROTES仿真图如图图6-1PROTES仿真总图3.软硬联调软硬联调使得系统的软件和硬件之间的联系更加紧密,一般是软件编程完毕之后,将程序烧入单片机,从而进行显示。因此在软硬件都基本调通的情况下系统的软硬件联调难度不是很大。74 六、总结本系统以AT89C55WD为核心部件,利用软件编程,通过键盘控制和液晶显示实现各种功能。不仅完成了题目的基本功能,而且也完成了部分提高要求,同时还有很大的发挥.现将题目要求指标及系统实际性能列表如下:基本要求提高要求其他要求实际性能时钟显示时、分、秒时钟实现“电子日历”功能。开机显示功能实现时钟有时间调整功能。增加“语音报时”功能时间显示有12小时和24小时模式切换实现时钟具有闹钟功能时钟的秒表提供了连续计时功能,能够连续计时三次时钟具有整体报时功能实现时钟具有秒表功能时钟具有时间存储功能时钟附带有一个温度计功能,显示精度为0.5度实现时钟具有倒计时功能时钟具有发声倒计时功能时钟具有温度报警功能实现时钟能够提供二个一般闹钟实现时钟能够提供一个生日闹钟实现时钟提供播放四种不同的音乐功能实现时钟提供闹钟的开关功能,并显示开关状态实现我们在硬件电路的设计中遇到了很多的问题,蜂鸣器有源与无源的选择,单片机晶振参数的选择,显示电路的选择,各种问题我们都将其克服,同时我们尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。由于时间和本身知识水平有限,我们认为本系统还有需要改进和提高的地方,例如语音报时尚未实现,硬件电路不够精确稳定,软件程序不够精炼,还需进一步的改进与完善等。74 五、参考文献1.李光飞,李良儿.楼然苗单片机C程序设计实例指导[M].北京:航空航天大学出版社,20062.楼然苗,李光飞.51系列单片机设计实例[M].北京:航空航天大学出版社,20063.张毅刚.单片机原理及应用[M].北京:高等教育出版社,20034.柯节成.简明电子元件器件手册[M}.北京:高等教育出版社,19915.戴佳,戴卫.51单片机C语言应用程序设计实例精讲[M].北京:电子工业出版社,20076.薛永毅,王淑英何希才.新型电源电路应用实例[M].北京:电子工业出版社,20017.赵茂泰.智能仪器原理及应用[M].北京:电子工业出版社,20068.张大明.单片机控制实训指导及综合应用实例[M].北京:机械工业出版社,20079.胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,200910.孙涵芳.MCS-51196系列单片机原理及应用[M].北京:航空航天大学出版社,1988附录#include#include#include#defineLCM_RSP2_0//定义引脚#defineLCM_RWP2_1#defineLCM_EP2_2#defineLCM_DataP0#defineBusy0x80//用于检测LCM状态字中的Busy标识#defineucharunsignedcharucharid,timecount,dipsmodid;bitlmcinit_or_not;//是否需要清屏标志位“1”为需要“0”为不需要bitflag,sflag;//flag是时钟冒号闪烁标志,sflag是温度负号显示标志voidDisp_line1(void);//显示屏幕第一行voidDisp_line2(void);//显示屏幕第二行voidid_case1_key();voidDisp_mod1(void);//显示模式1voidDisp_mod2(void);//显示模式2voidDisp_mod3(void);//显示模式3voidDisp_mod4(void);//显示模式4voidDisp_mod5(void);//显示模式5voidDisp_mod6(void);//显示模式674 //***********DS1302时间显示定义部分sbitT_CLK=P1^0;sbitT_IO=P1^1;sbitT_RST=P1^2;sbitACC0=ACC^0;sbitACC7=ACC^7;voidSet(uchar,uchar);//根据选择调整相应项目voidRTInputByte(uchar);//输入1ByteucharRTOutputByte(void);//输出1BytevoidW1302(uchar,uchar);//向DS1302写入一个字节ucharR1302(uchar);//从DS1302读出一个字节voidSet1302(unsignedchar*);//设置时间bitsec,min,hour,year,mon,day,weekk;//闪烁标志位unsignedcharinittime[7]={0x00,0x00,0x00,0x01,0x01,0x0b,0x06};//初始化后设置为:11年1月1日星期60点0分0秒//秒分钟小时日月年星期//*****18B20温度显示定义部sbitDQ=P3^3;//18B20接P07口typedefunsignedcharbyte;typedefunsignedintword;Read_Temperature(char,char);voidmychar(void);byteow_reset(void);byteread_byte(void);voidwrite_byte(charval);voidadjust_res(charres);//res分别等于0x1f,0x3f,0x5f温度读数分辨率分别对应//0.5,0.25,0.125//*******温度控制部分*********bittl_flash_flag;//下限闪烁标志bitth_flash_flag;//上限闪烁标志bittl_flag;//下限越限标志bitth_flag;//上限越限标志bittl_sign,th_sign;//温度零下标志0:零上,1:零下chartempid;voidDisp_Temp(void);//显示上下限温度voidSet_TH_Temp(void);//设置温度上限voidSet_TL_Temp(void);//设置温度下限signedchartl=10,th=45;voidCompare_Temp(signedcharl,signedcharh);//比较温度voidTl_Al(void);//下限越限报警voidTh_Al(void);//上限越限报警//**********播放音乐************74 #defineSYSTEM_OSC11059200//定义晶振频率12000000HZ#defineSOUND_SPACE4/5//定义普通音符演奏的长度分率,//每4分音符间隔unsignedintcodeFreTab[12]={262,277,294,311,330,349,369,392,415,440,466,494};//原始频率表unsignedcharcodeSignTab[7]={0,2,4,5,7,9,11};//1~7在频率表中的位置unsignedcharcodeLengthTab[7]={1,2,4,8,16,32,64};unsignedcharSound_Temp_TH0,Sound_Temp_TL0;//音符定时器初值暂存unsignedcharSound_Temp_TH1,Sound_Temp_TL1;voidInitialSound(void);voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed);//*******1602LCD驱动******************voidWriteDataLCM(unsignedcharWDLCM);voidWriteCommandLCM(unsignedcharWCLCM,BuysC);unsignedcharReadStatusLCM(void);voidLCMInit(void);voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData);voidDelay5Ms(void);voidDelay20Ms(void);voidDelay50Ms(void);voidDelay100Ms(void);voidDelay200Ms(void);voidDelay300Ms(void);voidDelay400Ms(void);unsignedcharcodeweek[]={"Week."};unsignedcharcodestring0[]={"welcometouse"};unsignedcharcodestring1[]={"madebyHZTteam"};unsignedcharcodestring2[]={"For"};unsignedcharcodestring3[]={"Day"};unsignedcharcodestring4[]={"Hou"};unsignedcharcodestring5[]={"Min"};unsignedcharcodestring6[]={"Sec"};unsignedcharcodestring7[]={"Timeisover"};unsignedcharcodestring8[]={"Clockone"};unsignedcharcodestring9[]={"music"};unsignedcharcodestring10[]={"Timeisstarting"};unsignedcharcodestring11[]={"Timeisend"};unsignedcharcodestring12[]={""};unsignedcharcodestring13[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f};//自定义字符"_"unsignedcharcodestring14[]={"OPR:AL:K5BI:K6"};74 unsignedcharcodestring15[]={"Clocktwo"};unsignedcharcodestring16[]={"Birthday"};unsignedcharcodestring17[]={"Showintime"};unsignedcharcodestring18[]={"Showfirtime:"};unsignedcharcodestring19[]={"Showsectime:"};unsignedcharcodestring20[]={"Showthrtime:"};unsignedcharcodestring21[]={"welcometouse"};unsignedcharcodestring22[]={0x1f,0x0a,0x0a,0x1f,0x0a,0x0a,0x0a,0x00};//自定义字符"开"unsignedcharcodestring23[]={0x0a,0x1f,0x04,0x04,0x1f,0x04,0x0a,0x11};//自定义字符"关"voididshow24();voididshow10();voididshow6();voiddidshow24();voiddidshow10();voiddidshow6();//挥着翅膀的女孩unsignedcharcodeMusic_Girl[]={0x17,0x02,0x17,0x03,0x18,0x03,0x19,0x02,0x15,0x03,0x16,0x03,0x17,0x03,0x17,0x03,0x17,0x03,0x18,0x03,0x19,0x02,0x16,0x03,0x17,0x03,0x18,0x02,0x18,0x03,0x17,0x03,0x15,0x02,0x18,0x03,0x17,0x03,0x18,0x02,0x10,0x03,0x15,0x03,0x16,0x02,0x15,0x03,0x16,0x03,0x17,0x02,0x17,0x03,0x18,0x03,0x19,0x02,0x1A,0x03,0x1B,0x03,0x1F,0x03,0x1F,0x03,0x17,0x03,0x18,0x03,0x19,0x02,0x16,0x03,0x17,0x03,0x18,0x03,0x17,0x03,0x18,0x03,0x1F,0x03,0x1F,0x02,0x16,0x03,0x17,0x03,0x18,0x03,0x17,0x03,0x18,0x03,0x20,0x03,0x20,0x02,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x1F,0x03};//同一首歌unsignedcharcodeMusic_Same[]={0x0F,0x01,0x15,0x02,0x16,0x02,0x17,0x66,0x18,0x03,0x17,0x02,0x15,0x02,0x16,0x01,0x15,0x02,0x10,0x02,0x15,0x00,0x0F,0x01,0x15,0x02,0x16,0x02,0x17,0x02,0x17,0x03,0x18,0x03,0x19,0x02,0x15,0x02,0x18,0x66,0x17,0x03,0x19,0x02,0x16,0x03,0x17,0x03,0x16,0x00,0x17,0x01,0x19,0x02,0x1B,0x02,0x1B,0x70,0x1A,0x03,0x1A,0x01,0x19,0x02,0x19,0x03,0x1A,0x03,0x1B,0x02,0x1A,0x0D,0x19,0x03,0x17,0x00,0x18,0x66,0x18,0x03,0x19,0x02,0x1A,0x02,0x19,0x0C,0x18,0x0D,0x17,0x03,0x16,0x01,0x11,0x02,0x11,0x03,0x10,0x03,0x0F,0x0C,0x10,0x02,0x15,0x00,0x1F,0x01,0x1A,0x01,0x18,0x66,0x19,0x03,0x1A,0x01,0x1B,0x02,0x1B,0x03,0x1B,0x03};//两只蝴蝶unsignedcharcodeMusic_Two[]={0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,74 0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x15,0x03,0x16,0x01,0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x19,0x03,0x19,0x01,0x19,0x03,0x1A,0x03,0x19,0x03,0x17,0x01};//生日快乐unsignedcharcodeMusic_happy[]={0x15,0x01,0x0F,0x02,0x10,0x66,0x0F,0x03,0x15,0x02,0x11,0x02,0x0F,0x03,0x10,0x03,0x11,0x03,0x0F,0x03,0x10,0x66,0x0F,0x03,0x16,0x02,0x15,0x02,0x0F,0x03,0x15,0x03,0x17,0x03,0x15,0x03,0x19,0x66,0x17,0x03,0x15,0x02,0x11,0x02,0x10,0x02,0x18,0x67,0x18,0x04,0x17,0x02,0x15,0x02,0x16,0x67,0x11,0x03,0x15,0x01,0x17,0x02,0x19,0x66,0x17,0x03,0x15,0x02,0x11,0x02,0x10,0x02,0x17,0x02,0x18,0x66,0x17,0x03,0x16,0x02,0x17,0x01,0x17,0x03,0x19,0x03,0x1F,0x66,0x1B,0x03,0x1A,0x03,0x19,0x03,0x1A,0x01,0x18,0x02,0x17,0x02,0x19,0x02,0x16,0x67,0x15,0x04,0x15,0x01,0x0F,0x02,0x00,0x00};unsignedcharidatasecg2=0,secs2=0,ming2=0,mins2=0,houg2=0,hous2=0,nzjbl=0,nzsetimes=0;//闹钟变量unsignedcharidatajshu=0,mseg=0,mses=0,secg=0,secs=0,ming=0,mins=0,xunhuan=0,mtime=0;mcount=0,jshu1=0;//秒表变量unsignedcharidatahoug=0,hous=0,dayg=0,days=0,dayb=1,secg1=0,secs1=0,ming1=0,mins1=0,mseg1=0,mses1=0;//倒计时变量unsignedcharidatasetimes=0,zjbl=0,zjbl1=0,songtime=0,Stime1=0,ncount=0;unsignedchardflag,t0time,t0count=0,ntime=0;unsignedcharAtime=0;unsignedcharNhou=0,Nmin=0,Bmon=0,Bday=0,Bhou=0,songtime1=0,songtime2=0,nzsetimes1=0,nzsetimes2=0;bitBflag=0,Bflag1=0,Bflag2=0,dipsmodid1=1,Bflag3=0,Bflag4=0,Nflag=0,TMflag=0,DJtime=0,Temflag=0;unsignedcharidataMmse=0,Msec=0,Mmin=0;unsignedcharidataMmse1=0,Msec1=0,Mmin1=0;unsignedcharidataMSflag=0,MFlag=0,MFlag1=0;unsignedcharidataDJflag=0,JXshow1=0;unsignedcharidataSZflag1=0,SZflag2=0,XStime=0,XHtimes=0,JXshow=0,KGflag=0,Ssong=0;bitZDflag=0,XSflag=0;74 bitStime=0,Nflag1=0,bzw;bitKGflag1=0,KGflag2=0,KGflag3=0;bitXHleft=0,XHflag=0,XHright=0,XHright1=0,SZflag0=0;voidshanshuo(biti,bitj,bitk);voidDelayus(unsignedcharTimeS);voidbeep(unsignedcharTimes);voidnaoz(void);voidjianyan();voidt0show(unsignedchari,unsignedcharj);voidnshow(unsignedchari,unsignedcharj);voidxunhuanjiance();voidBNshow();voidBNshow1();voidZDyinyue();voidYYBaoShi();voidMBshow1();voidMBshow2();voidMBshow3();voidTemshow();voidMjianyan();voidMjiance();voidDJjianyan();voidZDBaoShi();voidZDshow();voidmychar1();voidmychar2();voidSZjianyan();voidshowKG1();voidshowKG2();voidshowKG3();voidsingsong();//主函数voidmain(void){Delay400Ms();//启动等待,等LCM讲入工作状态LCMInit();//LCM初始化Delay5Ms();//延时片刻(可不要)mychar();mychar1();mychar2();TMOD=0x11;TH1=(65536-10000)/256;TL1=(65536-10000)%256;74 ET1=1;PT1=1;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;TR0=1;ET0=1;W1302(0x90,0xa5);//打开充电二级管一个二级管串联一个2K电阻W1302(0x8e,0x80);//写保护,禁止写操作adjust_res(0x1f);//调整18B20的分辨率0x1f:0.5;0x3f:0.25;0x5f:0.125while(1){jianyan();dflag++;if(P1_7==0){dipsmodid++;lmcinit_or_not=1;if(dipsmodid>6){dipsmodid=1;dipsmodid1=1;Temflag=0;}while(P1_7==0);beep(57);}switch(dipsmodid){case1:Disp_mod1();//开始界面break;case2:Disp_mod2();//时间显示(万年历)break;case3:Disp_mod3();//温度显示break;case4:Disp_mod4();//闹钟显示break;case5:Disp_mod5();//秒表显示break;case6:Disp_mod6();//倒计时显示break;}}74 }//显示模式1voidDisp_mod1(){unsignedcharjleft=0;jianyan();if(lmcinit_or_not==1){LCMInit();lmcinit_or_not=0;}if(XHright1==0){if(XHflag==0){DisplayListChar(2,0,string0);DisplayListChar(0,1,string1);xunhuanjiance();if(XSflag==0){if((xunhuan%2==0)&(xunhuan!=0)){DisplayListChar(18,0,string0);DisplayListChar(16,1,string1);for(jleft=0;jleft<16;jleft++){WriteCommandLCM(0x18,1);xunhuanjiance();if((xunhuan%2==1)|(XSflag==1)|XHflag==1){break;}}}}}}if(XHright1==0){if(XHflag==0){if(XSflag==0){if(xunhuan%2==1){DisplayListChar(2,0,string0);DisplayListChar(0,1,string1);xunhuanjiance();for(jleft=0;jleft<16;jleft++){WriteCommandLCM(0x1c,1);xunhuanjiance();if((xunhuan%2==0)|(XSflag==1))74 {break;}if(XHflag==1)break;}}}}}if(XHflag==1){WriteCommandLCM(0x01,1);DisplayListChar(2,0,string0);DisplayOneChar(2,0,"w");DisplayListChar(0,1,string1);xunhuanjiance();}if(XHright1==1){WriteCommandLCM(0x01,1);for(XHtimes=0;XHtimes<16;XHtimes++){DisplayOneChar(XHtimes,0,string21[XHtimes]);xunhuanjiance();if(XHright1==0)break;}if(XHright1==1){for(XHtimes=0;XHtimes<16;XHtimes++){DisplayOneChar(XHtimes,1,string1[XHtimes]);xunhuanjiance();if(XHright1==0)break;}}}}voidxunhuanjiance(){unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA--){TempCycB=5000;while(TempCycB--);{if(P1_7==0){Delay5Ms();if(P1_7==0){beep(57);74 dipsmodid=2;while(P1_7==0)break;}}if(P1_6==0){Delay5Ms();if(P1_6==0){xunhuan++;while(P1_6==0);}}if(P1_4==0){Delay5Ms();if(P1_4==0){XStime++;if(XStime%2==1){WriteCommandLCM(0x1c,1);XSflag=1;}if(XStime%2==0)XSflag=0;while(P1_4==0);}}if(P1_5==0){Delay5Ms();if(P1_5==0){if(XHleft==0){XHleft=1;XHflag=1;}else{XHleft=0;XHflag=0;}while(P1_5==0);}}}}if(P3_2==0){Delay5Ms();74 if(P3_2==0){if(XHright==0){XHright=1;XHright1=1;}else{XHright=0;XHright1=0;}while(P3_2==0);}}}//显示模式2voidDisp_mod2(void){jianyan();if(((R1302(0x83)/16)*10+(R1302(0x83)%16)==0)&((R1302(0x81)/16)==0)&((R1302(0x81)%16)==0)){beep(17);}YYBaoShi();SZflag1=R1302(0x81)%16;ZDBaoShi();if(lmcinit_or_not==1){LCMInit();lmcinit_or_not=0;}if((P1_4|P1_5)==0)//初始化{Delay5Ms();if((P1_4|P1_5)==0)Set1302(inittime);}if(P1_6==0)//设置和选择项目键{Delay5Ms();if(P0_6==0){id++;if(id>7)id=0;}while(P1_6==0);}switch(id){case0:sec=0;Disp_line1();Disp_line2();SZjianyan();74 break;case1://年year=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;case2://月year=0;mon=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;case3://日mon=0;day=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;case4://星期day=0;weekk=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;case5://小时weekk=0;hour=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;case6://分钟hour=0;min=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;case7://秒min=0;sec=1;Disp_line1();Disp_line2();id_case1_key();SZjianyan();break;}jianyan();DisplayOneChar(0,1,"");DisplayOneChar(9,1,"");if(SZflag0==1){if(((R1302(0x85)/16)*10+(R1302(0x85)%16))<12)74 DisplayOneChar(0,0,"A");if(((R1302(0x85)/16)*10+(R1302(0x85)%16))>=12){DisplayOneChar(0,0,"P");DisplayOneChar(1,0,(((R1302(0x85)/16)*10+(R1302(0x85)%16))-12)/10|0x30);DisplayOneChar(2,0,((((R1302(0x85)/16)*10+(R1302(0x85)%16))-12)%10)|0x30);}DisplayOneChar(0,1,"M");}elseif(SZflag0==0)DisplayOneChar(0,0,"");}voidSZjianyan(){if(P3_2==0){Delay5Ms();if(P3_2==0){if(dipsmodid==2){if(SZflag0==0){SZflag0=1;}elseif(SZflag0==1){SZflag0=0;}}while(P3_2==0);}}}voidbeep(unsignedcharTimes){unsignedchari;for(i=0;i<(57*50)/Times;i++){Delayus(Times);P3_6=0;Delayus(Times);P3_6=1;}}voidDelayus(unsignedcharTimeS){unsignedchari;for(i=0;i11){j=j-12;NewFreTab[i]=FreTab[j]*2;}ElseNewFreTab[i]=FreTab[j];if(Octachord==1)NewFreTab[i]>>=2;elseif(Octachord==3)NewFreTab[i]<<=2;}SoundLength=0;while(Sound[SoundLength]!=0x00)//计算歌曲长度{SoundLength+=2;}Point=0;74 Tone=Sound[Point];Length=Sound[Point+1];//读出第一个音符和它时时值LDiv0=12000/Speed;//算出1分音符的长度(几个10ms)LDiv4=LDiv0/4;//算出4分音符的长度LDiv4=LDiv4-LDiv4*SOUND_SPACE;//普通音最长间隔标准TR0=0;TR1=1;while(Point>=2;//低音74 if(SM==3)CurrentFre<<=2;//高音Temp_T=65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值Sound_Temp_TH0=Temp_T/256;Sound_Temp_TL0=Temp_T%256;TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0+24;//加12是对中断延时的补偿}ZDyinyue();SLen=LengthTab[Length%10];//算出是几分音符XG=Length/10%10;//算出音符类型(0普通1连音2顿音)FD=Length/100;LDiv=LDiv0/SLen;//算出连音音符演奏的长度(多少个10ms)if(FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0)//算出普通音符的演奏长度if(SLen<=4)LDiv1=LDiv-LDiv4;elseLDiv1=LDiv*SOUND_SPACE;elseLDiv1=LDiv/2;//算出顿音的演奏长度elseLDiv1=LDiv;if(SL==0)LDiv1=0;LDiv2=LDiv-LDiv1;//算出不发音的长度if(SL!=0){TR0=1;for(i=LDiv1;i>0;i--)//发规定长度的音{while(TF1==0);TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TF1=0;}}ZDyinyue();if(LDiv2!=0){TR0=0;P3_6=0;74 for(i=LDiv2;i>0;i--)//音符间的间隔{while(TF1==0);TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TF1=0;}}Point+=2;Tone=Sound[Point];Length=Sound[Point+1];if(Nflag==1){Nflag=0;Point=SoundLength;beep(57);}}P3_6=0;}voidZDyinyue(){if(P3_4==0){Delay5Ms();if(P3_4==0){Nflag=1;Nflag1=1;while(P3_4==0);}}if(P3_5==0){Delay5Ms();if(P3_5==0){if(dipsmodid==2){Nflag=1;Nflag1=0;if(KGflag1==0)Ssong=1;if(KGflag2==0)Ssong=2;if(KGflag3==0)Ssong=3;JXshow=R1302(0x83)%16+R1302(0x83)/16*10;JXshow1=R1302(0x85)%16+R1302(0x85)/16*10;}while(P3_5==0);}}}voidsingsong()74 {if(((R1302(0x85)/16)==hous2)&((R1302(0x85)%16)==houg2)&((R1302(0x83)/16)==mins2)&((R1302(0x83)%16)==ming2)&((R1302(0x81)/16)==secs2)&((R1302(0x81)%16)==secg2)){TR0=0;Stime=1;InitialSound();switch(songtime){case1:Play(Music_Girl,0,3,360);Stime=0;break;case2:Play(Music_Same,0,3,360);Stime=0;break;case3:Play(Music_Two,0,3,360);Stime=0;break;case4:Play(Music_happy,0,3,360);Stime=0;break;}TR0=1;}if((Nflag1==0)&(KGflag1==0)&(Ssong==1)){if(((R1302(0x83)%16+R1302(0x83)/16*10==JXshow+1)&(JXshow1==R1302(0x85)%16+R1302(0x85)/16*10))){TR0=0;Stime=1;InitialSound();switch(songtime){case1:Play(Music_Girl,0,3,360);Stime=0;break;case2:Play(Music_Same,0,3,360);74 Stime=0;break;case3:Play(Music_Two,0,3,360);Stime=0;break;case4:Play(Music_happy,0,3,360);Stime=0;break;}TR0=1;}}if((Nflag1==0)&(KGflag2==0)&(Ssong==2)){if(((R1302(0x83)%16+R1302(0x83)/16*10==JXshow+1)&(JXshow1==R1302(0x85)%16+R1302(0x85)/16*10))){TR0=0;Stime=1;InitialSound();switch(songtime1){case1:Play(Music_Girl,0,3,360);Stime=0;break;case2:Play(Music_Same,0,3,360);Stime=0;break;case3:Play(Music_Two,0,3,360);Stime=0;break;case4:Play(Music_happy,0,3,360);Stime=0;break;}TR0=1;}}if((Nflag1==0)&(KGflag3==0)&(Ssong==3))74 {if(((R1302(0x83)%16+R1302(0x83)/16*10==JXshow+1)&(JXshow1==R1302(0x85)%16+R1302(0x85)/16*10))){TR0=0;Stime=1;InitialSound();switch(songtime2){case1:Play(Music_Girl,0,3,360);Stime=0;break;case2:Play(Music_Same,0,3,360);Stime=0;break;case3:Play(Music_Two,0,3,360);Stime=0;break;case4:Play(Music_happy,0,3,360);Stime=0;break;}TR0=1;}}if((((R1302(0x85)/16)*10+(R1302(0x85)%16))==Nhou)&(((R1302(0x83)/16)*10+(R1302(0x83)%16))==Nmin)&((R1302(0x81)/16)==0)&((R1302(0x81)%16)==0)){TR0=0;Stime=1;InitialSound();switch(songtime1){case1:Play(Music_Girl,0,3,360);Stime=0;break;case2:Play(Music_Same,0,3,360);Stime=0;74 break;case3:Play(Music_Two,0,3,360);Stime=0;break;case4:Play(Music_happy,0,3,360);Stime=0;break;}TR0=1;}if((((R1302(0x85)/16)*10+(R1302(0x85)%16))==Bhou)&(((R1302(0x87)/16)*10+(R1302(0x87)%16))==Bday)&(((R1302(0x89)/16)*10+(R1302(0x89)%16))==Bmon)&(((R1302(0x83)/16)*10+(R1302(0x83)%16))==0)&(((R1302(0x81)/16)*10+(R1302(0x81)%16))==0)){TR0=0;Stime=1;InitialSound();switch(songtime2){case1:Play(Music_Girl,0,3,360);Stime=0;break;case2:Play(Music_Same,0,3,360);Stime=0;break;case3:Play(Music_Two,0,3,360);Stime=0;break;case4:Play(Music_happy,0,3,360);Stime=0;break;}TR0=1;}}voidjianyan(){if(KGflag1==0)singsong();if(KGflag2==0)singsong();74 if(KGflag3==0)singsong();Stime=0;ET0=1;ET1=1;}voidZDBaoShi(){if(((R1302(0x83)/16)*10+(R1302(0x83)%16)==59)&((R1302(0x81)/16)==5)&(SZflag2!=SZflag1)){SZflag2=SZflag1;switch(SZflag2){case1:beep(71);break;case2:beep(57);break;case3:beep(46);break;case4:beep(38);break;case5:beep(32);break;case6:beep(28);break;case7:beep(26);break;case8:beep(23);break;case9:beep(19);break;}}}voidYYBaoShi()74 {unsignedchari;if(((R1302(0x81)/16)*10+(R1302(0x81)%16))==0){if(((R1302(0x83)/16)*10+(R1302(0x83)%16))==0){i=(R1302(0x85)/16)*10+(R1302(0x85)%16);while(i--){beep(57);Delay400Ms();ZDshow();}}}}voidZDshow(){if(ZDflag==0){DisplayOneChar(3,0,":");DisplayOneChar(6,0,":");ZDflag=1;}elseif(ZDflag==1){DisplayOneChar(3,0,"");DisplayOneChar(6,0,"");ZDflag=0;}DisplayOneChar(7,0,(R1302(0x81)/16)|0x30);DisplayOneChar(8,0,(R1302(0x81)%16)|0x30);DisplayOneChar(4,0,(R1302(0x83)/16)|0x30);DisplayOneChar(5,0,(R1302(0x83)%16)|0x30);}//显示模式3voidDisp_mod3(void){jianyan();if(lmcinit_or_not==1){LCMInit();lmcinit_or_not=0;}Read_Temperature(1,0);DisplayOneChar(0,1,"T");DisplayOneChar(1,1,"L");DisplayOneChar(2,1,":");DisplayOneChar(7,1,"T");DisplayOneChar(8,1,"H");DisplayOneChar(9,1,":");if(P1_6==0){74 if(P1_6==0){tempid++;if(tempid>2)tempid=0;while(P1_6==0);}}switch(tempid){case0:tl_flash_flag=0;th_flash_flag=0;Disp_Temp();Temshow();break;case1:tl_flash_flag=1;th_flash_flag=0;Disp_Temp();Set_TL_Temp();Temshow();break;case2:tl_flash_flag=0;th_flash_flag=1;Disp_Temp();Set_TH_Temp();Temshow();break;}Compare_Temp(tl,th);Tl_Al();Th_Al();}voidBNshow(){if(P3_2==0){Delay5Ms();if(P3_2==0){Atime++;Bflag=1;Bflag1=0;dipsmodid1=0;Bflag3=1;while(P3_2==0);74 }}if(P3_3==0){Delay5Ms();if(P3_3==0){while(P3_3==0);Bflag4=1;dipsmodid1=0;Bflag=0;Bflag1=1;}}}voidBNshow1(){if(P1_6==0){Delay5Ms();if(P1_6==0){if(Bflag1==0){if(Atime%2==1){nzsetimes++;Bflag2=1;if(nzsetimes>7)nzsetimes=0;}elseif(Atime%2==0){nzsetimes1++;Bflag2=1;if(nzsetimes1>3)nzsetimes1=0;}}elseif(Bflag1==1){nzsetimes2++;Bflag2=1;if(nzsetimes2>4)nzsetimes2=0;}while(P1_6==0);}}}voidBNshow2(){if(P1_7==0){dipsmodid++;lmcinit_or_not=1;if(dipsmodid>6){dipsmodid=1;}while(P1_7==0);}if(P3_5==0){Delay5Ms();if(P3_5==0)74 {if(dipsmodid==4){if(Bflag1==0){if(Atime%2==1){if(KGflag1==0){KGflag1=1;}else{KGflag1=0;}}elseif(Atime%2==0){if(KGflag2==0){KGflag2=1;}else{KGflag2=0;}}}elseif(Bflag1==1){if(KGflag3==0){KGflag3=1;}else{KGflag3=0;}}while(P3_5==0);}}}}//显示模式4voidDisp_mod4(void){if(lmcinit_or_not==1){LCMInit();lmcinit_or_not=0;}jianyan();BNshow();BNshow1();BNshow2();if(dipsmodid1==1){DisplayListChar(0,0,string0);DisplayListChar(0,1,string14);}if(Bflag3==1){if(((Atime%2==1)&(Bflag==1))&(dipsmodid1==0)){WriteCommandLCM(0x01,1);74 if(KGflag1==0){DisplayOneChar(15,1,0x02);}elseif(KGflag1==1){DisplayOneChar(15,1,0x03);}DisplayListChar(0,0,string8);DisplayListChar(10,0,string9);DisplayOneChar(0,1,"H");DisplayOneChar(1,1,":");DisplayOneChar(2,1,hous2|0x30);DisplayOneChar(3,1,houg2|0x30);DisplayOneChar(4,1,"");DisplayOneChar(9,1,"");DisplayOneChar(5,1,"M");DisplayOneChar(6,1,":");DisplayOneChar(7,1,mins2|0x30);DisplayOneChar(8,1,ming2|0x30);DisplayOneChar(10,1,"S");DisplayOneChar(11,1,":");DisplayOneChar(12,1,secs2|0x30);DisplayOneChar(13,1,secg2|0x30);DisplayOneChar(15,0,songtime|0x30);switch(nzsetimes){case0:break;case1:nzjbl=secg2;idshow10();secg2=nzjbl;nshow(13,1);DisplayOneChar(13,1,secg2|0x30);showKG1();break;case2:nzjbl=secs2;idshow6();secs2=nzjbl;nshow(12,1);DisplayOneChar(12,1,secs2|0x30);showKG1();break;case3:nzjbl=ming2;74 idshow10();ming2=nzjbl;nshow(8,1);DisplayOneChar(8,1,ming2|0x30);showKG1();break;case4:nzjbl=mins2;idshow6();mins2=nzjbl;nshow(7,1);showKG1();break;case5:nzjbl=houg2;idshow10();houg2=nzjbl;nshow(3,1);showKG1();break;case6:nzjbl=hous2;idshow24();hous2=nzjbl;nshow(2,1);showKG1();break;case7:if(P1_4==0){Delay5Ms();if(P1_4==0){songtime++;if(songtime>4)songtime=0;while(P1_4==0);}}showKG1();DisplayOneChar(15,0,songtime|0x30);break;}}}BNshow();BNshow1();BNshow2();74 if(Bflag3==1){if(((Atime%2==0)&(Bflag==1))&(dipsmodid1==0)){WriteCommandLCM(0x01,1);if(KGflag2==0){DisplayOneChar(15,1,0x02);}if(KGflag2==1){DisplayOneChar(15,1,0x03);}DisplayListChar(0,0,string15);DisplayListChar(10,0,string9);DisplayOneChar(0,1,"H");DisplayOneChar(1,1,":");DisplayOneChar(2,1,Nhou/10|0x30);DisplayOneChar(3,1,Nhou%10|0x30);DisplayOneChar(4,1,"");DisplayOneChar(5,1,"M");DisplayOneChar(6,1,":");DisplayOneChar(7,1,(Nmin/10)|0x30);DisplayOneChar(8,1,(Nmin%10)|0x30);DisplayOneChar(9,1,"");DisplayOneChar(10,1,"S");DisplayOneChar(11,1,":");DisplayOneChar(12,1,0|0x30);DisplayOneChar(13,1,0|0x30);DisplayOneChar(15,0,songtime1|0x30);switch(nzsetimes1){case0:break;case1:if(P1_4==0){Delay5Ms();if(P1_4==0){while(P1_4==0);Nmin++;if(Nmin==60)Nmin=0;}}if(P1_5==0){Delay5Ms();if(P1_5==0){while(P1_5==0);Nmin--;74 if(Nmin==-1)Nmin=59;}}showKG2();shanshuo(0,1,0);break;case2:if(P1_4==0){Delay5Ms();if(P1_4==0){while(P1_4==0);Nhou++;if(Nhou==25)Nhou=0;}}if(P1_5==0){Delay5Ms();if(P1_5==0){while(P1_5==0);Nhou--;if(Nhou==-1)Nhou=24;}}showKG2();shanshuo(0,0,0);break;case3:if(P1_4==0){Delay5Ms();if(P1_4==0){songtime1++;if(songtime1>4)songtime1=0;while(P1_4==0);}}showKG2();break;}}}BNshow();BNshow1();BNshow2();if((Bflag1==1)&(dipsmodid1==0)){WriteCommandLCM(0x01,1);if(KGflag3==0){DisplayOneChar(15,1,0x02);}elseif(KGflag3==1)74 {DisplayOneChar(15,1,0x03);}DisplayListChar(0,0,string16);DisplayListChar(10,0,string9);DisplayOneChar(0,1,"M");DisplayOneChar(1,1,":");DisplayOneChar(2,1,Bmon/10|0x30);DisplayOneChar(3,1,Bmon%10|0x30);DisplayOneChar(4,1,"");DisplayOneChar(9,1,"");DisplayOneChar(5,1,"D");DisplayOneChar(6,1,":");DisplayOneChar(7,1,Bday/10|0x30);DisplayOneChar(8,1,Bday%10|0x30);DisplayOneChar(10,1,"H");DisplayOneChar(11,1,":");DisplayOneChar(12,1,Bhou/10|0x30);DisplayOneChar(13,1,Bhou%10|0x30);DisplayOneChar(15,0,songtime2|0x30);switch(nzsetimes2){case0:break;case1:if(P1_4==0){Delay5Ms();if(P1_4==0){while(P1_4==0);Bhou++;if(Bhou==25)Bhou=0;}}if(P1_5==0){Delay5Ms();if(P1_5==0){while(P1_5==0);Bhou--;if(Bhou==-1)Bhou=24;}}showKG3();shanshuo(0,0,1);break;case2:if(P1_4==0){Delay5Ms();if(P1_4==0){while(P1_4==0);74 Bday++;if(Bday==32)Bday=0;}}if(P1_5==0){Delay5Ms();if(P1_5==0){while(P1_5==0);Bday--;if(Bday==-1)Bday=31;}}showKG3();shanshuo(1,1,0);break;case3:if(P1_4==0){Delay5Ms();if(P1_4==0){while(P1_4==0);Bmon++;if(Bmon==13)Bmon=0;}}if(P1_5==0){Delay5Ms();if(P1_5==0){while(P1_5==0);Bmon--;if(Bmon==-1)Bmon=12;}}showKG3();shanshuo(1,0,0);break;case4:if(P1_4==0){Delay5Ms();if(P1_4==0){songtime2++;if(songtime2>4)songtime2=0;while(P1_4==0);}}showKG3();break;}}if((KGflag1==0)&(((Atime%2==1)&(Bflag==1))&(dipsmodid1==0))){DisplayOneChar(15,1,0x02);}elseif((KGflag1==1)&(((Atime%2==1)&(Bflag==1))&(dipsmodid1==0))){DisplayOneChar(15,1,0x03);}if((KGflag2==0)&(((Atime%2==0)&(Bflag==1))&(dipsmodid1==0))){DisplayOneChar(15,1,0x02);}74 elseif((KGflag2==1)&(((Atime%2==0)&(Bflag==1))&(dipsmodid1==0))){DisplayOneChar(15,1,0x03);}if((KGflag3==0)&((Bflag1==1)&(dipsmodid1==0))){DisplayOneChar(15,1,0x02);}elseif((KGflag3==1)&((Bflag1==1)&(dipsmodid1==0))){DisplayOneChar(15,1,0x03);}BNshow();BNshow1();BNshow2();Delay100Ms();jianyan();}voidshowKG1(){if(KGflag1==0){DisplayOneChar(15,1,0x02);}if(KGflag1==1){DisplayOneChar(15,1,0x03);}}voidshowKG2(){if(KGflag2==0){DisplayOneChar(15,1,0x02);}if(KGflag2==1){DisplayOneChar(15,1,0x03);}}voidshowKG3(){if(KGflag3==0){DisplayOneChar(15,1,0x02);}if(KGflag3==1){DisplayOneChar(15,1,0x03);}}//标志位闪烁voidshanshuo(biti,bitj,bitk){if((i==0)&(j==0)&(k==0)){DisplayOneChar(2,1,"");DisplayOneChar(3,1,"");Delay100Ms();DisplayOneChar(2,1,Nhou/10|0x30);DisplayOneChar(3,1,Nhou%10|0x30);Delay100Ms();}if((i==0)&(j==1)){DisplayOneChar(7,1,"");DisplayOneChar(8,1,"");Delay100Ms();DisplayOneChar(7,1,Nmin/10|0x30);DisplayOneChar(8,1,Nmin%10|0x30);Delay100Ms();}74 if((i==1)&(j==0)){DisplayOneChar(2,1,"");DisplayOneChar(3,1,"");Delay100Ms();DisplayOneChar(2,1,Bmon/10|0x30);DisplayOneChar(3,1,Bmon%10|0x30);Delay100Ms();}if((i==1)&(j==1)){DisplayOneChar(7,1,"");DisplayOneChar(8,1,"");Delay100Ms();DisplayOneChar(7,1,Bday/10|0x30);DisplayOneChar(8,1,Bday%10|0x30);Delay100Ms();}if(k==1){DisplayOneChar(12,1,"");DisplayOneChar(13,1,"");Delay100Ms();DisplayOneChar(12,1,Bhou/10|0x30);DisplayOneChar(13,1,Bhou%10|0x30);Delay100Ms();}}//5ms延时voidDelay5Ms(void){unsignedintTempCyc=5552;while(TempCyc--);}//20ms延时voidDelay20Ms(void){unsignedchardelay1=2;unsignedintTempCyc=5552;while(delay1--);while(TempCyc--);}//400ms延时voidDelay400Ms(void){unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--){;}}}//100ms延时voidDelay100Ms(){unsignedchari=200;74 while(i--){Delayus(57);BNshow();BNshow1();BNshow2();}}voidDelay50Ms(){unsignedchari=100;while(i--){ZDyinyue();}}//倒计时10进制voiddidshow10(){if(P1_4==0){Delay5Ms();if(P1_4==0){zjbl++;if(zjbl==10)zjbl=0;while(P1_4==0);}}if(P1_5==0){Delay5Ms();if(P1_5==0){if(zjbl==0)zjbl=9;elsezjbl--;while(P1_5==0);}}}//倒计时6进制voiddidshow6(){if(P1_4==0){Delay20Ms();if(P1_4==0){zjbl++;if(zjbl==6)zjbl=0;while(P1_4==0);}}if(P1_5==0){Delay20Ms();if(P1_5==0){if(zjbl==0)74 zjbl=5;elsezjbl--;while(P1_5==0);}}}//倒计时24进制voiddidshow24(){if(P1_4==0){Delay20Ms();if(P1_4==0){zjbl++;if(zjbl==3)zjbl=0;while(P1_4==0);}}if(P1_5==0){Delay20Ms();if(P1_5==0){if(zjbl==0)zjbl=2;elsezjbl--;while(P1_5==0);}}}//10进制voididshow10(){if(P1_4==0){Delay5Ms();if(P1_4==0){nzjbl++;if(nzjbl==10)nzjbl=0;while(P1_4==0);}}if(P1_5==0){Delay5Ms();if(P1_5==0){if(nzjbl==0)nzjbl=9;elsenzjbl--;while(P1_5==0);74 }}}//6进制voididshow6(){if(P1_4==0){Delay20Ms();if(P1_4==0){nzjbl++;if(nzjbl==6)nzjbl=0;while(P1_4==0);}}if(P1_5==0){Delay20Ms();if(P1_5==0){if(nzjbl==0)nzjbl=5;elsenzjbl--;while(P1_5==0);}}}//24进制voididshow24(){if(P1_4==0){Delay20Ms();if(P1_4==0){nzjbl++;if(nzjbl==3)nzjbl=0;while(P1_4==0);}}if(P1_5==0){Delay20Ms();if(P1_5==0){if(nzjbl==0)nzjbl=2;elsenzjbl--;while(P1_5==0);}}}voidmychar1()//自定义字符{74 WriteCommandLCM(0x50,1);Delay5Ms();for(KGflag=0;KGflag<8;KGflag++){WriteDataLCM(string22[KGflag]);}}voidmychar2()//自定义字符{WriteCommandLCM(0x58,1);Delay5Ms();for(KGflag=0;KGflag<8;KGflag++){WriteDataLCM(string23[KGflag]);}}//显示模式5voidDisp_mod5(){jianyan();if(lmcinit_or_not==1){LCMInit();lmcinit_or_not=0;}if(P1_4==0){Delay5Ms();if(P1_4==0){jshu++;if(jshu%2==1){while(P1_4==0);TR1=1;Delay5Ms();DisplayListChar(0,1,string10);beep(57);}else{while(P1_4==0);beep(57);jshu1=0;TR1=0;mseg=0;mses=0;secg=0;secs=0;ming=0;mins=0;Mmin=0;Msec=0;Mmse=0;Mmin1=0;Msec1=0;Mmse1=0;}}}if(TMflag==0){DisplayOneChar(3,0,mins|0x30);DisplayOneChar(4,0,ming|0x30);DisplayOneChar(6,0,secs|0x30);DisplayOneChar(7,0,secg|0x30);DisplayOneChar(9,0,mses|0x30);DisplayOneChar(10,0,mseg|0x30);DisplayOneChar(5,0,":");74 DisplayOneChar(8,0,":");if((mtime%2==1)&(jshu%2==1)){if(jshu1==0);}if((mtime%2==0)&(jshu%2==1)){if(jshu1==0){DisplayOneChar(5,0,"");DisplayOneChar(8,0,"");}}}Delay200Ms();if(TMflag==1){switch(MSflag){case1:WriteCommandLCM(0x01,1);DisplayListChar(0,0,string0);DisplayListChar(0,1,string17);break;case2:MBshow1();break;case3:MBshow2();break;case4:MBshow3();break;case5:WriteCommandLCM(0x01,1);TMflag=0;break;}}}voidDelay200Ms(){unsignedchari=200;while(i--){Delayus(57);Mjianyan();Mjiance();}}voidMBshow1(){WriteCommandLCM(0x01,1);DisplayListChar(0,0,string18);DisplayOneChar(3,1,Mmin/10|0x30);74 DisplayOneChar(4,1,Mmin%10|0x30);DisplayOneChar(5,1,":");DisplayOneChar(6,1,Msec/10|0x30);DisplayOneChar(7,1,Msec%10|0x30);DisplayOneChar(8,1,":");DisplayOneChar(9,1,Mmse/10|0x30);DisplayOneChar(10,1,Mmse%10|0x30);}voidMBshow2(){WriteCommandLCM(0x01,1);DisplayListChar(0,0,string19);DisplayOneChar(3,1,Mmin1/10|0x30);DisplayOneChar(4,1,Mmin1%10|0x30);DisplayOneChar(5,1,":");DisplayOneChar(6,1,Msec1/10|0x30);DisplayOneChar(7,1,Msec1%10|0x30);DisplayOneChar(8,1,":");DisplayOneChar(9,1,Mmse1/10|0x30);DisplayOneChar(10,1,Mmse1%10|0x30);}voidMBshow3(){WriteCommandLCM(0x01,1);DisplayListChar(0,0,string20);DisplayOneChar(3,1,mins|0x30);DisplayOneChar(4,1,ming|0x30);DisplayOneChar(5,1,":");DisplayOneChar(6,1,secs|0x30);DisplayOneChar(7,1,secg|0x30);DisplayOneChar(8,1,":");DisplayOneChar(9,1,mses|0x30);DisplayOneChar(10,1,mseg|0x30);}voidMjianyan(){if(P1_6==0){Delay5Ms();if(P1_6==0){beep(57);MFlag++;while(P1_6==0);}}if(P3_2==0){Delay5Ms();if(P3_2==0)74 {while(P3_2==0);MSflag++;TMflag=1;WriteCommandLCM(0x01,1);DisplayListChar(0,0,string0);DisplayListChar(0,1,string17);if(MSflag>5)MSflag=1;}}if(P1_5==0){Delay5Ms();if(P1_5==0){beep(57);jshu1=1;DisplayListChar(0,1,string12);Delay5Ms();DisplayListChar(0,1,string11);while(P1_5==0);TR1=0;}}}voidMjiance(){if(MFlag!=MFlag1){MFlag1=MFlag;if(MFlag%2==1){TR1=0;Mmse=mseg+mses*10;Msec=secg+secs*10;Mmin=ming+mins*10;TR1=1;}elseif((MFlag%2==0)&(MFlag!=0)){TR1=0;Mmse1=mseg+mses*10;Msec1=secg+secs*10;Mmin1=ming+mins*10;TR1=1;}}}voidDelay300Ms(){unsignedchari=200;74 while(i--){DJjianyan();}}//显示模式6voidDisp_mod6(){jianyan();if(lmcinit_or_not==1){LCMInit();lmcinit_or_not=0;Delay300Ms();switch(setimes){case0:break;case1:zjbl=secg1;didshow10();secg1=zjbl;t0show(7,1);break;case2:zjbl=secs1;didshow6();secs1=zjbl;t0show(6,1);break;case3:zjbl=ming1;didshow10();ming1=zjbl;t0show(1,1);break;case4:zjbl=mins1;didshow6();mins1=zjbl;t0show(0,1);break;case5:zjbl=houg;didshow10();houg=zjbl;74 t0show(12,0);break;case6:zjbl=hous;didshow24();hous=zjbl;t0show(11,0);break;case7:zjbl=dayg;didshow10();dayg=zjbl;t0show(6,0);break;case8:zjbl=days;didshow10();days=zjbl;t0show(5,0);break;case9:zjbl=dayb;didshow10();dayb=zjbl;t0show(4,0);break;}if((dayb==0)&(days==0)&(dayg==0)&(hous==0)&(houg==0)&(mins1==0)&(ming1==0)&(DJtime==0)&(secg1!=DJflag)){if((secs1==1)&(secg1==0)){beep(114);DJflag=secg1;}if(secs1==0){DJflag=secg1;switch(secg1){case0:beep(17);break;case1:beep(19);break;74 case2:beep(23);break;case3:beep(26);break;case4:beep(28);break;case5:beep(32);break;case6:beep(38);break;case7:beep(46);break;case8:beep(57);break;case9:beep(71);break;}}if((dayb==0)&(days==0)&(dayg==0)&(hous==0)&(houg==0)&(mins1==0)&(ming1==0)&(DJtime==0)&(secs1==0)&(secg1==0))DJtime=1;}if(bzw==1&((dflag/6)%2==1)){unsignedcharzjbl2=6;bzw=0;WriteCommandLCM(0x01,1);Delay5Ms();DJtime=1;DisplayListChar(1,0,string0);DisplayListChar(1,1,string7);while(zjbl2--){Delay400Ms();}}else{DisplayListChar(0,0,string2);74 DisplayListChar(7,0,string3);DisplayListChar(13,0,string4);DisplayListChar(2,1,string5);DisplayListChar(8,1,string6);DisplayOneChar(3,0,"");DisplayOneChar(4,0,dayb|0x30);DisplayOneChar(5,0,days|0x30);DisplayOneChar(6,0,dayg|0x30);DisplayOneChar(10,0,"");DisplayOneChar(11,0,hous|0x30);DisplayOneChar(12,0,houg|0x30);DisplayOneChar(0,1,mins1|0x30);DisplayOneChar(1,1,ming1|0x30);DisplayOneChar(6,1,secs1|0x30);DisplayOneChar(7,1,secg1|0x30);DisplayOneChar(11,1,"");DisplayOneChar(12,1,"");}}voidt0show(unsignedchari,unsignedcharj){unsignedchart0zjbl;if(t0time%2==1){WriteCommandLCM(0x40,1);Delay5Ms();for(t0zjbl=0;t0zjbl<8;t0zjbl++){WriteDataLCM(string13[t0zjbl]);//写入自定义图形}DisplayOneChar(i,j,0);}Delay20Ms();Delay20Ms();}voidnshow(unsignedchari,unsignedcharj){unsignedcharnzjbl;if(ntime%2==1){WriteCommandLCM(0x40,1);Delay5Ms();for(nzjbl=0;nzjbl<8;nzjbl++){WriteDataLCM(string13[nzjbl]);//写入自定义图形}74 DisplayOneChar(i,j,0);}Delay20Ms();Delay20Ms();}voidDJjianyan(){if(P1_6==0)//设置和选择项目键{Delay20Ms();if(P1_6==0){setimes++;if(setimes>9)setimes=0;}while(P1_6==0);}if(P3_2==0){Delay20Ms();if(P3_2==0){TR1=1;zjbl1++;if(zjbl1==1){TR1=1;while(P3_2==0);}elseif(zjbl1==2){TR1=0;zjbl1=0;while(P3_2==0);}}}if(P3_3==0){Delay5Ms();if(P3_3==0){DJtime=0;while(P3_3==0);}}}//显示上下限温度voidDisp_Temp(void){unsignedchartl_gw,tl_sw,tl_bw;//下限温度的个位,十位,百位74 unsignedcharth_gw,th_sw,th_bw;//上限温度的个位,十位,百位tl_sign=tl>>7;if(tl_sign){tl_bw=(~(tl-1))/100;//计算百位tl_sw=((~(tl-1))-tl_bw*100)/10;//计算十位tl_gw=(~(tl-1))-tl_bw*100-tl_sw*10;//计算个位}else{tl_bw=(tl)/100;tl_sw=(tl-tl_bw*100)/10;tl_gw=tl-tl_bw*100-tl_sw*10;}if(tl_flash_flag==1){if(flag==1){if(tl_sign){DisplayOneChar(3,1,0x2d);DisplayOneChar(4,1,tl_sw+0x30);DisplayOneChar(5,1,tl_gw+0x30);}else{DisplayOneChar(3,1,tl_bw+0x30);DisplayOneChar(4,1,tl_sw+0x30);//显示下限温度DisplayOneChar(5,1,tl_gw+0x30);}}else{DisplayOneChar(3,1,0x20);DisplayOneChar(4,1,0x20);//显示下限温度DisplayOneChar(5,1,0x20);}}else{DisplayOneChar(3,1,tl_bw+0x30);DisplayOneChar(4,1,tl_sw+0x30);//显示下限温度DisplayOneChar(5,1,tl_gw+0x30);}th_sign=th>>7;if(th_sign){th_bw=(~(th-1))/100;//计算百位th_sw=((~(th-1))-th_bw*100)/10;//计算十位74 th_gw=(~(th-1))-th_bw*100-th_sw*10;//计算个位}else{th_bw=(th)/100;th_sw=(th-th_bw*100)/10;th_gw=th-th_bw*100-th_sw*10;}if(th_flash_flag==1){if(flag==1){if(th_sign){DisplayOneChar(10,1,0x2d);DisplayOneChar(11,1,th_sw+0x30);//显示下限温度DisplayOneChar(12,1,th_gw+0x30);}else{DisplayOneChar(10,1,th_bw+0x30);DisplayOneChar(11,1,th_sw+0x30);//显示下限温度DisplayOneChar(12,1,th_gw+0x30);}}else{DisplayOneChar(10,1,0x20);DisplayOneChar(11,1,0x20);//显示下限温度DisplayOneChar(12,1,0x20);}}else{DisplayOneChar(10,1,th_bw+0x30);DisplayOneChar(11,1,th_sw+0x30);//显示下限温度DisplayOneChar(12,1,th_gw+0x30);}}//设置温度下限voidSet_TL_Temp(void){if(P1_5==0){Delay5Ms();if(P1_5==0){tl++;if(tl>125)tl=-55;}while(P1_5==0);}if(P1_4==0){Delay5Ms();74 if(P1_4==0){tl--;if(tl<-55)tl=125;}}}//设置温度上限voidSet_TH_Temp(void){if(P1_5==0){Delay5Ms();if(P1_5==0){th++;if(th>125)th=-55;}while(P1_5==0);}if(P1_4==0){Delay5Ms();if(P1_4==0){th--;if(th<-55)th=125;}}}voidCompare_Temp(signedcharl,signedcharh)//比较温度{unsignedchartl_temp;unsignedchary,s;union{bytec[2];intx;}temp;ow_reset();write_byte(0xCC);//SkipROMwrite_byte(0x44);//转换温度ow_reset();write_byte(0xCC);//SkipROMwrite_byte(0xbe);//读取寄存器temp.c[1]=read_byte();//读出温度低8位temp.c[0]=read_byte();//读出温度高8位//零下温度判断sflag=0;//温度零下标志0:零上,1:零下if((temp.c[0]&0xf8)!=0x00){74 sflag=1;//零下标志位置1temp.c[1]=~temp.c[1];//低8位取反temp.c[0]=~temp.c[0];//高8位取反tl_temp=temp.c[1]+1;//低8位加1temp.c[1]=tl_temp;//计算后重新存入数组if(tl_temp>255)temp.c[0]++;//如果低8位大于255,向高8位进1}y=0;s=0;y=temp.c[0]<<4;s=temp.c[1]>>4;y=s|y;if(yh)th_flag=1;elseth_flag=0;}voidTl_Al(void)//下限越限报{if(tl_flag==1){if(Temflag==0)beep(30);if(flag==1){DisplayOneChar(9,0,"A");DisplayOneChar(10,0,"L");}else{DisplayOneChar(9,0,0x20);DisplayOneChar(10,0,0x20);}}else{DisplayOneChar(9,0,0x20);DisplayOneChar(10,0,0x20);}}74 voidTh_Al(void)//上限越限报警{if(th_flag==1){if(Temflag==0)beep(17);if(flag==1){DisplayOneChar(13,0,"A");DisplayOneChar(14,0,"H");}else{DisplayOneChar(13,0,0x20);DisplayOneChar(14,0,0x20);}}else{DisplayOneChar(13,0,0x20);DisplayOneChar(14,0,0x20);}}voidTemshow(){if(P3_2==0){Delay5Ms();if(P3_2==0){Temflag=1;while(P3_2==0);}}}//中断入口,冒号闪烁voidt0(void)interrupt1using1{if(Stime==1){P3_6=!P3_6;TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;}if(Stime==0){TH0=(65535-50000)/256;//50ms定时TL0=(65535-50000)%256;timecount++;if((dipsmodid==2)|(dipsmodid==3)){if(timecount>9){74 timecount=0;flag=~flag;}}if(dipsmodid==4){ncount++;if(ncount>9){ntime++;ncount=0;}}if((dipsmodid==5)){mcount++;if(mcount>9){mtime++;mcount=0;}}if((dipsmodid==6)|(zjbl1==1)){t0count++;if(t0count>9){t0time++;t0count=0;}}}}//T1中断秒表计时,倒计时计时voidt1(void)interrupt3using3{if(Stime==0){TH1=(65536-10000)/256;TL1=(65536-10000)%256;if((dipsmodid==5)&(jshu%2==1))//秒表{mseg++;if(mseg==10){mseg=0;mses++;if(mses==10){mses=0;secg++;if(secg==10){secg=0;secs++;74 if(secs==6){secs=0;ming++;if(ming==10){ming=0;mins++;}}}}}}if((dipsmodid==6)|(zjbl1==1))//倒计时{mseg1++;if(mseg1==10){mseg1=0;mses1++;if(mses1==10){mses1=0;secg1--;if(secg1==-1){secg1=9;secs1--;if(secs1==-1){secs1=5;ming1--;if(ming1==-1){ming1=9;mins1--;if(mins1==-1){mins1=5;houg--;if(houg==-1){houg=9;hous--;if(hous==-1){hous=2;houg=4;74 dayg--;if(dayg==-1){dayg=9;days--;if(days==-1){if(dayb!=0){days=9;dayb--;}}}}}}}}}}}if((houg==0)&(hous==0)&(dayg==0)&(days==0)&(dayb==0)&(secg1==0)&(secs1==0)&(ming1==0)&(mins1==0)&(mseg1==0)&(mses1==0)){bzw=1;TR1=0;}}}}//id为1时的下一级选择voidid_case1_key(){if(P1_5==0)//增加{Delay5Ms();if(P1_5==0)Set(id,0);if(id!=7)while(P1_5==0);}if(P1_4==0)//减少{Delay5Ms();if(P1_4==0)Set(id,1);if(id!=7)while(P1_4==0);}}//根据选择调整相应项目并写入DS1302voidSet(ucharsel,ucharsel_1){signedcharaddress,item;signedcharmax,mini;if(sel==7){address=0x80;max=0;mini=0;}//秒if(sel==6){address=0x82;max=59;mini=0;}//分钟if(sel==5){address=0x84;max=23;mini=0;}//小时if(sel==3){address=0x86;max=31;mini=1;}//日if(sel==2){address=0x88;max=12;mini=1;}//月74 if(sel==1){address=0x8c;max=99;mini=0;}//年if(sel==4){address=0x8a;max=7;mini=1;}//星期item=R1302(address+1)/16*10+R1302(address+1)%16;if(sel_1==0)item++;elseitem--;if(item>max)item=mini;if(item0;i--){T_IO=ACC0;T_CLK=1;T_CLK=0;ACC=ACC>>1;}}74 //实时时钟读取一字节ucharRTOutputByte(void){uchari;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=T_IO;T_CLK=1;T_CLK=0;}return(ACC);}//往DS1302写入数据voidW1302(ucharucAddr,ucharucDa){T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr);RTInputByte(ucDa);T_CLK=1;T_RST=0;}//读取DS1302某地址的数据ucharR1302(ucharucAddr){ucharucData;T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr);ucData=RTOutputByte();T_CLK=1;T_RST=0;return(ucData);}//DS1302设置初始时间voidSet1302(uchar*pClock){uchari;ucharucAddr=0x80;W1302(0x8e,0x00);74 for(i=7;i>0;i--){W1302(ucAddr,*pClock);pClock++;ucAddr+=2;}W1302(0x8e,0x80);}//***********18B20驱动**************//延时voiddelay(unsignedintnum){while(--num);}//复位byteow_reset(void){bytepresence;DQ=0;//拉低总线delay(29);//保持480usDQ=1;//释放总线delay(3);//等待回复presence=DQ;//读取信号delay(25);//等待结束信号return(presence);//返回0:正常1:不存在}//从1-wire总线上读取一个字节byteread_byte(void){bytei;bytevalue=0;for(i=8;i>0;i--){value>>=1;DQ=0;DQ=1;delay(1);if(DQ)value|=0x80;delay(6);}return(value);}74 //向1-WIRE总线上写一个字节voidwrite_byte(charval){bytei;for(i=8;i>0;i--)//一次写一位{DQ=0;//DQ=val&0x01;delay(5);//DQ=1;val=val/2;}delay(5);}//读取和显示温度Read_Temperature(charxx,charyy){unsignedchari,tl_temp;unsignedintx;unsignedcharct[8];union{bytec[2];intx;}temp;ow_reset();write_byte(0xCC);//SkipROMwrite_byte(0x44);//转换温度ow_reset();write_byte(0xCC);//SkipROMwrite_byte(0xbe);//读取寄存器temp.c[1]=read_byte();//读出温度低8位temp.c[0]=read_byte();//读出温度高8位//零下温度判断sflag=0;//温度零下标志0:零上,1:零下if((temp.c[0]&0xf8)!=0x00){sflag=1;//零下标志位置1temp.c[1]=~temp.c[1];//低8位取反temp.c[0]=~temp.c[0];//高8位取反tl_temp=temp.c[1]+1;//低8位加1temp.c[1]=tl_temp;//计算后重新存入数组if(tl_temp>255)temp.c[0]++;//如果低8位大于255,向高8位进1}x=((temp.c[0]&0x07)*256+temp.c[1])*.625;for(i=0;i<8;i++){ct[i]=0;}74 i=0;while(x/10){ct[i]=x%10;x=x/10;i++;}ct[i]=x;if(sflag==1)DisplayOneChar(xx-1,yy,0x2d);elseDisplayOneChar(xx-1,yy,0x20);DisplayOneChar(xx,yy,ct[2]+0x30);//显示温度十位数DisplayOneChar(xx+1,yy,ct[1]+0x30);//显示温度个位数DisplayOneChar(xx+2,yy,0x2e);//显示小数点DisplayOneChar(xx+3,yy,ct[0]+0x30);//显示温度小数位DisplayOneChar(xx+4,yy,0x01);//显示自定义字符DisplayOneChar(xx+5,yy,0x43);//显示字符“C}//温度分辨率调整voidadjust_res(charres)///res分别等于0x1f,0x3f,0x5f温度读数分辨率分别对应//0.5,0.25,0.125{ow_reset();//复位write_byte(0xcc);//跳过Romwrite_byte(0x4e);//写暂存器write_byte(0x02);//写THwrite_byte(0x01);//写TLwrite_byte(res);ow_reset();//复位write_byte(0xcc);//跳过Romwrite_byte(0x48);//把暂存器内容写到EPRam中}voidmychar()//自定义字符{WriteCommandLCM(0x48,0);//第1行WriteDataLCM(0x02);WriteCommandLCM(0x49,0);//第2行WriteDataLCM(0x05);WriteCommandLCM(0x4a,0);//第3行WriteDataLCM(0x05);WriteCommandLCM(0x4b,0);//第4行WriteDataLCM(0x02);WriteCommandLCM(0x4c,0);//第5行WriteDataLCM(0x00);WriteCommandLCM(0x4d,0);//第6行WriteDataLCM(0x00);WriteCommandLCM(0x4e,0);//第7行WriteDataLCM(0x00);74 WriteCommandLCM(0x4f,0);//第8行WriteDataLCM(0x00);}74'