版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
多功能数字钟的设计与制作摘要:本数字钟采用STC89c58RD+单片机作为主控制器,结合温度传感器DHT11、时钟芯片DS1302、语音芯片ISD4004,来实现温度湿度测量、闹钟、秒表、倒计时、12时制24时制转换、报时到分和显示年、月、日、时、分、秒的功能。而在显示方面采用了LCD12864液晶显示。由于本设计需要庞大的程序控制,因此软件程序均采用C语言编写,便于移植与升级。关键词:单片机控制;数字钟;STC89c58RD+;DS1302;ISD4004;DHT11;LCD12864Multi-functiondigitalclockdesignandproductionAbstract:ThedigitalclockusesSTC89c58RD+microcontrollerasthemaincontroller,withtemperaturesensorDHT11,clockchipDS1302,andtheamplifierchipISD4004,toachievethetemperatureandhumiditymeasurements,alarmclock,stopwatch,countdown,12-hour24-hourconversion,timekeepingtopointsanddisplayyear,month,day,hour,minuteandsecondfunctions.ThetermsusedinthedisplayLCD12864liquidcrystaldisplay.Asthedesignrequiresalargeprocesscontrol,softwareprogramsarewrittenusingClanguageforeasymigrationandupgrades.Keywords:microchipcontrol;DigitalClock;STC89c58RD+;DS1302;ISD4004;DHT11;LCD12864目录1背景与意义11.1背景11.2意义11.3功能介绍……………….……..22方案比拟与论证32.1设计任务与要求32.2方案比拟与论证33系统硬件设计53.1总体电路框图53.2单元电路设计5单片机模块……………5时钟模块………………9温湿度采集模块……………………12语音模块……………15液晶显示模块………………………19按键模块……………………….…..234系统软件设计244.1总体软件框图244.2各模块程序设计254.2.1时钟驱动模块………………………254.2.2温湿度采集数据模块………………264.2.3液晶驱动程序………………………284.2.4语音控制程序………………………305系统调试与测试315.1硬件调试315.2软件调试316设计总结32致谢32参考文献33附录34附录A:电路图34附录B:程序清单35多功能数字钟的设计与制作背景与意义1.1背景20世纪末,电子技术获得了飞速的开展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的开展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么珍贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。目前,单片机正朝着高性能和多品种方向开展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面开展。下面是单片机的主要开展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大局部功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。1.2意义数字钟是采用数字电路实现对时、分、秒、数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的开展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时播送、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为根底的。因此,研究数字钟及扩大其应用,有着非常现实的意义。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的开展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。为此,我设计了一款多功能语音数字钟,它可以显示年、月、日、小时、分钟、秒钟、星期等时间信息,可以进行12时制与24时制转换功能,同时可以显示环境的温度和湿度信息。还具有按键调节时间,语音实时报时到分,秒表,倒计时和5路闹钟设置功能。时钟采用LCD作为显示器,界面友好。1.3功能介绍液晶屏供可以显示5个页面,初始化时显示页面1。其包括第一行显示年、月、日。第二行显示时、分、秒、时制〔12时制那么有AM和PM显示,24时制那么没有〕。第三行显示湿度和温度。第四行显示星期。按Model键切换成设置模式,按一下Model键液晶屏显示页面2为时间设置,按Set键后,通过左键、右键、加键和减键就可以对包括年、月、日、时、分、秒、星期和时制的时间参数进行设置,设置完后再按Set键就可以保存设定的时间参数。按两下Model键液晶屏显示页面3为闹钟设置,可同时设置不同的5路闹钟,其中,每路闹钟还有模式选择,包括星期一、星期二、星期三、星期四、星期五、星期六、星期日、工作日、周末日和每天。按Set键后,通过左键、右键、加键和减键就可以对包括闹钟时间、闹钟状态〔开或关〕、闹钟路数、闹钟模式的设置。设置完后再按Set键就可以保存设定的闹钟参数。按三下Model键液晶屏显示页面4为秒表设置,秒表计时包括时、分、秒及千分秒。按Set键清零,按加键或减键那么开始和暂停。按四下Model键液晶屏显示页面5为倒计时设置,倒计时计时同样包括时、分、秒及千分秒。按Set键后通过左键、右键、加键和减键进行倒计时时间设置,设置完后再按Set键就可以保存设定的倒计时时间参数。此时加键或减键是倒计时的开关,按一下开始倒计时,再按一下暂停倒计时;按左右键倒计时清零。在液晶屏显示页面1时,按一下Set键,数字钟会进行24时制的实时报时到分的功能。方案比拟与论证设计任务与要求实现根本的时钟显示,包括年、月、日、时、分、秒、星期的显示。2.1.2实现时间的12时制与24时制的转换实现当前环境温度湿度的测量实现闹钟功能实现秒表和倒计时功能实现实时报时到分的功能方案比拟与论证方案一:采用AT89C51为主控器件,结合温度采集模块DS18B20、时钟芯片DS1302、语音芯片ISD4004和蜂鸣器也可以实现显示时间显示,也还可以实现闹钟,秒表,倒计时和报时功能。在显示方面采用LED点阵显示。但是多功能数字钟主要是以程序控制为主,要实现以上功能需要大量的程序,51单片机的内存比拟小,一方面可能容纳不了这么多程序;另方面,即使容纳的了这么多的程序,也必然会影响数字钟的运行速度,甚至可能卡机。同时,采用DS18B20检测温度有点大材小用,生活上的温度测量并不需要非常的精确。而且,此方案选择LED点阵显示,必然使得制作时焊接麻烦,工程量大,同时还会是数字钟需要很大的功耗。无论是从产品质量还是环保方面,此方案都不是很理想的。以下图为方案一的方框图:单片机单片机AT89C51温度检测DS18B20时钟芯片DS1302语音芯片ISD4004LED显示蜂鸣器图2.2.1方案一方框图方案二:采用单片机STC89c58RD+为主控器件,结合温湿度传感器DHT11、时钟芯片DS1302、语音芯片ISD4004和蜂鸣器来可以实现显示包括年、月、日、时、分、秒、星期等时间显示,也还可以实现闹钟,秒表,倒计时和报时功能。在显示方面采用LCD12864液晶显示屏显示。58单片机具有更大的内存,对于设计像这样大程序的器件是非常适宜的。温湿度采集方面采用温湿度传感器已经很够用了,而显示采用LCD12864液晶显示屏显示,减少了很多的焊接工作,同时电路还更稳定,性能更好,更节能。以下图为方案二的方框图:单片机单片机STC89c58RD+温湿度传感器DHT11时钟芯片DS1302语音芯片ISD4004液晶显示屏LCD12864蜂鸣器图方案二方框图通过方案一与方案二的比拟,很明显方案二做出来的产品性能更好,更稳定,更经济。在实现相同功能下,方案二会是一个更好的设计。所以我的设计采用的方案二的设计思路。系统硬件设计总体电路框图单片机单片机STC89c58RD+温湿度传感器DHT11时钟芯片DS1302语音芯片ISD4004液晶显示屏LCD12864蜂鸣器键盘电源2电源1喇叭图3.1总体电路框图单元电路设计单片机模块.1STC89c58RD+单片机简介STC89C58RD+是一种低功耗高性能的8位单片机,STC89C58RD+系列是全球第一片掉电模式时典型功耗小于0.1uA的8051单片机。片内带有一个32k字节的F1ash可编擦除只读存储器(PEROM),它采用了CMOS工艺和STC(宏晶)公司的高密度非易失性存储器(NURAM)技术,而且其输出引脚和指令系统和MCU-51系列单片机兼容。片内的Flash存储器允许在系统内可改编程序或用常规的非易失性的存储器编程器来编程。同时它具有三级程序存储器保密的性能。在众多的51系列单片机中,要算STC(宏晶)公司的STC89C58RD+最实用,因为它不仅和MCU-51系列单片机指令、管脚完全兼容,而且它支持ISP(在系统可编程),无需高价的编程器,可轻松通过串口实现程序下载和远程升级,加上其片内的32k程序存储器是Flash工艺的,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。此外,它有1280字节的RAM,8K以上的E2PROM,内置看门狗。在ISP下载编程时就可以任意设置6时钟/机器周期或12时钟/机器周期,STC单片机ISP引导码出厂时已有,不需要用户烧录。该单片机对开发设备要求很低,开发时间也大大缩短。单片机出厂时已完全加密,无法解密,其DIP封装引脚如图1所示图.1STC89c58RD+单片机.2单片机引脚功能特点:1.增强型6时钟/机器周期,12时钟/机器周期8051CPU
2.工作电压:5.5V-3.4V〔5V单片机〕/3.8V-2.0V〔3V单片机〕
3.工作频率范围:0-40MHz,相当于普通8051的0~80MHz.实际工作频率可达48MHz.
4.用户应用程序空间4K/8K/13K/16K/20K/32K/64K字节
5.片上集成1280字节/512字节RAM
6.通用I/O口〔32/36个〕,复位后为:P1/P2/P3/P4是准双向口/弱上拉〔普通8051传统I/O口〕
P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP〔在系统可编程〕/IAP〔在应用可编程〕,无需专用编程器/仿真器,可通过串口〔P3.0/P3.1〕直接下载用户程序,8K程序3秒即可完成一片
8.EEPROM功能
9.看门狗
10.内部集成MAX810专用复位电路〔D版本才有〕,外部晶体20M以下时,可省外部复位电路
11.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用
12.外部中断4路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒
13.通用异步串行口〔UART〕,还可用定时器软件实现多个UART
14.工作温度范围:0-75℃/-40-+85.3单片机设计原理图介绍:系统采用STC89c58RD+单片机作为控制核心。STC89c58RD+单片机与MCS_51系列单片机产品兼容,采用了Flash存储器结构,可以在线下载程序,易于日后的升级。图3主要负责各个模块的初始化工作;设置定时器、存放器的初值;读取并处理时间、温度等信息;处理按键响应;控制液晶实时显示。图.1单片机硬件原理图主控单片机硬件电路连接如图3.2.1所示。其只要负责对温湿度传感器DHT11的温度湿度采集处理和显示,对时钟ICds1302时钟信息提取并显示和写入需要设置的时间数据到ds1302指定的存放器里。其中由C1,C2和Y1组成单片机时钟电路,其中系统采用11.0592M晶振;由RST,C3,R1组成按键电平复位电路。如有图所示。为了增强P0口的驱动能力,故在接口处接上P0,10K的上拉电阻。P0口为单片机与液晶显示器通信的数据端口;图.2按键电平复位电路P25,P26,P27连接液晶显示器的控制信号端口;P10,P11,P12为单片机与时钟芯片DS1302通信的连接端口;P1.5为单片机连接温湿度传感器DHT11的通信端口;P30~P35为连接按键模块的接口。时钟模块.1DS1302简介DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1RES复位2I/O数据线3SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mWDS1302是由DS1202改良而来增加了以下的特性双电源管脚用于主电源和备份电源供给Vcc1为可编程涓流充电电源附加七个字节存储器它广泛应用于便携式仪器以及电池供电的仪器仪表等.2各引脚的功能:产品领域下面将主要的性能指标作一综合:◆实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力还有闰年调整的能力◆318位暂存数据存储RAM◆串行I/O口方式使得管脚数量最少◆宽范围工作电压2.05.5V◆工作电流2.0V时,小于300nA◆读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式◆8脚DIP封装或可选的8脚SOIC封装根据外表装配◆简单3线接口◆与TTL兼容Vcc=5V◆可选工业级温度范围-40+85◆与DS1202兼容◆在DS1202根底上增加的特性——对Vcc1有可选的涓流充电能力——双电源管用于主电源和备份电源供给——备份电源管脚可由电池或大容量电容输入——附加的7字节暂存存储器1.DS1302的根本组成和工作原理DS1302的管脚排列及描述如以下图及表所示管脚描述X1X2——32.768KHz晶振管脚GND——地RST——复位脚I/O——数据输入/输出引脚SCLK——串行时钟Vcc1,Vcc2——电源供电管脚图.1DS1302管脚图订单信息局部#描述DS1302串行时钟芯片8脚DIPDS1302S串行时钟芯片8脚SOIC〔200mil〕DS1302Z串行时钟芯片8脚SOIC〔150mil〕2.DS1302内部存放器CH:时钟停止位存放器2的第7位12/24小时标志CH=0振荡器工作允许bit7=1,12小时模式CH=1振荡器停止bit7=0,24小时模式WP:写保护位存放器2的第5位:AM/PM定义WP=0存放器数据能够写入AP=1下午模式WP=1存放器数据不能写入AP=0上午模式TCS:涓流充电选择DS:二极管选择位TCS=1010使能涓流充电DS=01选择一个二极管TCS=其它禁止涓流充电DS=10选择两个二极管DS=00或11,即使TCS=1010,充电功能也被禁止A、时钟B、RAM.3DS1302原理图设计介绍图.2DS1302原理图电路原理图如图,DS1302与单片机的连接也仅需要3条线:RST引脚、SCLK串行时钟引脚、I/O串行数据引脚,由C4和Y2组成DS1302时钟振荡电路,提供计时脉冲,其中Y2为32.768MHz。其中SCLK,I/O,RST分别接主控单片机的P10,P11,P12脚。温湿度采集模块.1DHT11传感器简介DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最正确选那么。产品为4单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。1.传感器性能说明2.接口说明图.1接口说明图3.电源引脚DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚〔VDD,GND〕之间可增加一个100nF的电容,用以去耦滤波。4.串行接口DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数局部和整数局部,具体格式在下面说明,当前小数局部用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据〞所得结果的末8位。i温度整数数据+8bit温度小数数据〞所得结果的末8位。用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取局部数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。5.测量分辨率测量分辨率分别为8bit〔温度〕、8bit〔湿度〕6.电气特性VDD=5V,T=25℃注:采样周期间隔不得低于1秒钟。.2DHT11原理图简介右图为温湿度传感器DHT11的硬件原理图其中1脚为电源脚,2脚连接到单片机P15脚,将数据传送到单片机中。图.2DHT11原理图语音模块.1ISD4004简介ISD系列语音芯片是美国ISD公司推出的产品。该系列语音芯片采用多电平直接接模拟存储〔ChipCorder〕专利技术,声音不需要A/D转换和压缩,每个采样值直接存储在片内的闪烁存储器中,没有A/D转换误差,因此能够真实、自然地再现语音、音乐及效果声。防止了一般固体录音电路量化和压缩造成的量化噪声和金属声。ISD4004语音芯片采用CMOS技术,内含晶体振荡器、防混叠滤波器、平滑滤波器、自动静噪、音频功率放大器及高密度多电平闪烁存储阵列等〔见图1〕,因此只需很少的外围器件就可构成一个完整的声音录放系统。芯片设计是基于所有操作由微控制器控制,操作命令通过串行通信接口〔SPI或Microwire〕送入。采样频率可为4.0Hz、5.3Hz、6.4Hz、8.0kHz,频率越低,录放时间越长,而音质那么有所下降。片内信息存于内烁存储器中,可在断电情况下保存100年〔典型值〕反复录音10万次。器件工作电压3V,工作电流25~30mA,维持电流1μA?单片录放语音时间8~16min,音质好,适用于移动机及其它便携式电子产品中。ISD4004系列芯片引脚图如图2所示。同相模拟输入〔ANAIN+〕-这是录音信号的同相输入端,输入放大器可用单端或差分驱动。单端输入时,信号由耦合电容输入,最大幅度为峰峰值32mV,耦合电容和本端的3kΩ输入阻抗决定了芯片频率的低端截止频率。在差分驱动时,信号最大幅度为峰峰值16mV。反相模拟输入〔ANAIN-〕-差分驱动时,这是录音信号的反相输入端。信号通过耦合电容输入,最大幅度为峰峰值16mV,本端的标称输入阻抗为56kΩ,单端驱动时,本端通过电容接地。两种方式下,ANAIN+和ANAIN-端的耦合电容值应用相同。音频输出〔AUDOUT〕-提供音频输出,可驱动5kΩ的负载。串行输入〔MOSI〕-此为单行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD输入。串行输出〔MISO〕ISD-串行输出端,ISD未选中时,本端呈高阻态。串行时钟〔SCLK〕-ISD的时钟输入端,由于控制器产生,用于同步MOSI和MISO的数据传输。数据在SCLK上升沿锁存到ISD,在下降沿移出ISD。中断〔INT〕-本端为漏极开路输出,ISD在任何操作〔包括快进〕中检测到EOM或OVF时,本端变低并保持,中断状态在下一个SPI周期开始去除,中断状态也可用RITN指令读取。行地址时钟〔RAC〕-漏极开始输出。生个RAC周期表示ISD存储器的操作进行了一行〔ISD4004系列中的存储器有2400行〕。8kHz采样频率的器件,RAC周期为200ms,其中175ms保持高电平,低电平为25ms。快进模式下,RAC为218.75μs高电平,31.25μs为低电平,该端可用于存储管理技术。外部时钟〔XCLK〕-本端有内部下拉元件,芯片内部的采样时钟在出厂前已调校,误差在+1%内,在不外接时钟时,此端必须接地。自动静噪〔AMCAP〕-1μF电容构成内部峰值检测电路的一局部,检测出的峰值电平与内部设定的阈值作比拟,决定自动静噪电路的工作与否。大信号时自动静噪电路不衰减,静音时衰减6dB。同时,1μF电容也影响自动静噪电路时信号幅度的响应速度,本端接VCCA那么禁止自动静噪。OVF标志指示ISD录放操作已到达存储器的末尾。EOM标志只有放音过程中检测到内部的EOM标志时,此状态位置1,如图3所示。以以下举了几种对ISD器件进行操作进的批令次序。信息快进。用户不必知道确切的地址,就能快地跳过一条信息。信息快进只用于放音模式。放音速度是正常的1600倍,遇到EOM后停止,内部地址计数器加1,并接下条信息开始处。上电顺序。器件延时TPUD〔8kHz〕采样时,约25ms后才能开始操作。因此,用户发完上电指令后,必须等待TPUD,才能发出一条操作指令。例如从00处放音,应遵循如下时序:发powerup命令;等待TPUD〔上电延时〕;发地址值为00的SETPLAY命令;发PLAY命令。器件会从00地址开始放音,当出现EOM时,立即中断,停止放音。如果从00处录音,那么按以下时序:发powerup命令;等待TPUD〔上电延时〕;发powerup命令;等待2倍TPUD;发地址值为00的SETREC命令;发REC命令。器件便从00地址开始录音,一直到出现OVF〔存储器末尾〕,录音停止。.2ISD4004硬件原理图简介图.1ISD4004原理图图.2ISD4004供电电路电路原理图如图.1所示,整个电路由单片机控制液晶显示模块.1LCD12864简介YM12864是内带中文字库的液晶屏,显示界面有4行,总共可显示32个汉字。其引脚和YM1602兼容。可显示中文,ASCII码,和自定义的字库,具有图形显示功能。文字显示时,文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。LMG-SSC12K64内部提供128×2字节的字符显示RAM缓冲区〔DDRAM〕。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM〔中文字库〕、HCGROM〔ASCII码字库〕及CGRAM〔自定义字形〕的内容。三种不同字符/字型的选择编码范围为:0000~0006H〔其代码分别是0000、0002、0004、0006共4个〕显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。LCD12864液晶引脚图如以下图17所示:LCD12864引脚说明:VSS:模块的电源地VDD:模块的电源正端VO:LCD驱动电压输入端RS(CS):并行的指令/数据选择信号;串行的片选信号R/W(sid):并行的读写选择信号;串行的数据口DBO~DB7:数据接口PSB:并/串行接口选择;NC:空脚RET:复位,低电平有效LED_A:背光源正极图.1LCD12864液晶屏LED_K:背光源负极LCD12864硬件构成说明如以下图18所示:图.2LCD12864内部结构IC3为行驱动器。IC1,IC2为列驱动器。IC1,IC2,IC3含有以下主要功能器件。1指令存放器〔IR〕IR是用于存放指令码,与数据存放器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。2数据存放器(DR)DR是用于存放数据的,与指令存放器存放指令相对应。当D/I=0时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下有DR读到DB7~DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。3忙标志:BFBF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不能接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUSREAD指令,可以将BF读到DB7总线,从检验模块之工作状态。4显示控制触发器DFF次触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示,DDRAM的内容就显示在屏幕上,DFF=0为关显示。DDF的状态是指令DISPLAYON/OFF和RST信号控制的。5XY地址计数器XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63.6显示数据RAM(DDRAM)DDRAM是存储图形显示数据的。数据为1便是显示选择,数据为0表示显示非选择。7Z地址计数器Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为。Z地址计数器可以用指令DISPLAYSTARTLINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。.2LCD12864原理图简介下面是LCD12864的硬件连接原理图如图.2所示:图.3液晶屏原理图我设置单片机驱动LCD12864采用并行方式,RS,RW,EN分别接主控单片机的P25,P26,P27脚,DB0~DB7接到主控单片机的P0数据接口。按键模块图按键原理图我设计了6个按键作为输入键盘,其中S1是Set键,在设置模式下,按一下S1就可以对参数进行设置;同时假设是在页面1时按一下S1,那么数字钟会进行实时报时。S2是左键,设置参数时是选位键,每按一次,相应的选择上一位。S5为右键,同样是在设置参数时的选位键,每按一次,相应的选择下一位。S4是减键,是对被选中位数据进行减1。S3为加键,是对被选中位数据进行加1。S6那么是Model模式选择键,没按一下,就进入下一页面。系统软件设计总体软件框图图4.1总体软件框图各模块程序设计时钟驱动程序:DS1302读写时序说明:DS1302是SPI总线驱动方式。它不仅要向存放器写入控制字,还需要读取相应存放器的数据。以下图图21是DS1302的控制字。图21控制字〔即地址和命令字节〕图21控制字〔即地址和命令字节〕控制字的最高有效位〔位7〕必须是逻辑1,如果它为0,那么不能把数据写入到DS1302中。※○位6:如果为0,那么表示存取日历时钟数据,为1表示存取RAM数据;位5至位1〔A4~A0〕:指示操作单元的地址;位0〔最低有效位〕:如为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位〔0位〕开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如以下图22所示:图22DS1302读写时序图图22DS1302读写时序图主要驱动程序见附录。温湿度采集数据模块图.1温湿度传感器DHT11其通讯过程入以下图所示:图.2通讯过程总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,那么DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。图.3数字0信号表示方法图.4数字1信号表示方法.主要驱动程序见附录。液晶驱动程序:LCD12864提供两套控制指令,根本指令和扩充指令如下:根本指令:扩充指令:当LCD在接受指令前,单片机必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。下面是LCD12864的读写时序如以下图26所示:图26LCD12864读写时序图26LCD12864读写时序写LCD12864程序时还要注意,欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否那么,显示的字符中将会有一个空ASCII字符位置。当字符编码为2字节时,应先写入高位字节,再写入低位字节。模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0〞,方可接受新的指令。如果在送出一个指令前不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。“RE〞为根本指令集与扩充指令集的选择控制位。当变更“RE〞后,以后的指令集将维持在最后的状态,除非再次变更“RE〞位,否那么使用相同指令集时,无需每次均重设“RE〞位。具体驱动程序见附录。语音控制程序整个程序包括主程序和中断子程序两局部。单片机提供了用户键盘、显示和ISD4004所需接口。它接收击键功作,并将相应指令传给ISD4004,同时监控ISD4004的中断输出。当开关KS闭合〔KS=1〕时,读取ISD4004的状态存放器,从而根据OVF和EOM的状态进行相应的处理。当OVF=1,即存储器溢出时,那么不管当前为何种状态均将ISD4004的地址置零,并继续运行原指令;当EOM=1时,当前状态只可能为放音或快进,假设为快进那么置为放音态,并继续运行。如此设计便实现了循环录放的功能,同时在快进时,自动停止在下一个语音段开始处,并继续放音。中断程序流程图所示图中断程序流程图我现在设计的是实时报时到分,如果单纯的按照一次报时就录一次音,那么要录1440次。如此庞大的工作量对于毕业设计短短几个月的时间显然是不够的,况且录音太多容易产生地址错乱,很难调试。因此我采用了数组的录音方式,下面是我的录音方式:按照“现在是北京时间ab:cd〞来报时,每一次报时先从第一组录音里取出录音内容,然后a、b分别从第二组录音和第三组录音里取出组合成时数,再从第四组录音里取出“点〞,c、d又从第二组和第三组录音里取出合成分数,最后再加上第四组录音的“分〞。如此就可以报时了。5系统调试与测试5.1硬件调试在电路板做出来是确实是遇上了一些问题,大概有一下几个问题:在电路板腐蚀完后发现,由于太粗心画原理图时没有改好引脚,出现有几条连接线没有,最后要用跳线的形式解决。在进行语音调试时,语音芯片不知为何发热烧坏了,这个问题我至今还没有找到答案。之后的几次调试,语音芯片有时会出现程序地址错乱,解决方法是调试时和装机使用时使用相近电压和稳定的电源;特别是时钟芯片ds1302,时间获取时会出现无法正常获取的可能性,解决方法就是加上拉电阻在该芯片的数据传输口。5.2软件调试软件调试时,主要就是语音调试时,很容易出现程序地址错乱,这应该也是比拟正常的问题,花多点时间,耐心点调试就可以解决的了。6设计总结在这次整的设计过程中,我充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品,到达了预期的目的,完了最初的设想。但是在复原理图时由于粗心大意,没有将引脚标注好,结果又几根导线画到,板油腐蚀好了,最后只好用跳线的形式补上,所以导致了整块板的看起来不是很美观。通过这一次的经验我意识到了对电路的设计、布局要先有一个好的构思,而且要认真仔细的检查各个功能模块的具体情况,确保不遗留什么元件,才做出美观、大方的电路板。程序编写中,先研究各个功能模块的程序,包括时钟模块的程序,温湿度数据采集模块的程序,不懂的就通过查资料或者请教老师和同学来解决,然后再整理好这些程序,最终完成了能实现整个设计要求的程序。在此次设计中,知道了做凡事要有耐心,不要想着走捷径,特别是在调试语音局部的时候,非常的需要耐心,其实不管做什么事都要认真仔细,因为细节决定成败。总之,这次设计使我的能力得到了全方位的提高。致谢本研究及学位论文是在各位老师的亲切关心和悉心指导下完成的。你们严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和鼓励着我。从课题的选择到工程的最终完成,你们都始终给予我细心的指导和不懈的支持。在此谨向老师们致以诚挚的谢意和崇高的敬意。
在此,我还要感谢在一起愉快的度过大学生活的2007级电子的同门,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!参考文献[1]李群芳张士军黄建单片机微型计算机与接口技术〔第2版〕〔电子工业出版社〕2007,1[2]张毅刚彭喜元姜守达乔立岩.MCS-51单片机应用设计〔哈尔滨工业大学出版社〕2006,10[3]谭浩强.C程序设计(第三版)(清华大学出版社)2006.11[4]求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2004[5]康华光.电子技术根底[M].北京:高等教育出版社,2001年[6]杜肤生,数字集成电路应用精粹,北京:人民邮电出版社2001[7]陈大钦,电子技术根底实验(第二版),北京:高等教育出版社2000[8]全国大学生电子设计竞赛组委会,第五界全国大学生电子设计竞赛获奖作品选编.2001.北京理工大学出版社,2003[9]中国计量出版社组编,新编电子电路大全,北京:中国计量出版社,2001.1[10]葛汝明,《电子技术实验与课程设计》,山东:山东大学出版社2004[11]周永金,《模拟电子技术及应用》,西安:陕西国防学院电子教研室2005[12]吴玮玮,PROTEL99简明应用教程,西安:陕西国防学院电子教研室2006[13]任元,吴勇,《常用电子元器件简明手册》,北京:工业出版社2000[14]程路,郑毅,向先波,PROTEL99SE电路板设计与制作,人民邮电出版社2007[15]沙占友王彦明孟志永.单片机外围电路设计[M].北京:电子工业出版社,2003,1[16]李建忠.单片机原理及应用(第二版)[M].西安:西安电子科技大学出版社,2023,2[17]华成英童诗白.模拟电子技术根底(第四版)[M].(高等教育出版社)2006.1[18]缪家鼎徐文娟牟同升.光电技术[M].浙江大学出版社,1996.3[19]吴大正.电路根底〔第二版〕〔西安电子科技大学出版社〕2000.7[20]袁小平.电子技术综合设计教程〔第一版〕〔机械工业出版社〕2023.4[21]康华光,邹寿彬,电子技术根底数字局部(第四版)北京:高等教育出版社1999附录附录A:电路图图1原理图图2PCB图附录B:程序清单主程序#include<reg52.h>#include<isd4004.h>#include<dht11.h>#include<lcd12864.h>#include<ds1302.h>#defineucharunsignedchar#defineuintunsignedintsfrT2MOD=0xc9;ucharxdatalcd12864_line1[]="2010年08月16日";//ucharxdatalcd12864_line2[]="10:50:00AM";ucharxdatalcd12864_line4[]="星期一-_-";ucharxdatalcd12864_line3[]="湿:00%温:00c";ucharcodedate[]="一二三四五六日";ucharcodealarm_set[]="闹钟时间设置";ucharcodeset_time_count[]="秒表时间设置";ucharcodeback_count_set[]="倒计时设置";ucharcodeset_time1[]="时间设置";ucharxdataset_time2[]="2010年08月16日";ucharxdataset_time3[]="10:50:00";ucharxdataset_time4[]="星期一12时制";ucharcodehour_model_choose[][2]={{"12"},{"24"}};ucharcodehour_model_dis[][2]={{"AM"},{"PM"},{""}};ucharcodenum_to_char[]={"0123456789ABCDEF"};/*定义数字跟ASCII码的关系*///总的模式选择标志ucharxdatamodel_flag=0;//时钟标志uintxdatayear=0;ucharxdataset_time=0,time_flag=0,day_flag=0,minute1=0,hour1=0,hour=0,minute=0,second=0,day=0,month=0,week=0,hour_model,hour_flag=0;//闹钟标志ucharxdataalarm_flag=1,set_alarm=0;ucharxdataalarm_x_flag=0;//用于选择第几个闹钟和选择闹钟时间来设置ucharxdataalarm_1_enable=0,alarm_1_day=0,alarm_1_minute=0,alarm_1_hour=0;ucharxdataalarm_2_enable=0,alarm_2_day=0,alarm_2_minute=0,alarm_2_hour=0;ucharxdataalarm_3_enable=0,alarm_3_day=0,alarm_3_minute=0,alarm_3_hour=0;ucharxdataalarm_4_enable=0,alarm_4_day=0,alarm_4_minute=0,alarm_4_hour=0;ucharxdataalarm_5_enable=0,alarm_5_day=0,alarm_5_minute=0,alarm_5_hour=0;ucharcodealarm_line1[]="闹钟设置";ucharxdataalarm_line2[]="时间:00:00";ucharxdataalarm_line3[]="闹钟一1.星期一";ucharxdataalarm_line4[]="状态:关";ucharcodealarm_day_choose[][8]={{"1.星期一"},{"2.星期二"},{"3.星期三"},{"4.星期四"},{"5.星期五"},{"6.星期六"},{"7.星期日"},{"8.工作日"},{"9.周末"},{"10.每天"}};ucharcodealarm_switch[][2]={{"关"},{"开"}}; //闹钟的开启显示符//闹钟可选的日期//闹钟声音信号输出口sbitspeaker=P2^7;uintspeaker_count=0;ucharclock_flag1=0,clock_flag2=0,clock_flag3=0,clock_flag4=0,clock_flag5=0;//以下是秒表的标志ucharxdatatime_count=0;ucharxdatatime_count_set=0;uintxdatacount_ms=0;ucharxdatacount_hour=0,count_minute=0,count_second=0;ucharcodecount_line1[]={"秒表设置"};ucharxdatacount_line2[]={"00:00:00:000"};ucharcodecount_line3[]={"设置键清零"};ucharcodecount_line4[]={"加减键开关"};//以下是倒计时标志uintxdata back_ms=0;ucharxdataback_set=0;ucharxdataback_count=0,back_flag=0,back_hour=0,back_minute=0,back_second=0;ucharcodeback_line1[]={"倒计时设置"};ucharxdataback_line2[]={"00:00:00:000"};ucharcodeback_line3[]={"加减键开关"};ucharcodeback_line4[]={"左右键清零"};sbitkey_add=P1^0;sbitkey_sub=P2^0;sbitkey_set=P1^1;sbitkey_model=P1^2;sbitkey_left=P1^3;sbitkey_right=P2^1;//T0用于秒表voidT0_set(void){ TMOD=0X11; TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1; ET0=1; TR0=0; return;}voidT0_()interrupt1{count_ms++; TH0=(65536-1000)/256; TL0=(65536-1000)%256; if(count_ms==1000) {count_ms=0; count_second++; if(count_second==60){count_second=0;count_minute++;if(count_minute==60){count_minute=0;count_hour++;if(hour==24)hour=0; } } }}//T1用于倒计时voidT1_set(void){ TMOD=0X11; TH1=(65536-1000)/256; TL1=(65536-1000)%256; EA=1; ET1=1; TR1=0; return;}voidT1_()interrupt3{ if(back_hour==0&&back_minute==0&&back_second==0&&back_ms==0) {back_ms=0;TR1=0; back_ms=back_ms+1; //back_hour=back_hour+1;back_minute=back_minute+1;back_second=back_second+1; }back_ms--; TH1=(65536-1000)/256; TL1=(65536-1000)%256; if(back_ms==-1) {back_ms=999; back_second--; if(back_second==-1){back_second=59;back_minute--;if(back_minute==-1){back_minute=59;back_hour--; } } }}//以下程序用于报时使用voidspeak_time(void){ if(minute==0){ speak_time1((hour1/10),(hour1%10)); play_time1(0x40,0x00);//点 play_time1(0x50,0x00);//整 } if(minute!=0) { speak_time1((hour1/10),(hour1%10)); play_time1(0x40,0x00);//点 speak_time1((minute/10),(minute%10)); play_time1(0x26,0x00);//分 }}//以上程序用于报时使用//主函数voidmain(){ uchari=0;ucharkey_flag=0; ucharalarm_enable=0,alarm_hour=0,alarm_minute=0,alarm_day=0;//闹钟暂时标志 ucharclock_hour_flag=0,clock_minute_flag=0;init_12864_GDRAM(); Clean_12864(); //lcd_k=0; //Set1302(time_data_buff); T0_set(); T1_set();while(1){//以下为模式选择if(key_model==0) { while(key_model==0); Clean_12864(); LCD12864_COM_Write(0x0c); model_flag++; if(model_flag==5)model_flag=0; }//以上为模式选择//以下是闹钟执行时的程序 clock_hour_flag=time_data_buff[2]/16*10+time_data_buff[2]%16; clock_minute_flag=time_data_buff[1]/16*10+time_data_buff[1]%16; if(alarm_1_enable==1) if((alarm_1_day+1)==time_data_buff[5]||((alarm_1_day+1==8&&(time_data_buff[5]>0&&time_data_buff[5]<6))||(alarm_1_day+1==9&&(time_data_buff[5]==6||time_data_buff[5]==7))||((alarm_1_day+1)==10&&(time_data_buff[5]>0&&time_data_buff[5]<8)))) if(alarm_1_hour==clock_hour_flag&&alarm_1_minute==clock_minute_flag) { //启动闹钟一 clock_flag1=1; //设置闹钟的标志 } if(alarm_2_enable==1) if((alarm_2_day+1)==time_data_buff[5]||((alarm_2_day+1==8&&(time_data_buff[5]>0&&time_data_buff[5]<6))||(alarm_2_day+1==9&&(time_data_buff[5]==6||time_data_buff[5]==7))||((alarm_2_day+1)==10&&(time_data_buff[5]>0&&time_data_buff[5]<8)))) if(alarm_2_hour==clock_hour_flag&&alarm_2_minute==clock_minute_flag) { //启动闹钟二 clock_flag2=1; //设置闹钟的标志 } if(alarm_3_enable==1) if((alarm_3_day+1)==time_data_buff[5]||((alarm_3_day+1==8&&(time_data_buff[5]>0&&time_data_buff[5]<6))||(alarm_3_day+1==9&&(time_data_buff[5]==6||time_data_buff[5]==7))||((alarm_3_day+1)==10&&(time_data_buff[5]>0&&time_data_buff[5]<8)))) if(alarm_3_hour==clock_hour_flag&&alarm_3_minute==clock_minute_flag) { //启动闹钟三 clock_flag3=1; //设置闹钟的标志 } if(alarm_4_enable==1) if((alarm_4_day+1)==time_data_buff[5]||((alarm_4_day+1==8&&(time_data_buff[5]>0&&time_data_buff[5]<6))||(alarm_4_day+1==9&&(time_data_buff[5]==6||time_data_buff[5]==7))||((alarm_4_day+1)==10&&(time_data_buff[5]>0&&time_data_buff[5]<8)))) if(alarm_4_hour==clock_hour_flag&&alarm_4_minute==clock_minute_flag) { //启动闹钟四 clock_flag4=1; //设置闹钟的标志 } if(alarm_5_enable==1) if((alarm_5_day+1)==time_data_buff[5]||((alarm_5_day+1==8&&(time_data_buff[5]>0&&time_data_buff[5]<6))||(alarm_5_day+1==9&&(time_data_buff[5]==6||time_data_buff[5]==7))||((alarm_5_day+1)==10&&(time_data_buff[5]>0&&time_data_buff[5]<8)))) if(alarm_5_hour==clock_hour_flag&&alarm_5_minute==clock_minute_flag) { //启动闹钟五 clock_flag5=1; //设置闹钟的标志 }//以上是闹钟执行时的程序//以下是响闹钟时执行的程序if(clock_flag1==1||clock_flag2==1||clock_flag3==1||clock_flag4==1||clock_flag5==1) { alarm(); delay_1ms(100); }//以上是响闹钟时执行的程序//以下是用于闹钟在响时关掉闹钟if(key_model==0||key_set==0||key_add==0||key_sub==0||key_left==0||key_right==0) {if(clock_flag1==1)//关闭闹钟 {clock_flag1=0;alarm_1_enable=0;clock_hour_flag=0;clock_minute_flag=0; } if(clock_flag2==1)//关闭闹钟 {clock_flag2=0;alarm_2_enable=0;clock_hour_flag=0;clock_minute_flag=0; } if(clock_flag3==1)//关闭闹钟 {clock_flag3=0;alarm_3_enable=0;clock_hour_flag=0;clock_minute_flag=0; } if(clock_flag4==1)//关闭闹钟 {clock_flag4=0;alarm_4_enable=0;clock_hour_flag=0;clock_minute_flag=0; } if(clock_flag5==1)//关闭闹钟 {clock_flag5=0;alarm_5_enable=0;clock_hour_flag=0;clock_minute_flag=0; } }//以下是用于闹钟在响时关掉闹钟//以下显示正常运行的时间 if(model_flag==0) {//TR0=0; RH(); set_time=0;time_flag=0;day_flag=0;hour=0;minute=0;second=0;day=0;month=0;week=0; set_alarm=0; back_set=0; time_count_set=0; back_count=0; Get1302(time_data_buff); lcd12864_line1[2]=num_to_char[time_data_buff[6]/0x10]; lcd12864_line1[3]=num_to_char[time_data_buff[6]%0x10];//年 lcd12864_line1[6]=num_to_char[time_data_buff[4]/0x10]; lcd12864_line1[7]=num_to_char[time_data_buff[4]%0x10];//月 lcd12864_line1[10]=num_to_char[time_data_buff[3]/0x10]; lcd12864_line1[11]=num_to_char[time_data_buff[3]%0x10];//日 hour1=(time_data_buff[2]/0x10)*10+time_data_buff[2]%0x10; minute=(time_data_buff[1]/0x10)*10+time_data_buff[1]%0x10; second=(time_data_buff[0]/0x10)*10+time_data_buff[0]%0x10; if(hour_flag==1){hour=hour1; hour_model=2;}//24小时制时不显示am或pm if(hour_flag==0) //12小时制时显示am或pm { if(hour1>=0&&hour1<=12){hour=hour1;hour_model=0;}//显示am if(hour1>=13&&hour1<=23){hour=hour1-12;hour_model=1;}//显示pm } lcd12864_line2[10]=hour_model_dis[hour_model][0];//24小时制时不显示am或pm;12小时制时显示am或pm lcd12864_line2[11]=hour_model_dis[hour_model][1];//24小时制时不显示am或pm;12小时制时显示am或pm lcd12864_line2[0]=num_to_char[hour/10];//时 lcd12864_line2[1]=num_to_char[hour%10]; lcd12864_line2[3]=num_to_char[time_data_buff[1]/16];//分 lcd12864_line2[4]=num_to_char[time_data_buff[1]%16]; lcd12864_line2[6]=num_to_char[time_data_buff[0]/16];//秒 lcd12864_line2[7]=num_to_char[time_data_buff[0]%16]; lcd12864_line4[4]=date[time_data_buff[5]*2-2]; //星期 lcd12864_line4[5]=date[time_data_buff[5]*2-1]; lcd12864_line3[3]=num_to_char[U8RH_data_H/10];//湿度 lcd12864_line3[4]=num_to_char[U8RH_data_H%10]; lcd12864_line3[13]=num_to_char[(U8T_data_H-3)/10];//温度 lcd12864_line3[14]=num_to_char[(U8T_data_H-3)%10]; delay_1ms(10); if(minute==0&&second==0)//整点自动报时{ speak_time1((hour1/10),(hour1%10)); play_time1(0x40,0x00);//点 play_time1(0x50
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSAE 423-2025智能网联摩托车和智能网联轻便摩托车 数据平台技术要求及试验方法
- T/UNP 183-2024管道沟槽开挖支护用新型支护系统应用技术规程
- T/GITIF 003-2022基于信息物理系统(CPS)的产线设备故障 预测技术规范
- T/CI 641-2024水生态修复成效评估技术规范
- T/CADERM 6008-2023灾害狭小空间现场伤情评估与急救要求
- T/CSAE 294-2023车载时间敏感网络通讯交换芯片功能和性能要求
- AI在新闻学中的应用
- 2025~2026学年甘肃定西市渭源县度北师大版上册学情练习一年级数学试卷【附答案】
- 2025-2026学年辽宁省辽阳市初中政治八年级期末下册自我评估历年考试题附答案
- 2025-2026学年浙江省富德市初中数学七年级期末上册深度自测核心强化题(附答案)
- 直肠脱垂护理查房
- 金华杰龙保温材料有限公司年产20万吨固化土和免烧陶粒技改项目环评报告
- 医院纪委培训课件
- DB31/T 1128-2019再生骨料混凝土技术要求
- 患者用药指导全国知识技能竞赛考试题库(带答案)
- 公司租赁个人车辆协议书范本
- 2025年中煤电力有限公司招聘笔试参考题库含答案解析
- 中等职业学校英语教学大纲附件五:词汇表
- 【苏泊尔电器营运资金管理问题及完善分析13000字 (论文)】
- 2022年浙江省宁波市慈溪实验中学高一数学文联考试卷含解析
- 天耀中华合唱简谱大剧院版
评论
0/150
提交评论