版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文题目:基于单片机的电子万年历英文题目:TheElectronicCalendarBasedonSCM专业班级09电子信息工程2班提交日期2013-5-摘要随着科学技术的不断发展,人们的生活水平不断提高,传统的万年历已经不足以满足人们的需求。随着万年历的多功能化,社会上出现了各种各样的电子万年历,其中,单片机的电子万年历有着巨大的市场潜力。本设计着重描述的就是基于AT89C52的单片机的电子万年历。本文首先论证各主要模块芯片的选择,随后介绍了本系统所应用的各个接口模块的主要功能及工作过程。本设计是通过软硬件相结合来进行各模块功能的实现。电子万年历以C语言为主体进行软件编写,使程序的可读性和可移植性更高。系统通过DS18B20采集温度信息、LCD1602小液晶显示数据,可以显示当前日期、时间、星期、温度,并附有以峰鸣器为提示的闹铃功能。关键词单片机电子万年历日期接口模块C语言
TheElectronicCalendarBasedonSCMAbstractWiththedevelopmentofscienceandtechnology,people'slivingstandardsimprove,thetraditionalcalendarhasbeeninsufficienttomeetpeople'sneeds.Asthecalendarbecomemultifunctional,allkindsofelectroniccalendarhasappearedinoursociety,especiallytheelectroniccalendar,whichisbasedonSCM,hasahugepotential.ThisdesignfocusesonthedescriptionoftheelectroniccalendarisbasedonAT89C52SCM.Thistextdemonstratestheselectionaboutthechipsofeachmainmodulesfirst,andthenintroducesmainfunctionsandworkingprocessofeachinterfacemodule,whichisapplytothesystem.Thisdesignisbyacombinationofhardwareandsoftwarerealizationofeachmodulefunction.TheelectroniccalendarusesClanguageasthemainprogram,inordertomaketheprogram'sreadabilityandportabilitybehigher.ThesystemcollectstemperatureinformationbyDS18B20,anddisplaydatabyLCD1602,itcandisplaythecurrentdate,time,week,temperature,togetherwithabuzzeralarmfunctionforthetips.KeywordSCMTheelectroniccalendarDateInterfacemoduleClanguage目录1 绪论 21.1 课题研究目的和意义 21.2 万年历的国内外发展状况概况 21.3 本研究的技术要求 31.4 本研究指导思想 32 芯片的选择和论证 32.1 单片机芯片的选择方案和论证 32.2 显示模块选择方案和论证 42.3 温度传感器的选择方案和论证 42.4 键盘模块的选择方案和论证 52.5 时钟芯片的选择方案和论证 52.6 电路设计最终方案决定 53 硬件模块图 64 系统硬件仿真和软件调试工具 64.1 ProtuesISIS简介 64.2 KeilC51uVision2简介 75 本研究中的主要模块 85.1 主控模块(AT89C52模块) 85.2 DS1302时钟模块 95.3 DS18B20温度模块 145.2 LCD1602显示模块 195.3 时间可调模块 236 实验结果 247 设计总结 26结束语 27鸣谢 28参考文献 29附录1 30附录2 31绪论课题研究目的和意义随着人们的生活水平不断提高,工作节奏不断加快,人们对时间的准确把握要求越来越高,倘若因为其他原因而忘记了时间,这将会带来巨大的损失。虽然在日常生活中,各种设备如手表、手机等给我们提供了准确的时间信息,但是在大多数场合却仅仅局限于个人的使用范围之内。在家居生活中,在社会工作中,一款高挂于墙上设计独特的电子万年历不仅能为我们提供准确的时间信息,而且美化了环境,给单调的工作、生活带来了现代化气息,因而成为了许多人的必备之选。随着电子万年历多功能化,它在各种领域的使用越来越广泛,给人们的生活、学习、工作带来了极大的方便。电子万年历具有设计美观、功能多样、直观清晰、信息量大等优点,正成为家庭、商场、公共场所等新的消费热点,有着巨大的市场潜力。万年历的国内外发展状况概况从现代电子技术发展历程来看,大致可以分为三个典型阶段:(1)20世纪70年代,在集成电路制作方面,MOS工艺得到广泛的应用。可编程逻辑技术及其器件已经问世,计算机作为一种运算工具已经在科研领域得到广泛应用。在70年代后期,CAD的概念已现雏形,这一阶段人们开始利用计算机辅助进行集成电路版图编辑、PCB布局布线等工作。(2)20世纪80年代,集成电路设计进入了CMOS(互补场效应管)时代,复杂可编程逻辑器件已经进入商业应用,相应的辅助设计软件也已投入使用,而在80年代末期,出现了FPGA(FieldProgrammableGateArray),CAE和CAD技术的应用更为广泛,它们在PCB设计方面的原理图输入、自动布局布线及PCB分析,以及逻辑设计、逻辑仿真、布尔方程综合和化简等方面担任了重要角色。特别是各种硬件描述语言HDL(HardwareDescriptionLanguage)的出现、应用和标准化方面的重大进步,为EDA(ElectronicDesignAutomation,电子设计自动化)技术必须解决的电路建模、标准文档及仿真测试奠定了基础。(3)进入20世纪90年代,随着硬件描述语言的标准化得到进一步的确立,计算机辅助工程、辅助分析和辅助设计在电子技术领域获得了更加广泛的应用,与此同时,电子技术在通信、计算机及家电产品生产中的市场需求和技术需求,也极大地推动了全
新的电子设计自动化技术的应用和发展。特别是集成电路设计工艺步入了超深亚微米阶段,百万门以上的大规模可编程逻辑器件的陆续面世,以及基于计算机技术的面向用户的低成本大规模ASIC设计技术的应用,促进了EDA技术的形成。20世纪末期以来,电子设计技术获得了飞速的发展。现代电子技术产品几乎渗透到社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。基于单片机的数字钟的设计,采用灵活的编程,可以轻松的完成对数字钟的功能扩展。另外是以基于数字电路的多功能数字钟。数字钟的时钟显示则由最初的单个数码管显示,随着科技的发展,数码管则逐渐被液晶显示所替代。在不断满足人们日益需求的同时,其功能更是再不断扩展。数字钟的发展同样进入了新的阶段,更直观,更易于操作,功能更多,更实用的电子钟将不断的进入人们的生活。市场的强烈需求极大地推动了现代电子技术的发展,产品的集成化程度越来越高,同时产品更新换代的节奏也变得越来越快。本研究的技术要求通过查询多方面的信息,本研究设计了一款读取方便、显示直观,功能多样、电路简洁、成本低廉的电子万年历。本研究要求设计的电子万年历不仅能显示时间、星期、公历日期信息,还能实现整点报时、掉电计时、实时温度显示等功能。本研究指导思想本研究先对系统所需要的主要芯片进行选择和论证,确定了选用AT89C52单片机作为系统的主要控制芯片,时钟芯片DS1302提供时钟,DS18B20温度传感器实现实时温度显示,而显示部分采用的是LCD1602显示屏。接着简要的介绍了系统的调试工具,而重点是对相应主要模块的硬件进行详细的讲解。比如AT89C52、DS1302、DS18B20和LCD1602A等芯片的引脚功能和工作原理。有利于读者对各模块的理解。在最后给出全局程序和电路原理图,让读者理清整个设计的来龙去脉。芯片的选择和论证单片机芯片的选择方案和论证方案一:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点是:8KBFlashROM,可擦除1000次以上,数据保存10年。方案二:采用AT89C52单片机作为系统的控制中心,它在结构上把CPU、存储器、定时器、I/O接口电路集成在一块大规模的集成电路芯片上,具有集成度高、体积小、控制功能强、功耗低、低电压、便于携带等优点。所以选择采用方案二为主要方案,方案一为备用方案。显示模块选择方案和论证方案一:采用LED数码管动态扫描,虽然LED数码管价格适中,对于显示数字也比较合适,然而需要显示多位数字和字母时,编程就会变得很复杂,而且占用的单片机口线多。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案三:采用LCD液晶显示屏,LCD液晶显示屏尽管价格比较贵,但它的显示功能强大,可显示大量字符,显示多样,清晰可见,需要的接口线少。所以采用LCD液晶显示屏作为显示。温度传感器的选择方案和论证方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。方案二:采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。所以采用数字式温度传感器DS18B20测量温度。键盘模块的选择方案和论证在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单个按键电路。独立式按键电路配置灵活,软件结构简单。方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线构成,按键位于行、列交叉点,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适用于按键较多的场合。由于本系统需要的按键不多,所以采用独立式键盘。时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案减少了芯片的使用,节约了成本。不过由此产生的误差较大,作为一个电子万年历,首要技术要求就是要能准确及时,因此不选择此种方法来提供时钟。方案二:采用DALLAS公司生产的DS1302时钟芯片来实现时钟,DS1302芯片是一种高性能的时钟芯片,它可以对年、月、日、星期、时、分、秒进行计数,精度高,使用寿命长,能在低电压下工作,而且它可以利用双电源供电,当主电源掉电时芯片能继续工作,满足本设计所要求的掉电继续计时功能。所以采用DS1302提供时钟。电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用AT89C52作为主控制系统;DS1302提供时钟;数字式温度传感器;LCD液晶显示屏作为显示模块,按键采用独立式键盘。硬件模块图本系统以集成芯片为主,以C语言为开发语言,通过对硬件进行软件编程实现所需要的功能。系统的模块图如图3-1所示,以下的内容就是根据模块逐步实现的。峰鸣器闹铃模块键盘输入电路(峰鸣器闹铃模块键盘输入电路(89C52)主控模块DS18B20温度模块DS18B20温度模块DS1302时钟模块DS1302时钟模块显示电路显示电路图3-1系统模块图模块说明:DS1302时钟模块可以输出其当前日期及时间键盘输入电路可以调整日期,时间及闹钟的设置DS18B20温度模块可以测量当前室内的温度峰鸣器闹铃模块可以做闹钟提醒显示电路则显示当前的系统运行情况系统硬件仿真和软件调试工具本系统的硬件仿真工具采用单片机专用仿真工具ProtuesISIS,软件调试则采用KeilC51uVision2开发平台。ProtuesISIS简介ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。(4)具有强大的图绘制功。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。KeilC51uVision2简介单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。本研究中的主要模块主控模块(AT89C52模块)AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。其主要特点如下:兼容MCS51指令系统8kB可反复擦写(大于1000次)FlashROM;32个双向I/O口;256x8bit内部RAM;3个16位可编程定时/计数器中断;时钟频率0-24MHz;2个串行中断,可编程UART串行通道;2个外部中断源,共8个中断源;2个读写中断口线,3级加密位;低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。图5.1-1AT89C52封装图DS1302时钟模块DS1302简介DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM。通过简单的串行接口与单片机进行通信,实时时钟/日历电路提供秒分时日月年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线。1.RES复位,2.I/O数据线,3.SCLK串行时钟。时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。DS1302是由DS1202改进而来,增加了以下特性:双电源管脚用于主电源和备份电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器,备份电源可由大容量电容(1F)替代。它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域。主要性能如下:实时时钟具有能计算2100年之前的秒,分,时,日,星期,月,年的能力。31*8位暂存数据存储RAM串行I/O口方式使得管脚数量最少宽范围工作电压:2.0V~5.5V工作电流:2.0V时,小于300nA读/写时钟或RAM时,有两种传送方式:单字节传送和多字节传送(字符组方式)8脚DIP封装或可选的8脚SOIC封装简单的3线串行I/O接口与TTL/COMS兼容(VCC=5V时)可选工业级温度范围:-40oC~+85oCDS1302结构DS1302的引脚如图5.2-1所示。118273645VCC2VCC1X1SCLKX2I/OGNDRST图5.2-1DS1302的引脚图(2)引脚功能如表5-1所示。表5-1引脚功能表引脚号引脚名称功能1Vcc2主电源引脚2,3X1,X2振荡源,外接32.768KHz晶振4RST复位/片选端5GND接地6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8Vcc1备用电源DS1302工作原理串行时钟芯片主要由寄存器、控制寄存器、振荡器、实时时钟以及RAM组成。为了对任何数据传送进行初始化,需要将RST置为高电平且将具有地址和控制信息的8位数据(控制字节)装入移位寄存器。数据在SCLK的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输入数据。时钟脉冲的个数在单字节方式下为8加8(8位地址加8位数据),在多字节突发模式方式下为8加最多可达248的数据。控制命令字节与寄存器(1)控制命令字节控制命令字节的格式如表5-2表5-2控制命令字节的格式表D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/W控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中;位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。(2)日历、时钟寄存器DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据为BCD码形式。其日历、时间寄存器及其控制字如表5.2-4所示。寄存器的选择由命令字而定,日历,时钟各个寄存器与控制字对照表如表5-3所示。表5-3日历、时钟寄存器与控制字对照表寄存器名称D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/W秒寄存器1000000分寄存器1000001小时寄存器1000010日寄存器1000011月寄存器1000100星期寄存器1000101年寄存器1000110写保护寄存器1000111慢充电寄存器1010000时钟突发寄存器1011111最后一位RD/W为0表示要进行写操作,为1表示进行读操作。表5-4为主要寄存器命令字、取值范围以及各位内容对照表。表5-4DS1302的日历、时钟寄存器表寄存器名称命令字取值范围各位内容写操作读操作76543~0秒寄存器80H81H00~59CH10SECSEC分寄存器82H83H00~59010MINMIN小时寄存器84H85H01~12或00~2312/24010A/PHRHR日寄存器86H87H01~28,29,30,310010DATEDATE月寄存器88H89H01~1200010MMONTH星期寄存器8AH8BH01~070000DAY年寄存器8CH8DH01~0910YEARYEAR写保护寄存器8EH8FHWP0000慢充电寄存器90H91HTCSTCSTCSTCSDSDSRSRS时钟突发寄存器BEHBFH特殊位的说明:CH:时钟暂停位。当此位设置为1时,振荡器停止,DS1302处于低功耗空闲状态,这时芯片消耗电流将小于100NA;当此位为0时,振荡器启动,时钟开始启动。12/24:12或24小时方式选择位。为1时选择12小时方式,在12小时方式下,位5是AM/PM选择位,此位为1时表示PM。为0时选择24小时方式,在24小时方式下,位5是第2个小时位(20~23时)。WP:写保护位。写保护寄存器的开始7位(0~6)置为0,在读操作时总是读出0。在对时钟或RAM进行写操作之前,位7(WP)必须为0,当它为高电平时,写保护位防止对任何其他寄存器进行写操作。TCS:控制慢充电的选择,为了防止偶然因素使DS1302工作,只有1010模式才能使慢速充电工作。DS:二极管选择位。如果DS为01,那么选择一个二极管;如果DS为10,则选择两个二极管;如果DS为11或00,那么充电器被禁止,与TCS无关。RS:选择连接在VCC2与VCC1之间的电阻,如果RS为00,那么充电器被禁止,与TCS无关。选择的电阻如表5-5所示。表5-5RS与所选电阻对照表RS位电阻器典型值00无无01R12KΩ10R24KΩ11R38KΩ由上所述,根据涓流充电寄存器的不同编程,可得到不同的充电电流。其充电电流具体计算公式如下:式中,5.0V为VCC2脚所接入的工作电压,VD为二极管正向压降0.7V,R为寄存器0和1位编码决定的电阻值,VE为VCC1脚所接入的电压。(3)RAM寄存器DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31字节,命令控制字为FEH(写)、FFH(读)。RAM寄存器与控制字对照如表5-6。表5-6RAM区寄存器与控制字对照表寄存器名称D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/WRAM01000000RAM11000001………RAM301111110RAM突发1111111(4)复位和时钟控制通过将RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供了终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置RST为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。(5)数据输入/输出数据输入是在输入写命令字的8个SCLK周之后,在接下来的8个SCLK周期中的每个脉冲的上升沿输入数据,数据从0位开始。如果有额外的SCLK周期,它们将被忽略。数据输出是在输出读命令字的8个SCLK周之后,在接下来的8个SCLK周期中的每个脉冲的下降沿输出数据,数据从0位开始。需要注意的是,第一个数据位在命令字节后的最后一位之后的第一个下降沿被输出。只要RST保持高电平,如果有额外的SCLK周期,将重新发送数据字节,即多字节传送。时序图如图5.2-2所示。图5.2-2时序图DS1302电路设计图图5.2-3DS1302电路设计图5.3 DS18B20温度模块概述美国DALLAS公司生产的单线数字温度传感器DS18B20,可把温度信号直接转换成串行数字信号供微机处理。由于每片DS18B20含有唯一的硅串行数,所以在一条总线上可挂接任意多个DS18B20芯片。从DS18B20读出的信息或写入DS18B20的信息,仅需要一根口线(单线接口)。读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。DS18B20可提供9~12位温度读数,构成多点温度检测系统而无需任何外围硬件。DS18B20的工作原理(1)DS18B20的性能●单线接口:仅需一根口线与MCU连接进行通信。●多个DS18B20可以并联在惟一的3线上,实现多点组网功能。●无需外围元件●可通过数据线供电,电压范围为3.0~5.5V。●零待机功耗。●测温范围:-55~125℃。固有测温分辨率为0.5℃。●通过编程可实现9~12位的数字读数方式。●用户可自设定非易失性的报警上下限值。●支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。●报警搜索命令可识别哪片DS1820超温度限。●负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。(2)DS18B20的内部结构①64位ROM的结构如图5-7所示:图5-764位ROM的结构图8位检验CRC48位序列号8位工厂代码(10H)开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。②非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。③高速暂存存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PROM。高速RAM包含9字节存储器,其结构如图5.4-3所示。前两个字节包含测得的温度信息。第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节是配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如表5-8所示。低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即是来设置分辨率,如表5-9所示(DS18B20出厂时被设置为12位)。1字节2字节1字节2字节3字节4字节5字节6字节7字节8字节9字节温度MSBTH用户字节1TH用户字节1TL用户字节2TH用户字节1配置寄存器TL用户字节2保留TL用户字节2保留E2E2PROMCRC图5.4-3高速暂存RAM结构图表5-8配置寄存器TMR1R211111表5-9DS18B20分辩率的定义规定表R1R0分辩率/位温度最大转换时间00993.750110187.510113751112750由表5-9可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。高速暂存RAM第6~8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。温度值格式如图5.4-4。232221202-12-22-32-4LS字节SSSSS2625264图5.4-4温度数据值格式图MS字节图5.4-4温度数据值格式图当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。表5-10是对应的一部分温度值。表5-10DS18B20温度与测得值对应表温度/oC数据输出(二进制)数据输出(十六进制)+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100010191H+10.125000000001010001000A2H+0.500000000000010000008H000000000000000000000H-0.51111111111111000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90HDS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若T>TH或T<TL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警搜索。④CRC的产生在64bROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理DS18B20的测温原理如图5.4-5,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55斜率累加器斜率累加器预置计数比较器预置计数比较器减法计数器1预置低温系数振荡器减法计数器1预置低温系数振荡器温度寄存器减到0温度寄存器减到0停止减法计数器2减到0高温度系数振荡器减法计数器2减到0高温度系数振荡器图5.4-5DS18B20测温原理图减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图5.4-4中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。DS18B20与单片机的接口设计DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源;另一种是寄生电源供电方式,如图5.4-6所示。单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10μs。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三态的。VCCMCUDS18B20MCUVCCGNDVDD5.1KI/O图5.4-6DS18B20应用电路DS18B20程序设计方案DS18B20电路设计图本设计采用电源供电方式,设计电路如图5.4-7所示。图5.4-7DS18B20电路设计图LCD1602显示模块概述LCD1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。缺点:不能使用中文,不能显示图形。引脚图及引脚功能LCD1602的引脚如图5.7-1所示。图5.7-1LCD1602的引脚图引脚说明:第1脚:VSS为地第2脚:VDD接5V正电源第3脚:VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度,或直接通过一个电阻到地.第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光正极第16脚:背光负极字符发生存储器(CGROM)1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,表5-11给出CGROM中部分字符代码与字符图形的对应关系,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。表5-11CGROM中部分字符代码与字符图形的对应关系表高位底位0000001000110100010101100111xxxx0000(1)0@P\pxxxx0001(2)!1AQaqxxxx0010(3)”2BRbrxxxx0011(4)#3CScsxxxx0100(5)﹩4DTdtxxxx0101(6)%5EUeuxxxx0110(7)&6FVfv控制指令1602液晶模块内部的控制器共有11条控制指令,如下表5-12所示,表5-121602液晶模块内部的控制器中的指令表指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址(AGG)8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGROM或DDRAM10要写的数11CGROM或DDRAM读数11读出的数据它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(有些模块是DL:高电平时为8位总线,低电平时为4位总线)指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据1602的内部显示地址液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表5-13是1602的内部显示地址.表5-131602的内部显示地址表12345678910111213141516000102030405060708090A0B0C0D0E0F第一行404142434445464748494A4B4C4D4E4F第二行比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)LCD1602电路设计图图5.7-2LCD1602电路设计图时间可调模块键盘扫描原理如图5.6-1所示,键盘是由多个按键组成。首先将与按键相接的单片机接口都置高电平,当没有按键按下时,单片机和地线之间是不相连的,若第N个键被按下,则接这个键的单片机接口为低电平,通过查询接到按键的单片机接口,就知道是第N个按键被按下,从而进行相应程序处理。图5.6-1按键电路设计图按键说明KEY1:选择相应要调节的值。KEY2:数值加1。KEY3:数值减1。KEY4:闹钟的开启与关闭。实验结果电子万年历是多功能数字型的,可以显示当前日期、时间以及温度,因此对于它的程序也是相对复杂的。在编写程序和调试过程中出现了一些问题,经过反复多次的修改,最终解决了软件问题,成功实现本设计的各项功能。调试开始画面调试成功画面万年历成品设计总结本设计以ATMEL公司的AT89C52层为主控芯片,配合专用的时钟芯片及软件能稳定地显示当前时间,室内温度及完成公农历转换。本设计的方案选择与当前主流的设计思想吻合,所用到的模块具有很高的实用性,特别是编程语言选用硬件C为系统的移植提供了很大的方便。由于硬件设备问题,所以设计的硬件以单片机专用仿真软件ProtuesISIS6.9SP4为开发平台,软件以keil51为开发平台,这为系统的软硬件调试提供了很大方便。与市面上的大多数万年历以分立元件为主不同,本设计大多使用集成芯片。集成芯片的稳定性,可靠性及资源利用率都远优于分立元件。这对系统的长时间稳定工作有决定性的作用。另外,为了充分利用89C52及提高系统的实用性,使用了Dallas公司的温度传感器18B20,使系统在完成基本功能的同时能显示当前温度。当然,任何事情都有双面性,系统采用了大规模集成模块在提高稳定性的时候,也大大地增加了系统的设计成本。这对于生产应用是致命的。另外,硬件仿真的时候采用大多采用了直插封装,这对于系统的模型设计有很大的不利,在生产应用中,现在的直插元件用得越来越少,取而代之的是贴片芯片。在软件的设计方面,由于实力问题,有些问题还是得不到根本的解决,比如说在闹铃和实时显示温度设计优化上就有一定的缺陷。本次设计中整点报时功能是当时钟满整点时,自动报出相应时钟点数,但其报时功能比较单一;声音提醒只是简单的蜂鸣器,报警功能较为单一。相信在以后的工作中会不断提高的软硬件问题的能力。结束语在整个设计过程中,我充分发挥了人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品。达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。相互学习、相互讨论、研究。完了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。反而达到事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次设计中学到了很多很多东西,这是最重要的。总之,此次毕业设计让我的能力得到了全方位的提高。鸣谢论文经过三个月后终于完成,在做论文期间,问题一个接着一个,但在宿舍同学的帮助下,问题最后也能迎刃而解。在此对他们的帮助表示最诚挚的感谢。本论文是在我的指导老师周玲老师的悉心指导下完成的。在此,特别要向本人的指导教师周玲老师致以诚挚的谢意。他严谨的治学精神,精益求精的工作作风,让我学到了许多。从课题的选择到论文的最终完成,周老师都始终给予我细心的指导。在论文的修订上,亦给予了我许多宝贵的修改意见,使我在此期间获益良多,顺利的完成了毕业论文工作。参考文献[1]李伯成.单片机及嵌入式系统.清华大学出版社[2]陈阳海.单片机的典型结构及AT89S5X系列单片机.电子制作,2006[3]张毅刚.单片机原理与应用.高等教育出版社[4]严天峰.单片机应用系统设计与仿真调试.北京航空航天大学出版社[5]王青.温度传感器DS18B20和51单片机的接口技术及应用.电子制作,2006[6]白延敏.51单片机典型系统开发实例精讲.北京:电子工业出版社,2009[7]戢卫平,胡耀辉,朱朝华,叶祥,杨帆.单片机系统开发实例经典.北京:冶金工业出版社,2006[8]杨垒,于泉生,郭静梅.基于AT89S52的定时器设计.山东大学学报,2006[9]/cx/upfiles/200592420228840.doc附录1万年历原理图附录2C语言编写的源程序:#include<reg51.h>//调用头文件#defineucharunsignedchar //宏定义用uchar来代表unsignedchar#defineuintunsignedint //宏定义用uint来代表unsignedintsbitio=P1^3; //定义DS1302数据引脚sbitrst=P1^4; //定义DS1302复位引脚sbitsclk=P1^2;//定义DS1302时钟引脚sbitrs=P1^0; //定义LCD1602数据/命令选择引脚sbiten=P1^1; //定义LCD1602使能端引脚sbitmoshi=P1^7;//定义模式键sbitjia=P3^1;//定义按键加sbitjian=P3^4;//定义按键减sbitnz=P3^7;//定义闹钟键sbitbeep=P1^5;//定义蜂鸣器输出端sbitDQ=P2^0;//定义DS18B20数据段uinttmp;ucharcodetab[10]={"0123456789"};//定义0~9ASCLL码数组ucharcodetab_xingqi[7][3]={{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};//定义星期数组ucharcodetab_alarm[2][16]={{"alarmclock:OFF"},{"alarmclock:ON"}};charsecond,minute,hour,date,month,year,day,key,shi,fen,num,xingqi;//定义年月日时分秒数据变量uinttemph=3800,templ=500;uintvalue; //定义数据变量(用于数据转换前暂时存贮)bitalarmclock,xianshiclock;bits1,s2,s3,s4,s5,s6,s7,s8,s9,s10,kai=1;voiddelay(uintz) //延时子程序{uintx;uchary;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiddelay1302(uintz){for(z=z;z>0;z--);}voiddelay_18B20(unsignedinti)//DS18B20延时子延时{ while(i--);}//初始化函数voidInit_DS18B20(void) //DS18B20初始化{ unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(8);//稍做延时 DQ=0;//单片机将DQ拉低 delay_18B20(80);//精确延时大于480us DQ=1;//拉高总线 delay_18B20(14); x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败 delay_18B20(20);}ReadOneChar(void) //读一个字节{ unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); } return(dat);}voidWriteOneChar(unsignedchardat) //写一个字节{unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_18B20(5);DQ=1;dat>>=1;}}//读取温度ReadTemperature(void){ unsignedchara=0; unsignedcharb=0; unsignedintt=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 delay_18B20(100); Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度 a=ReadOneChar(); b=ReadOneChar(); //传感器返回值除16得实际温度值 //为了得到2位小数位,先乘100,再除16,考虑整型数据长度, //技巧处理后先乘25,再除4,除4用右移实现 t=(b*256+a)*25; return(t>>2);}voidlcdcom(ucharcom) //LCD1602写入地址{ rs=0; P0=com; delay(5); en=1; delay(5); en=0; delay(5);}voidlcddata(uchardat)//LCD1602写入数据{ rs=1; P0=dat; delay(5); en=1; delay(5); en=0; delay(5);}voidlcdinit() //LCD1602初始化{ en=0; lcdcom(0x38); lcdcom(0x0c); lcdcom(0x06); lcdcom(0x01);}voidwrite(uchardat) //写数据{ uchari; sclk=0; delay1302(1); for(i=0;i<8;i++) { io=dat&0x01; delay1302(1); sclk=1; //sclk上升沿接收数据有效 delay1302(1); sclk=0; delay1302(1); dat>>=1; }}voidwriteset(ucharcmd,uchardat) //DS1302写入数据{ rst=0; delay1302(1); sclk=0; delay1302(1); rst=1; delay1302(1); write(cmd); write(dat); sclk=1; delay1302(1); rst=0;}unsignedcharread() //读数据{ uchari,dat; delay1302(1); for(i=0;i<8;i++) { dat>>=1; if(io==1) dat|=0x80; sclk=1; delay1302(1); sclk=0; delay1302(1); } returndat;}unsignedcharreadset(ucharcmd)//DS1302读出数据{ uchardat; rst=0; delay1302(1); sclk=0; delay1302(1); rst=1; write(cmd); dat=read(); sclk=1; delay1302(1); rst=0; returndat;}voidinitDS1302() //DS1302初始化{ writeset(0x8E,0x00); writeset(0x80,((0/10)<<4|(0%10))); writeset(0x82,((0/10)<<4|(0%10))); writeset(0x84,((12/10)<<4|(12%10))); writeset(0x86,((1/10)<<4|(1%10))); writeset(0x88,((1/10)<<4|(1%10))); writeset(0x8c,((10/10)<<4|(10%10)));}voidxianshi() //显示子程序{uchari,num;num++;if(num==3){num=0;tmp=ReadTemperature();//读取温度if(tmp>temph)beep=~beep;elseif(tmp<templ)beep=~beep;elsebeep=0;}if(xianshiclock==0){ lcdcom(0x80); lcddata('2'); lcddata('0'); //显示 0 value=readset(0x8d); //读取年 year=((value&0x70)>>4)*10+(value&0x0F); //数据转换 if(s1==0) { lcddata(tab[year/10]); //显示年十位 lcddata(tab[year%10]); //显示年个位 } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } lcddata('/'); //显示/ value=readset(0x89);//读取月 month=((value&0x70)>>4)*10+(value&0x0F);//转换月 if(s2==0) { lcddata(tab[month/10]);//显示月十位 lcddata(tab[month%10]);//显示月个位 } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } lcddata('/'); //显示/ value=readset(0x87); //读取日 date=((value&0x70)>>4)*10+(value&0x0F); //转换日 if(s3==0) { lcddata(tab[date/10]); //显示日十位 lcddata(tab[date%10]); //显示日个位 } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } value=readset(0x8b);//读取星期 day=value; //转换星期 lcdcom(0x8c);//写入要显示的地址 if(s4==0) { for(i=0;i<3;i++) { lcddata(tab_xingqi[day-1][i]);//显示星期 } } else { lcddata(''); lcddata(''); lcddata(''); } value=readset(0x85); //读小时 hour=((value&0x70)>>4)*10+(value&0x0F); //转换小时 lcdcom(0xc0); if(s5==0) { lcddata(tab[hour/10]);//显示小时十位 lcddata(tab[hour%10]); //显示小时个位 } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } lcddata(':'); //显示: value=readset(0x83); //读分钟 minute=((value&0x70)>>4)*10+(value&0x0F);//转换分钟 if(s6==0) { lcddata(tab[minute/10]); //显示分钟十位 lcddata(tab[minute%10]); //显示分钟个位 } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } lcddata(':'); //显示: value=readset(0x81); //读取秒 second=((value&0x70)>>4)*10+(value&0x0F);//转换秒 lcddata(tab[second/10]); //显示秒十位 lcddata(tab[second%10]); //显示秒个位 tmp=ReadTemperature();//读取温度 lcdcom(0xca); //写入要现实的地址 lcddata(tab[tmp/1000%10]); lcddata(tab[tmp/100%10]); lcddata('.'); lcddata(tab[tmp/10%10]); lcddata(0xdf); lcddata('C');//显示℃ } else { lcdcom(0x80); for(i=0;i<16;i++) { lcddata(tab_alarm[alarmclock][i]);//显示闹钟 } lcdcom(0xc6); if(s7==0) { lcddata(tab[shi/10]); lcddata(tab[shi%10]); } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } lcddata(':'); if(s8==0) { lcddata(tab[fen/10]); lcddata(tab[fen%10]); } else { lcddata(''); //显示空白实现闪烁 lcddata(''); } lcdcom(0xc0); if(s9==0) { lcddata('H'); lcddata(tab[temph/1000%10]); lcddata(tab[temph/100%10]); } else { lcddata(''); lcddata(''); lcddata(''); } lcdcom(0xcd); if(s10==0) { lcddata('L'); lcddata(tab[templ/1000%10]); lcddata(tab[templ/100%10]); } else { lcddata(''); lcddata(''); lcddata(''); }}}voidanjian() //按键检测程序{if(moshi==0) //如果模式键按下{delay(100); //延时消抖 key++; //再次按下加一,切换下一位 if(key>10) { key=0; //按够一圈返回 xianshiclock=0; //显示时钟 lcdcom(0x01); //清屏 s10=0; } switch(key) { case1:;break; case2:s1=0;break; case 3:s2=0;break; case4:s3=0;break; case5:s4=0;break; case6:s5=0;break; case7:lcdcom(0x01);xianshiclock=1;s6=0; break; case8:s7=0;break; case9:s8=0;break; case10:s9=0;break; } while(moshi==0) xianshi(); delay(100);}if(jia==0){delay(100); switch(key) { case1:year++;if(year>99)year=0;writeset(0x8c,((year/10)<<4|(year%10)));break; //年加一 case 2:month++;if(month>12)month=1;writeset(0x88,((month/10)<<4|(month%10)));break; //月加一 case3:date++; if(date>31) date=1;writeset(0x86,((date/10)<<4|(date%10)));break;//日加一 case4:xingqi++;if(xingqi>7)xingqi=1;writeset(0x8a,xingqi); break; case5:hour++;if(hour>23)hour=0;writeset(0x84,((hour/10)<<4|(hour%10)));break;//小时加一 case6:minute++;if(minute>59)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年哈尔滨客运驾驶从业资格证模拟考试题库
- 2024年邵阳c1道路运输从业资格证考试
- 2024年长春客运从业资格证急救考试试题教程
- 2024年毫州客运资格证摸拟考试题
- 2024年牡丹江客运从业资格证考试网
- 2024年合作道路客运输从业资格证培训考试资料
- 民宿转让合同范例
- 2024年昭通道路旅客运输从业资格考试
- 小院施工合同模板
- 最美租赁住房合同范例
- 2024年国家公务员考试《申论》真题(行政执法)及答案解析
- 中华人民共和国保守国家秘密法实施条例
- 2024-2025学年统编版(2024)道德与法治小学一年级上册教学设计
- 国开2024年秋《经济法学》计分作业1-4答案形考任务
- 生涯发展报告 (修改)
- 监理预验收会议纪要
- 陶瓷行业术语英文对照
- 办公室工作的职能定位
- 旅游资源单体调查表(精编版)
- 全套企业管理流程(文字版)
- 检验科规章制度
评论
0/150
提交评论