![含自编语音闹钟的电子时钟(一等奖)_第1页](http://file4.renrendoc.com/view12/M01/12/19/wKhkGWeBta6ABPNwAADKcJA6j-M373.jpg)
![含自编语音闹钟的电子时钟(一等奖)_第2页](http://file4.renrendoc.com/view12/M01/12/19/wKhkGWeBta6ABPNwAADKcJA6j-M3732.jpg)
![含自编语音闹钟的电子时钟(一等奖)_第3页](http://file4.renrendoc.com/view12/M01/12/19/wKhkGWeBta6ABPNwAADKcJA6j-M3733.jpg)
![含自编语音闹钟的电子时钟(一等奖)_第4页](http://file4.renrendoc.com/view12/M01/12/19/wKhkGWeBta6ABPNwAADKcJA6j-M3734.jpg)
![含自编语音闹钟的电子时钟(一等奖)_第5页](http://file4.renrendoc.com/view12/M01/12/19/wKhkGWeBta6ABPNwAADKcJA6j-M3735.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京化工大学第六届萌芽杯作品含自编语音闹钟的电子时钟作品类别:B类指导老师:吴亚琼参赛团队:OTW成员:王言*通信0803班200843066陈琳通信0803班200843079荀秀娟通信0803班200843086贾晓璐通信0803班200843090张小楠通信0802班200843038
设计名称:含自编闹钟的电子时钟摘要含自编语音闹钟的电子时钟是一个具有创新性的时钟。它可以显示年、月、日、时、分、秒、温度,实现日期(含星期)跟时间的多重显示,并且可以实现闹钟定时(可以调节),时间到,闹钟响,按一次键,闹钟停,否则闹钟会在一分钟后左右停止。闹钟具有录音报时功能,录音是通过语音录放芯片ISD1760实现的。我们可以把需要提醒自己的话录到闹钟中,时间到闹钟中自己的声音就会响起。与同类产品相比,它的创新性在于,闹钟播放的不是单调的一种声音,而是可以根据自己改变的,我们可以通过录音键进行多次录音。时钟的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89S52单片机,LCD1602液晶显示器,ISD1760语音录放芯片、DS18B20数字温度传感器与DS1302精确时钟控制芯片构成。软件方面主要包括电子时钟程序、显示程序、驱动程序、中断服务程序等。关键词:创新、电子时钟、单片机AbstractWithanelectronicallyself-progammingvoicealarmclock,itisacreativeclock.Theclockcanachieveamultipledisplayofthedatewiththetimeandthefunctionofsettingthetimebydemonstratingyear,month,day,hour,minute,secondandthetemperature.Thealarmclockspeaksassoonastimeisup,anditstopsifsomeonepresstherelatedkey.Otherwisetheclockwillstopinaboutaminute.IthasthefunctionoftimekeepingandrecordingthevoicewhichisachievedbyvoicerecorderchipISD1760.Ifweneedtoremindourselves,wecanthenrecordwhatwewanttosaytothealarmclock,andwhenthetimeisup,thealarminhervoicewillsound.Comparedwithsimilarproducts,itisinnovative.Alarmplaybackisnotamonotonousvoice,butcanchangeaccordingtotheirown,andwecanrecordaudiobuttonseveraltimes.Clockdesignprocesstosynchronizehardwareandsoftwaredesign.Intheeyeofhardware,ItismainlyconsistoftheAT89S52microcontroller,LCD1602,ISD1760voicerecorderscircuit,digitaltemperaturesensorDS18B20andprecisionclockcontrolchipDS1302.Andintermofsoftware,itismadeupofelectronicclock,display,driver,interruptserviceprogram.KeyWord:Innovation,ElectronicaAlarmClock,Microcontroller.
目录TOC\o"1-4"\h\z\u1.系统的硬件设计与实现 61.1电路设计图 61.2主要单元电路的设计 61.2.1单片机主控制模块的设计 61.2.2时钟电路模块的设计 71.2.3温度电路模块的设计 81.2.4显示模块的设计 91.2.5语音录放电路模块的设计 102.系统的软件设计 112.1程序流程框图 112.1.1时钟实现部分 12定时计时模块 12温度控制模块 13调时 14闹钟 152.1.2语音录放控制模块 162.2软件代码的设计 162.2.1定义引脚连接 162.2.2延时函数 172.2.3驱动与初始化函数 172.2.4写函数与读函数 192.2.5数据智能处理函数 23温度数据处理 23时间数据读取函数 24星期自动调整函数 252.2.6闹钟关联函数 27闹钟显示函数 27闹钟设置函数 282.2.7调整时间函数 312.2.8其它子函数 362.2.9主函数 363.仿真 384.实验结果与分析 415.设计的实用性分析及市场预测 426.作品总结与收获心得 437.致谢 438.参考文献 431.系统的硬件设计与实现1.1电路设计图1.2主要单元电路的设计1.2.1单片机主控制模块的设计AT89S52是低功耗,8位CMOS工艺处理器,具有8K在线可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活,超有效地解决方案。AT89S52单片机为40引脚双列直插芯片有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量二级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM,定时器/计数器,串口,中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。在我们的作品中,AT89S52对整个电路起到控制作用,语音芯片,时钟芯片接收来自单片机中程序的指令。从而实现在所选时间点上播放所录语音的功能。其中13,14,15脚接时钟芯片DS1302。23脚接语音芯片ISD1760。5脚接温度传感器,32脚到39脚接LCD1602液晶显示屏。XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路。1.2.2时钟电路模块的设计DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。试验中我们采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。DS1302与单片机的连接仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。如下图所示。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压5V。ds1302芯片的外部连线(注)注:该图中所示连接的管脚标号仅供说明注:该图中所示连接的管脚标号仅供说明基本的连接方式,与本例设计的管脚可能有所不同。1.2.3温度电路模块的设计DS18B20数字温度计提供九位温度读数,指示器件的温度,信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线(和地)。读、写完成温度变换所需的电源可以有数据线本身提供,而不需要外部电源。DS18B20有三个主要的数据部件:1).64激光ROM;2)温度灵敏元件;3)非易失性温度告警触发器TH和TL。器件。器件从单线的通信线取得其电源,在信号线为高电平的时间周期内,把能量储存在内部的电器中,在单信号线为低电平的时间期内断开此电源,直到信号线变为高电平重新接上寄生电源为止。作为另一种可供选择的方法,DS18B20也可用外部5V电源供电。每一DS18B20包括一个唯一的64位长的ROM编码。开始的8位是单线产品系列编码,接着48位是唯一的序列号,最后的八位是开始56位CRC。DS18B20通过门开通期间内低温度系数振荡器经历的周期个数计数来测量温度,而门开通期由高温度系数振荡器决定。在DS18B20完成温度交换之后,温度值与储存在TH和TL内的触发值相比较。如果温度测量的结果高于TH或低于TL,那么器件内告警标志将置位。每次温度测量更新此标志。只要告警标志置位,DS18B20将对告警搜索作出相应的反应。设计中我们将Vdd管脚接高电平,用于给DS18B20供电,GND管脚接地,DQ管脚接单片机的5脚,利用单片机控制和实现DS18B20显示9位温度读数,指示器件温度的功能。1.2.4显示模块的设计液晶显示器(LCD)具有功耗低、体积小、质量轻、功耗小的特点。点阵字符型液晶显示器把LCD控制器、点阵驱动器、字符存储器集成在一块印刷电路板上,构成便于应用的液晶模块。这类液晶模块不仅可以显示数字、字符,还可以显示各种图形符号以及少量自定义符号,并且可以实现屏幕的上下左右滚动、文字的闪烁等功能;人机界面友好,使用操作也更加灵活、方便,使其日益成为各种仪器仪表等设备的首选。LCD1602液晶显示屏采用标准的16脚(带背光)接口,主要功能有40通道点阵LCD驱动;可选择当作行驱动或列驱动;输入/输出信号:输出,能产生20×2个LCD驱动波形;输入,接受控制器送出的串行数据和控制信号;通过单片机控制将所测的频率信号读数显示出来。(LCD1602的外观图)我们之所以采用LCD1602是因为它显示质量高,数字式接口,体积小,重量轻,功耗低。设计中,我们将其VSS与VDD分别接地和接VCC,将VEE接在可变电阻器上,用于调节对比度,避免显示器“鬼影”出现,RS端、R/W端与E端分别接单片机6、7、8口,DB0~7端与单片机P0口顺序相连,由于P0口为双向漏极开路门,所以在这里需要接上10k欧姆的上拉电阻。最后将BLKA与BLKB分别接高电平和地。此后,作品中LCD1602液晶显示屏可用于显示时间,日期,及当前的环境温度。1.2.5语音录放电路模块的设计如图所示ISD1760语音录放芯片的管脚图。其工作电压:2.4-5.5V,最高不能超过6V。静态电流:0.5-1uA,工作电流:20mA。VCCD是数字电路电源端。它的主要功能有:录音功能、播放功能、擦除功能、音量控制功能、快进功能、复位功能及直通功能。/LED是指示信号输出端。/RESED是芯片复位端,其与地之间连接一个0.1uF电容,当其被触发,芯片将播放指针和录音指针都放置在最后一段语音信号的位置。MISO和MOSI分别为SPI接口的串行输出输入端口。SCLK是接口的时钟端,由主控制芯片产生,并且被用来同步控制芯片MOSI和MISO端各自数据输入和输出,此管脚空闲时必须拉高。/SS在为低时,选择该芯片成为当前被控制设备并且开启SPI接口,空闲时需要拉高。VSSA为模拟地端口。Anain为辅助的模拟输入,需要一个交流耦合电容(典型值为0.1uF),并且输入信号的幅值不能超过1.0Vpp。MIC+与MIC-分别麦克风输入+和输入-端。VSSP2为负极喇叭驱动地端。SP-为喇叭输出端。VCCP为PWM喇叭驱动地端。SP+是喇叭输出+端。VSSP1是正极PWM。喇叭驱动器地端。AUD/AUX是辅助输出端,决定APC寄存器的D7,用来输出一个AUD或AUX输出。AGC为自动增益控制端,/VOL为音量控制端。ROSC是振荡电阻,ROSC用一个电阻连接到地,决定芯片的采样频率端。VCCA是模拟电路电源端。/FT在独立芯片模式下,当FT一直为低时,Anain直通线路被激活。/PLAY、/REC和/ERASE分别为播放控制端、录音控制端和擦除控制端。/FWD为快进控制端。RDY/INT分别为独立模式和SPI模式端。VSSD为数字地端。(ISD1760管脚图)试验中我们利用19端口接开关实现对音量的的控制,23管脚和单片机的12管脚相连实现可控制的放音功能,24管脚和10、11管脚共同作用实现录音功能,25管脚接开关实现擦出功能,26管脚接开关实现快进功能,3管脚通过接开关和电容实现复位功能。13和15管脚接Speaker,2管脚接电阻和电容输出指示信号。1和28端口通过接普通电容和电解电容输入数字信号,8和21端口通过接普通电容和电解电容输入模拟信号。14和16端口的连接使得喇叭驱动器电源可用。2.系统的软件设计2.1程序流程框图定时器的模块:定时器的模块:时钟芯片温度采集模块:数字温度传感器语音实现模块:语音芯片显示模块:液晶显示屏控制模块:单片机对于语音芯片的接入,考虑到除语音芯片外的其他电路部分是纯数字网络,而语音芯片除数字电路外还包含模拟电路。另外语音芯片工作时采集的信号均为模拟信号,如时对语音信号的收集,整理与控制完全赋予单片机来完成,不但要增加模数与数模转换电路,还要增加考虑包括数据暂存,寻址与提取等等一系列问题,这样复杂化了程序,不仅是单片机工作负担加重,增大出错概率,还未能充分发挥新型语音芯片的卓越的控制能力,因此,在设计之初,我们确定了如下的设计思路:对于一切语音信号的控制完全由语音芯片实现,单片机仅对语音芯片提供命令控制,不参与信号的控制。根据这样的设计思路,电路可分成两大部分:时钟实现部分;闹钟的语音控制部分。2.1.1时钟实现部分本部分包含4个模块:定时模块、温度模块、显示模块和主模块。定时计时模块采用软件秒脉冲发生器利用定时器0的定时溢出中断,将之设定为100ms溢出中断,则10个中断时间正好为1s。设计流程框图:YYY是否到24h时变量回0闹钟判别中断返回中断次数+1到10次是否中断秒+1s是否到60s秒变量回0,分变量+1是否到60s分变量回0,时变量+1中断返回中断返回中断返回闹钟判别闹钟判别时间常数初始化NNNNYY温度控制模块YY开始初始化对环境采集温度信息写温度信息是否收集到温度采集指令N调时时间调整作为对电子时钟的校正方法,在时钟控制上非常重要。用户可通过调时功能随时随地地校正时间,确保时钟的准确性。本例时钟调节由四个按键共同完成。一二三四键分别实现进入调时模式与切换位,当前位+1,保存退出和不保存退出的功能。开始一键有效,进入时调整程序开始一键有效,进入时调整程序等待按键二键有效,时+1三键有效,保存修改并退出四键有效,不保存修改并退出一键有效,进入秒调整程序等待按键二键有效,秒+1三键有效,保存修改并退出四键有效,不保存修改并退出一键有效,进入月调整程序等待按键二键有效,月+1三键有效,保存修改并退出四键有效,不保存修改并退出一键有效,进入分调整程序等待按键二键有效,分+1三键有效,保存修改并退出四键有效,不保存修改并退出一键有效,进入年调整程序等待按键二键有效,年+1三键有效,保存修改并退出四键有效,不保存修改并退出一键有效,进入日调整程序等待按键二键有效,日+1三键有效,保存修改并退出四键有效,不保存修改并退出闹钟闹钟是本电子钟的特色闹钟音实现的载体。闹钟判别与处理的关键在于判别何时要进行闹铃。当时十位,十个位,分十位,分个位中的一位发生改变(进位)时,就需进判别,闹铃判别与处理的代码包含在定时器的中断子程序内。YYYNN闹钟判别处理时分位,个位,分分位,个位,改变了是否设定闹钟设置闹钟标志,启动闹钟中断返回清除闹钟标志判断是否为当前设定时间中断返回2.1.2语音录放控制模块语音录放模块采用ISD1760语音芯片,其内部集成完整的数字电路与模拟电路,可以完美地实现语音录放与存储,提取等等工作。我们只需为其搭配适当的扬声器与麦克,及可靠的外围电路即能让他正常地工作。2.2软件代码的设计2.2.1定义引脚连接DS1302RESET口–P.3.5DS1302CLK口—P3.4DS1302DATE口—P3.3DS18B20温度输入口DQ—P1.4LCD1602使能口ELCD1602R/S引脚—P1.5LCD1602RW引脚—P1.6Speaker信号输出—P3.2LCD1602数据端PDB—P0.0-P0.7实现程序Sbitrst=p3^5;Sbitclk=p3^4;Sbitdat=p3^3;Sbitrs=p1^5;Sbitrw=p1^6;Sbite=p1^7;SbitDQ=p1^4;Sbitp3_2=p3^2;SbitACC_7=ACC_7;2.2.2延时函数供需两个延时函数,以为是11微秒延时函数,另一为1毫秒延时函数。前者主要用于DS18B20的延时,后面主要用于LCD数据交换的延时。函数以空循环实现。实现程序:delay(uintt)//11us延时{For(;t>0;t--);}Delay1ms(uchartime)//1ms延时{Uchari,j;For(i=0;i<time;i++){For(j=0;j<250;j++)}}2.2.3驱动与初始化函数本例中需对数字温度传感器LCD与LCD中部分显示数据编写驱动与初始化函数。对前两者的初始化函数需保证数据输出端或使能端始终有效,最后一个则是为确保部分全局变量的初始值正确。实现程序Ow_reset(void){uchari;DQ=1;_nop_();_nop_();DQ=0;delay(50);DQ=1;delay(6);for(i=0;i<0x30;i++){if(!DQ)gotod1; } flag=0; //清标志位,表示ds1820不存在 DQ=1; return;d1: delay(45);//延时500us flag=1; DQ=1; //置标志位,表示ds1820存在}Enable(){rs=0;rw=0;e=0;delay1ms(3);e=1;}Timestart(){ time1[1]=time1[13]=time2[8]=time2[9]=time2[10]=0x20,time2[14]=0; time1[6]=1,time1[9]=2,time1[12]=3,time1[2]='2',time1[3]='0'; time1[14]='W',time2[2]=time2[5]=':'; write(0xc1);alarm[0]=read(); rst=0; write(0xc3);alarm[1]=read(); rst=0; write(0xc5); time1[0]=read(); rst=0;}2.2.4写函数与读函数写函数与读函数是通信中至关重要的组成部分,承载着数据流的交换工作,本例中的数字温度传感器LCD与时钟芯片分别拥有各自独立的读函数或写函数的能力或二者皆有。实现函数Read_temp(){ow_reset(); //总线复位if(!flag) //判断ds1820是否存在?若ds18b20不存在则返回return; write_byte(0xCC); //SkipROMwrite_byte(0x44); //发转换命令delay(70);write_byte(0xCC); //发SkipROM命令write_byte(0xBE); //发读命令temp_data[0]=read_byte();//温度低8位temp_data[1]=read_byte();//温度高8位 ow_reset();write_byte(0xCC); //SkipROMwrite_byte(0x44); //发转换命令}Ucharread_byte(void){uchari; ucharvalue=0; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ=0;// _nop_();_nop_();_nop_();_nop_();//4us DQ=1;_nop_();_nop_();_nop_();_nop_();//4us if(DQ) value|=0x80; delay(6); } DQ=1; return(value);}Voidwrite_byte(ucharval){ uchari; for(i=8;i>0;i--)// { DQ=1;_nop_();_nop_(); DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ=val&0x01;//最低位移出 delay(6);//66us val=val/2;//右移一位 } DQ=1; delay(1);}Write2(uchari){ P0=i; rs=1; rw=0; e=0; delay1ms(2); e=1;}Write1(uchardata*address,m){ uchari,j; for(i=0;i<m;i++,address++) { j=*address; write2(j); }}Lcdshow(){ P0=0XC; //显示器开、光标关 enable(); P0=0x80; //写入显示起始地址 enable(); write1(time1,16); P0=0xc1; //写入显示起始地址 enable(); write1(time2,15);}Write(ucharaddress){ uchari;clk=0;_nop_();rst=1;_nop_();for(i=0;i<8;i++){ dat=address&1; _nop_(); clk=1; address>>=1; clk=0;}}Ucharread(){ uchari,j=0; for(i=0;i<8;i++) { j>>=1; _nop_(); clk=0; _nop_(); if(dat) j|=0x80; _nop_(); clk=1; } return(j);}2.2.5数据智能处理函数温度数据处理由DS18B20读取的数据信息,需经过一个处理过程。着其中包括时温度正负判断与负温度的处理及显示最高位的负号问题。由此我们引入温度数据处理函数来解决这一数据信息中的转换问题。实现函数Work_temp(){ ucharn=0,m; if(temp_data[1]>127)//负温度求补码 { temp_data[1]=(256-temp_data[1]); temp_data[0]=(256-temp_data[0]); n=1; } time2[13]=ditab[temp_data[0]&0x0f]+'0'; time2[12]='.'; m=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);// if(n) { m-=16; } time2[9]=m/100+'0'; time2[11]=m%100; time2[10]=time2[11]/10+'0'; time2[11]=time2[11]%10+'0'; if(time2[9]=='0')//最高位为0时都不显示 { time2[9]=0x20; if(n)//负温度时最高位显示"-" { time2[9]='-'; } if(time2[10]=='0') { if(n) { time2[10]='-'; time2[9]=0x20; } else time2[10]=0x20; if(time2[11]=='0'&&time2[13]=='0') time2[11]=time2[12]=0x20; } }}时间数据读取函数本函数用于读取当前的年份,月份,日期,时,分,秒,为LCD正确显示时间做准备。实现函数Readtime(){uchari,m,n;write(0x8d); //读取年份m=read();rst=0;time1[4]=m/16+0x30;time1[5]=m%16+0x30;write(0x8b); //读取星期m=read();rst=0;time1[15]=m+0x30; for(i=7,n=0x89;i<11;i+=3,n-=2) //读取月份和日期 { write(n); m=read(); rst=0; time1[i]=m/16+0x30; time1[i+1]=m%16+0x30; } for(m=0,i=0,n=0x85;i<7;i+=3,n-=2,m++) //读取时,分,秒 { write(n); time[m]=read(); rst=0; time2[i]=time[m]/16+0x30; time2[i+1]=time[m]%16+0x30; }}星期自动调整函数实现函数:Ucharsetweek(){ uchari=5,j,n; j=(time1[4]&0xf)*10+(time1[5]&0xf); n=j/4; i=i+5*n; n=j%4; if(n==1) i+=2; elseif(n==2) i+=3; elseif(n==3) i+=4; j=(time1[7]&0xf)*10+(time1[8]&0xf); if(j==2) i+=3; elseif(j==3) i+=3; elseif(j==4) i+=6; elseif(j==5) i+=1; elseif(j==6) i+=4; elseif(j==7) i+=6; elseif(j==8) i+=2; elseif(j==9) i+=5; elseif(j==11) i+=3; elseif(j==12) i+=5; if(n==0) if(j>2) i++; j=(time1[10]&0xf)*10+(time1[11]&0xf); i+=j; i%=7; if(i==0) i=7; return(i); }2.2.6闹钟关联函数闹钟显示函数本例中在普通情况下按一下2键进入闹钟设置状态,当其显示的时刻即为当前所设闹钟点数。对于闹钟显示引入相应函数来完成。实现函数:Showalarm(){ uchari,j,a,b,n; ET1=1; for(j=0;j<6;j++) {i=0;while(1) { a=table2[i]; if(a==0) break; b=a&0xf; a>>=4; if(a==0) { TR1=0; gotoD1; } a=((--a)<<1)/2; TH1=th1=table1[a]/256,TL1=tl1=table1[a]%256; TR1=1;D1: do { b--; for(n=0;n<3;n++) { readtime(); lcdshow();P2=0xf7;if(P2==0xe7) { delay1ms(100); if(P2==0xe7) { TR1=0; ET1=0; return; }}} }while(b!=0); i++; } TR1=0; } ET1=0;}闹钟设置函数本函数针对不同按键指令作出相应的设置命令,达到可选择保存的修改闹钟的目的。实现函数Setalarm(){ uchari,n; for(i=1;i<16;i++) { time1[i]=0x20; } time2[0]=alarm[0]/16+0x30; time2[1]=(alarm[0]&0xf)+0x30; time2[3]=alarm[1]/16+0x30; time2[4]=(alarm[1]&0xf)+0x30; time2[6]=time2[7]=0x30; lcdshow(); i=0xc2; while(1) {P0=0xe; //显示器开、光标开enable();P0=i; //定光标enable();P2=0xf7;if(P2!=0XF7){ delay1ms(100); //延时0.1s去抖动 if(P2!=0XF7){j=7;if(P2==0X77){i+=3;if(i>0xc5)i=0xc2;} elseif(P2==0xb7) { if(i==0xc2) { n=(time2[0]&0xf)*10+(time2[1]&0xf); n++; if(n>23) n=0; time2[0]=n/10+0x30; time2[1]=n%10+0x30;} else { n=(time2[3]&0xf)*10+(time2[4]&0xf); n++; if(n>59) n=0; time2[3]=n/10+0x30; time2[4]=n%10+0x30; } lcdshow(); } elseif(P2==0xd7) {write(0xc0);write((time2[0]&0xf)*16+(time2[1]&0xf));rst=0;write(0xc2);write((time2[3]&0xf)*16+(time2[4]&0xf));rst=0;time1[0]=FLAG;write(0xc4);write(time1[0]);rst=0;TR0=0;timestart();return;} else { TR0=0; timestart(); return; } } } if(j==0) { TR0=0; timestart(); return; }}}2.2.7调整时间函数与调整闹钟函数setalarm相同,在处于调时界面而对不同按键指令作出可选择保存返回的调整。实现函数Settime(){ uchari=0x85,year,month,day,n; time2[6]=time2[7]=0x30,time1[14]=time1[15]=0x20; lcdshow(); while(1) {P0=0xe; //显示器开、光标开enable();P0=i; //定光标enable();P2=0xf7;if(P2!=0XF7) { delay1ms(100); //延时0.1s去抖动 if(P2!=0XF7) { j=7; if(P2==0X77) { i+=3; if(i==0x8e) i=0xc2; elseif(i>0xc5) i=0x85; } elseif(P2==0xb7) {year=(time1[4]&0xf)*10+(time1[5]&0xf);month=(time1[7]&0xf)*10+(time1[8]&0xf);day=(time1[10]&0xf)*10+(time1[11]&0xf); if(i==0x85) { year++; if(year>99) year=0; if((year%4)!=0) if(month==2&&day==29) day=28; } elseif(i==0x88) { month++; if(month>12) month=1; if(day>Day[month-1]) { day=Day[month-1]; if(month==2&&(year%4)==0) day=29; } } elseif(i==0x8b) { day++; if(day>Day[month-1]) { if(month==2&&(year%4)==0) { if(day>29) day=1; } if(month!=2) day=1; } } elseif(i==0xc2) { n=(time2[0]&0xf)*10+(time2[1]&0xf); n++; if(n>23) n=0; time2[0]=n/10+0x30; time2[1]=n%10+0x30; } else { n=(time2[3]&0xf)*10+(time2[4]&0xf); n++; if(n>59) n=0; time2[3]=n/10+0x30; time2[4]=n%10+0x30; } time1[4]=year/10+0x30; time1[5]=year%10+0x30; time1[7]=month/10+0x30; time1[8]=month%10+0x30; time1[10]=day/10+0x30; time1[11]=day%10+0x30; lcdshow(); } elseif(P2==0xd7) { write(0x8c); write((time1[4]&0xf)*16+(time1[5]&0xf)); rst=0; write(0x8a); write(setweek()); rst=0; for(i=7,n=0x88;i<11;i+=3,n-=2) { write(n); write((time1[i]&0xf)*16+(time1[i+1]&0xf)); rst=0; } for(i=0;i<7;i+=3,n-=2) { write(n); write((time2[i]&0xf)*16+(time2[i+1]&0xf)); rst=0; } TR0=0; time1[14]='W'; return; } else { TR0=0; time1[14]='W'; return; } } } if(j==0) { TR0=0; time1[14]='W'; return; }}}2.2.8其它子函数自建字显示函数Zijianzi(){ uchari; P0=0x40; enable(); for(i=0;i<32;i++) { write2(tab[i]);delay1ms(2); }}2.2.9主函数主函数通过调用各子函数,完成时系统初始化,清屏,定义显示模型字大小,控制光标位置等等一系列工作,最终完成动态时钟的实现。实现函数Main(){ IE=0X82; TMOD=0x11; write(0x8E); //禁止写保护 write(0); rst=0; P0=1; //清屏并光标复位 enable(); P0=0X38; //设置显示模式:8位2行5x7点阵 enable(); P0=6; //文字不动,光标自动右移 enable(); zijianzi(); //自建字 timestart(); while(1) { readtime(); //读取时间read_temp(); //读出18B20温度数据 work_temp(); //处理温度数据 lcdshow(); //显示时间 if(time1[0]!=0x20) if(time[0]==alarm[0]) if(time[1]==alarm[1]) if(time[2]==0) showalarm(); P2=0xf7; if((P2&0XF0)!=0XF0) { delay1ms(100); //延时0.1s去抖动 if((P2&0XF0)!=0XF0) { j=7; TH0=TIME/256,TL0=TIME%256; TR0=1; if(P2==0x77) { settime(); } elseif(P2==0XB7) { setalarm(); } elseif(P2==0XD7) { TR0=0; if(time1[0]==FLAG) time1[0]=0x20; else time1[0]=FLAG; write(0xc4); write(time1[0]); rst=0; } } } delay1ms(100); }}3.仿真KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Wind
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 10吃饭有讲究(说课稿)-部编版道德与法治一年级上册
- 7 汤姆·索亚历险记(节选)说课稿-2023-2024学年六年级下册语文统编版
- 2025集体土地房屋转让合同
- Unit 2 My week PB Let's talk (说课稿)-2024-2025学年人教PEP版英语五年级上册001
- 2025产品销售咨询服务合同(中介撮合客户)
- 2025合同模板车位租赁合同范本
- 10吃饭有讲究 说课稿-2024-2025学年道德与法治一年级上册统编版001
- 个人汽车信贷合同范例
- 乡村道路改造雨季施工方案
- 重庆不锈钢支撑施工方案
- 呆死帐的发生与预防课件
- 10000中国普通人名大全
- 导数常见函数图像
- 起重机械安装吊装危险源辨识、风险评价表
- 华北理工儿童口腔医学教案06儿童咬合诱导
- 中国建筑项目管理表格
- 高一3班第一次月考总结班会课件
- 公共政策分析导论教学课件汇总完整版电子教案
- 我国油菜生产机械化技术(-119)
- 大跨度斜拉桥上部结构施工技术(图文并茂)
- 论人口模型论文计划生育政策调整对人口数量结构及其影响
评论
0/150
提交评论