基于ARM7与DS18B20的数字温度计的设计说明_第1页
基于ARM7与DS18B20的数字温度计的设计说明_第2页
基于ARM7与DS18B20的数字温度计的设计说明_第3页
基于ARM7与DS18B20的数字温度计的设计说明_第4页
基于ARM7与DS18B20的数字温度计的设计说明_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

东北林业大学毕业论文.PAGE0.....东北林业大学毕业论文.PAGE0...........东北林业大学综合电子课程设计总结报告设计项目:基于ARM7与DS18B20的数字温度计的设计项目完成人:指导学院:信息与计算机工程学院专业:电子信息工程2008级3班2011年综合电子课程设计任务书学生姓名学号专业〔班级08级电信3班同组成员设计项目基于ARM7与DS18B20的数字温度计的设计设计内容本设计利用DS18B20智能温度传感器、ARM7LPC2131嵌入式系统、MS12864LCD液晶屏,设计一个数字温度采集系统。人机接口电路的设计:控制系统采用ARM7LPC2131,键盘采用独立按键,显示器采用MS12864液晶屏,温度超限报警采用LED。主要技术指标和要求测量温度范围:-50℃~150℃精度:±0.5℃线性度:±0.3℃超限报警功能;具有温度和时间显示功能;工作电压:总线供电。设计所用仪器设备ARM7LPC2138小系统;高精度温度计;数字万用表;示波器。工作计划1.2011年6月22日:下达课程设计任务书;2.2011年6月23日:撰写开题报告;3.2011年6月25日:开题答辩PPT;4.2011年6月26日~6月27日:硬件分析与设计、软件结构化设计;5.2011年6月28日~7月96.2011年7月10日:课程设计结题验收参考资料温度传感器DS18B20芯片资料液晶屏MS12864R中文资料嵌入式ARM7LPC2131开发板系统原理指导教师签子系主任签字数字温度计的设计摘要本系统用ARM7LPC2131、温度传感器DS18B20、液晶屏12864、LED等组成,系统可实现实时显示当前室内温度功能。系统除基本数字温度计功能外,还具有显示当前时间和日期、温度超限报警、设置时间和日期初值功能。在设计中我们应用ARM7开发板。ARM7开发板具有丰富的硬件资源。本设计采用LPC2131控制可编程芯片DS18B20实现对温度的采集。利用LPC213内部时钟资源采集时间和日期。温度、时间和日期通过液晶屏12864显示,温度超限报警通过LED闪烁提示。本文详细介绍了如何实现对DS18B20编程采集温度功能,以及如何采集ARM7LPC2131内部时钟资源,并实现键盘输入修改日期时间、温度超限报警等功能。关键词:LPC2131;DS18B20;12864;温度超限报警;.....目录1绪论21.1引言….21.2系统方案设计31.3方案论证32系统主要器件选型与依据42.1EasyARM2131开发板42.2温度传感器DS18B2052.3MS12864R液晶屏简介63系统的硬件设计93.1ARM7开发板硬件设计93.2LCD液晶屏显示设计93.3DS18B20温度传感器的设计104系统的软件设计114.1系统主流程图114.2温度传感器功能模块124.3液晶显示功能模块125总结13参考文献附录A数字温度计设计1绪论1.1引言近年来随着科技的飞速发展,嵌入式的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的嵌入式应用系统中,嵌入式往往作为一个核心部件来使用,仅嵌入式方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。温度是一种最基本的环境参数,人们生活与环境温度息息相关,在工业生产过程中需要实时测量温度,在工业生产中也离不开温度的测量,因此研究温度的测量方法和控制具有重要的意义。DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器,通过此次项目设计,可以在原有的理论基础上,更加深入的了解传感器的工作原理特别是DS18B20温度传感器的工作原理,同时提高我们的实践动手能力以及逻辑思维能力,特别是拓宽了对ARM控制器的使用视野。数字温度计的控制方式很多。本系统采用LPC2000系列ARM芯片和可编程串行I/O接口芯片DS18B20为中心器件来设计数字温度计,实现了设计一个数字温度采集系统,利用LCD液晶屏显示当前温度、时间和日期,并具有温度超限报警功能1.2系统方案设计利用控制芯片、温度传感器、LCD液晶屏、时钟资源、LED等分别实现:〔1实时显示当前室内温度〔2显示年、月、日、星期、时、分、秒;〔3能够通过键盘输入日期和时间的初值;〔4温度超限报警;图1-1为设计方案总体框图温度温度传感器显示ARM7LPC2131报警模块按键图1-1设计方案总体框图系统初始化后,LCD上显示当前室内温度,同时LCD上显示时间和日期,通过功能键能实现日期和时间的初值设定,如果温度超过预先设定的温度值,八个LED灯会闪烁提示温度超限。1.3方案论证<1>显示模块方案一:使用LCD液晶屏12864作为时间日期显示,LCD液晶显示器的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。显示清晰,实现功能全。方案二:使用8为数码管作为显示,通过芯片HD7279控制数码管,可实现时间和日期还有当前温度显示,缺点是数码管显示数字,显示不灵活多变。由于LCD可同时显示温度和时间,显示清晰,实现功能全。故选用方案一LCD12864作为显示模块。<2>温度传感器DS18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。由于DS18B20性能已经够好,控制起来也比较方便,故不需要对比,直接选用DS18B20作为温度传感器〔3>时钟电路模块方案一:DS1302一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。方案二:ARM7LPC2131具有丰富的硬件资源,直接编程即可使用内部时钟资源由于使用DS1302还得外接电路而且编程比较麻烦,故选用ARM7内部时钟资源〔4报警电路报警电路采用8只LED,控制方便、准确。2系统主要器件选型及依据2.1EasyARM2131开发板EasyARM2131开发板是XX周立功公司设计的EasyARM系列开发套件之一,采用了PHILIPS公司基于AM7TDMS核单电源供电LQFP64封装的LPC2131具有JAG仿真调试、ISP编程等功能。开发板上提供了一些键盘、LED、蜂鸣器等常用功能部件,还具有RS232接口电路、I2C存储器电路另外用户也可以更换兼容的CPU进行仿真调试如LPC2132LPC2138、LPC2142等。灵活的跳线组合〔开发板内使用的所有I/O均可断开连接,还有用户I/O接口,极大地方便了用户进行32位AREasyARM2131实验板功能特点:*完全自主设计的软硬件、拥有自主版权的JTAG仿真技术;*支持ADS1.2集成开发环境及其PHILIPS所有型号ARM微控制器的仿真与开发;*采用"主板+CPUPACK适配器+SD卡适配器〔标准配置+多种可选配置适配器"*的形式构成EasyARM2131开发套件,标准配置的CPUPACK主芯片为LPC2131FBD;*板上的功能部件与CPU之间,可以使用跳线器选择连接;*全面支持9种型号的64PIN小管脚ARM7微控制器:-LPC213x〔LPC2131/2132/2134/2136/2138-内置USB接口的LPC214x<LPC2142/2144/2146/2148>*多种免费商业化软件包及其详细的开发文档:*移植μC/OS-II到ARM7软件包*数据队列软件包*串口驱动软件包*MODEM接口软件包*SPI总线软件包*I2C总线软件包*ZLG/FSV1.0版本文件管理系统软件包*ZLG/GUI图形用户界面软件包*ZLG/SD卡读写软件包*ZLG/USB固件程序及其驱动程序软件包*多种可选配置适配器:-各种型号的CPUPACK,用户可按需求和喜好配置主ARM芯片-MG12864点阵图型液晶模块*所有I/O口全部引出,方便用户连接外部电路的开发与使用;*可进行GPIO的控制实验,如键盘输入、蜂鸣器控制、模拟SPI等;*6个独立按键<可用于外部中断、定时器捕获输入>,8个LED指示灯;*具有RS232转换电路,可与上位机进行通讯,完成UART通讯实验;*可以与标准串行modem直接接口,方便远程通讯;*具有I2C接口和SPI/SSP接口输出;*提供基于PC的人机界面,方便调试实时时钟、串口通信等功能;*可进行外部中断实验,学习向量中断控制器<VIC>;*定时器控制实验,如定时控制LED、定时器捕获等;*使用板内的CAT1025〔内含复位功能,完成I2C总线的实验;*使用74HC595芯片,实现SPI接口数据发送、接收实验;*A/D转换实验;DAC转换实验〔更换CPU为LPC2132及以上;*实时时钟控制实验;*WDT及低功耗控制实验;*54个基础实验及其大量的中间件软件包,完整地验证了几乎所有的硬件功能资源;*详细的配套资料<《深入浅出ARM7—LPC213x/214x》<上/下册>,北航出版社,其中上册为标准配置>。2.2温度传感器DS18B20DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20产品的特点

〔1、只要求一个端口即可实现通信。

〔2、在DS18B20中的每个器件上都有独一无二的序列号。

〔3、实际应用中不需要外部任何元器件即可实现测温。

〔4、测量温度范围在-55。C到+125。C之间。

〔5、数字温度计的分辨率用户可以从9位到12位选择。

〔6、内部有温度上、下限告警设置。DS18B20的引脚介绍

TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

DS18B20的复位时序DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的"0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。2.3MS12864R液晶屏简介MS12864R汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字〔16X16点阵、128个字符〔8X16点阵及64X256点阵显示RAM〔GDRAM。主要技术参数和显示特性:电源:VDD3.3V~+5V<内置升压电路,无需负压>;显示内容:128列×64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等模块引脚说明MS128X64R引脚说明引脚号引脚名称方向功能说明1VSS-模块的电源地2VDD-模块的电源正端3V0-LCD驱动电压输入端4RS<CS>H/L并行的指令/数据选择信号;串行的片选信号5R/W<SID>H/L并行的读写选择信号;串行的数据口6E<CLK>H/L并行的使能信号;串行的同步时钟7DB0H/L数据08DB1H/L数据19DB2H/L数据210DB3H/L数据311DB4H/L数据412DB5H/L数据513DB6H/L数据614DB7H/L数据715PSBH/L并/串行接口选择:H-并行;L-串行16NC空脚17/RETH/L复位低电平有效18VOUT19LED_K-背光源负极〔LED-OV20LED_A-背光源正极〔LED+5V逻辑工作电压<VDD>:4.5~5.5V电源地<GND>:0V工作温度<Ta>:0~60℃<常温>/-20~75℃〔宽温接口时序模块有并行和串行两种连接方法〔时序如下:8位并行连接时序图MPU写资料到模块MPU从模块读出资料串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制—格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:<并行>8位数据的高4位—格式DDDD0000第三字节:<并行>8位数据的低4位—格式0000DDDD串行接口时序参数:<测试条件:T=25℃硬件设计3.1ARM7开发板硬件设计系统原理图设计如图3-1所示,ARM7LPC213系统实现如下功能:〔1控制温度传感器DS18B20读取当前温度值;〔2控制ARM7内部时钟资源读取时间和日期;〔3控制LCD液晶屏显示当前温度、时间和日期;〔4控制LED温度超限报警。图3-1系统原理图3.2LCD液晶屏显示设计:LCD液晶屏显示电路如图3-2所示。该液晶可实现显示当前年、月、日、周、时、分秒和温度值,具体控制和实现方法如下:〔1ARM7的P0.0-P0.7口连接液晶屏的DBO-DB7,控制对液晶屏并行数据读和写;〔2ARM7的P0.8口连接液晶屏的RS口,控制并行的指令/数据选择信号;〔3ARM7的P0.9口连接液晶屏的R/W口,控制并行的读写选择信号;〔4ARM7的P0.10口连接液晶屏的EN口,控制并行的使能信号;;〔5ARM7的P0.11口连接液晶屏的PSB口,控制并/串行接口选择:H-并行;L-串行;〔6ARM7的P0.12口连接液晶屏的RET口,实现对液晶屏的复位,低电平有效;图3-2LCD液晶屏电路图3.3DS18B20温度传感器的设计电路如图3-3所示,该温度传感器电路可实现对温度传感器DS18B20数据的读写,具体控制方法如下:ARM7的P0.30口连接DS18B20的DQ口,控制串行数据的读和写;DS18B20的VDD连接到ARM7开发板的VDD上;DS18B20的GND连接到ARM7开发板的GND上;图3-3温度传感器电路4系统的软件设计4.1系统主流程图图4-1为系统主流程图,主流程图具体介绍如下:〔1系统初始化包括对DS18B20进行初始化、设定GPIO、RTC初始化、液晶屏初始化;〔2初始化之后显示当前室内温度同时显示日期和时间;〔3与此同时进行按键判断,如果有按键继续判断是什么按键,如果是修改时间按键那么修改时间;如果是修改日期按键那么修改日期。如没有按键按下,那么判断室内温度是否超过预先设定值,如果超过驱动LED闪烁报警。开始开始系统初始化显示时间、日期、温度有按键?NYNY修改年?修改年值NY修改月?修改月值NY修改日?修改日值NY修改周?修改周值NY修改时?修改时值NY修改分?修改分值温度超过限?YNLED闪烁报警图4-1系统主流程图4.2温度传感器功能模块图4-2为温度传感器功能模块流程图;开始开始初始化温度传感器向温度传感器写指令读取温度传感器数据数据转化为温度显示结束图4-2温度传感器功能模块流程图4.3液晶显示功能模块图4-3为液晶显示功能模块流程图;开始开始LCD初始化写命令到LCD写数据到LCD显示图4-3液晶显示功能模块流程图5总结本系统利用控制芯片、温度传感器、LCD液晶屏、LED等分别实现:〔1实时显示当前室内温度〔2显示年、月、日、星期、时、分、秒;〔3能够通过键盘输入日期和时间的初值;〔4温度超限报警;系统设计简便、实用性强、操作简单、程序设计简便。系统不足:时间和日期初值设定中利用按键较多,此外还没有充分考虑到温度超限报警的多变性,温度报警上限不可调节,只能预先程序中设定超限报警温度值。一周的综合电子工艺课程设计结束了,可能在别人看来,这或许只是一个小的设计,可是它给于我的却不仅仅是这样,认真的做课程设计,运用ARM做一个系统的东西,我从心里给予了足够的重视。刚开始做总是出问题,多次重新分析,从细节着手寻找问题,最后找到了。发现自己想象的太多、太复杂,实际上只需要很简单的一种方法就可以的,问题解决了,也给我很多收获。我觉得自己的方法不可行,关键的原因在于自己对ARM的工作原理没有透彻的理解,所以就不能很好的理解老师的设计要求,结果就造成了很多的弯路,找不到一种合理的途径去解决问题。希望以后有机会可以多做一些这样的设计,增强自己的设计意识,加深所学的知识。参考文献[1]郁有文传.感器原理及工程应用〔第三版.XX电子科技出版社,2008.7[2]阎石.数字电子技术基础〔第四版.高等教育出版社,1998.11[3]周立功.ARM嵌入式系统基础教程〔第二版.北京航空航天大学出版社,2008.9[4]汪建军.基于非平衡电桥的电阻数字温度计设计[J].XX万里学院学报,2009[5]老虎工作室.电路设计与制板protel99se典型实例.人民邮电出版社[6]宋文绪、杨帆.传感器与检测技术[M].高等教育出版社,2004:附录A/***********************************************************************************描述:**〔1此程序所有延时采用定时器做〔2开发板上的P0.30口连接温度传感器DQ口线〔3开发板上P0.0-P0.7口连接液晶屏的DBO-DB7,其他液晶口线连接详见程序中宏定义〔4如需液晶显示的更清楚,需在液晶屏上加10K电位器,调节液晶屏输入参考电压*********************************************************************************/#include<LPC213X.H>#defineeq1<<30#defineuint8unsignedchar#defineFpclk11059200#definekey11<<16#definekey21<<17#definekey31<<18#definekey41<<19#definekey51<<20#definekey61<<21intnn=0,yy=0,rr=0,zz=0,ss=0,ff=0,mm=0;/*******************定义与LCD相关的宏*******************/#defineLCD_DATA0xFF#defineLCD_DI1<<8//与p0.8对应#defineLCD_RW1<<9//与p0.9对应#defineLCD_EN1<<10//与p0.10对应.#defineLCD_PSB1<<11//与p0.11对应//电路直接拉高#defineLCD_RST1<<12//与p0.12对应//上电自动复位,一般也可以不接*#defineclear_screen0x01#definereset_address0x02#defineset_point0x06//0000_0110#definedisplay_set0x0c//显示设定#definecursor_shift_control0x1c//0001_1100#definefunction_set0x30//功能设定基本指令集#definefunction_set_ext0x36//功能设定扩充指令集绘图开//#defineset_CGRAM_ADD#defineset_DDRAM_ADD0x80//#definewrite_data_intenalRAMunsignedchardigit[10]={"0123456789"};//定义字符数组显示数字voiddelay1u<unsignedlongt>{T1PR=0x00000000;//LoadprescalerT1TCR=0x00000003;//ResetcounterandprescalerT1MCR=0x00000003;//OnmatchresetthecounterandgenerateaninterruptT1MR0=t*0x0f;//SetthecycletimeT1TCR=0x00000001;//enabletimerwhile<<T1IR&0x01>==0>;T1IR=0x01;T1TCR=0x00000000;}/******************************************************************************************************************************************************************************************************************//******************************************************************************************************************************************************************************************************************/voidLCD_DATA_input<>{IO0DIR=IO0DIR&<~LCD_DATA>;//把设定为输入}/******************************************************************************************************************************************************************************************************************/voidLCD_DATA_output<>{IO0DIR=IO0DIR|LCD_DATA;//设定为输出}/******************************************************************************************************************************************************************************************************************/voidCheckState<> //状态检查,LCD是否忙?{delay1u<200>;//while<read_instruct<>>;}/********************************************************************************************************//***********************************************************************************************************函数名称:GPIO_Init<>***函数功能:初始化IO端口,包含一个uart0,三个按键输入,以及几个普通的输入输出端口.***入口参数:无***出口参数:无**********************************************************************************************************//*voidGPIO_init<>{PINSEL0=0;IO0DIR=0xFF<<8; }*//***********************************************************************************************************函数名称:w_data<unsignedchardata_Lcm>***函数功能:给LCD发送数据或者命令.***入口参数:data_Lcm***出口参数:无**********************************************************************************************************/voidW_data<uint8data_Lcm>{ CheckState<>; LCD_DATA_output<>; IO0SET=LCD_DI; IO0CLR=LCD_RW;IO0CLR=0xFF; IO0SET=data_Lcm; IO0SET=LCD_EN; IO0CLR=LCD_EN;}/***********************************************************************************************************函数名称:***函数功能:***入口参数:***出口参数:**********************************************************************************************************/voidW_instruct<uint8data_Lcm>{ CheckState<>; LCD_DATA_output<>; IO0CLR=LCD_DI; IO0CLR=LCD_RW; IO0CLR=0xFF; IO0SET=data_Lcm; IO0SET=LCD_EN; IO0CLR=LCD_EN;}/***********************************************************************************************************函数名称LCD_Init<>***函数功能:初始化lcd显示屏***入口参数:无***出口参数:无**********************************************************************************************************/voidinit_lcd<void>{ IO0SET=LCD_RST; IO0CLR=LCD_RST; IO0SET=LCD_RST; IO0SET=LCD_PSB; IO0SET=LCD_PSB; W_instruct<function_set>; W_instruct<display_set>; W_instruct<clear_screen>; W_instruct<reset_address>; W_instruct<set_DDRAM_ADD>; }/***********************************************************************************************************函数名称:***函数功能:写汉字到LCDx_add显示RAM的地址dat1/dat2显示汉字编码指定的位置***入口参数:***出口参数:**********************************************************************************************************//*voiddisplay<uint8x_add,uint8dat1,uint8dat2>{W_instruct<x_add>;//1xxx,xxxx到地址计数器ACW_data<dat1>;W_data<dat2>;}*//********************************************************************************************************//*********************************************************************************/voidwrite<unsignedchardate>{unsignedchari=0;for<i=8;i>0;i-->{IO0DIR|=eq;//改回输出 IO0SET|=eq; delay1u<2>;IO0CLR=eq;if<date&0x01>{IO0SET|=eq;//释放总线 delay1u<80>;}else{IO0CLR=eq; delay1u<80>;}delay1u<30>;IO0SET|=eq;delay1u<3>;date>>=1;}delay1u<6>;}unsignedcharread<>{unsignedchari=0;unsignedchardate=0;for<i=8;i>0;i-->{date>>=1;IO0DIR|=eq;//改回输出 IO0SET|=eq; delay1u<2>;IO0CLR=eq;//给脉冲信号delay1u<2>; IO0SET|=eq; delay1u<13>;IO0DIR=IO0DIR&0xBFFFFFFF;//拉高总线输入delay1u<12>;if<IO0PIN&eq>date|=0x80;delay1u<3>;}returndate;}unsignedcharinnit<>{unsignedcharnum;IO0DIR|=eq;//稍做延时IO0CLR=eq;//将DQ拉低delay1u<600>;//精确延时大于480us480IO0SET=eq;delay1u<30>;IO0DIR&=0xBFFFFFFF;//拉高总线输入delay1u<30>;if<<IO0PIN&eq>==0>{num=0;}else{num=1;}IO0SET=num;delay1u<200>;//300returnnum;}voidzhun<>{innit<>;write<0xCC>;write<0x44>; delay1u<900000>; innit<>; write<0xCC>; write<0xBE>;}voiddisplay_temp1<unsignedcharx>{inti;unsignedchara,b,c;//j,k,l分别储存温度的百位、十位和个位unsignedchark[9]={"温度是:"}; unsignedcharl[16]=<"数字温度计姚--连">; W_instruct<0x88>; for<i=0;i<9;i++> W_data<k[i]>; W_instruct<0x98>;for<i=0;i<16;i++> W_data<l[i]>; a=x/100;//取百位 b=<x%100>/10;//取十位 c=x%10;//取个位 W_instruct<0x8C>;//写显示地址,将在第2行第7列开始显示 W_data<digit[a]>;//将百位数字的字符常量写入LCDW_data<digit[b]>;//将十位数字的字符常量写入LCDW_data<digit[c]>;//将个位数字的字符常量写入LCDdelay1u<100>;//延时1ms给硬件一点反应时间}voiddisplay_temp2<unsignedcharx>{unsignedchart[]={"℃"} ;//写显示地址,将在第2行第11列开始显示W_data<'.'>;W_data<digit[x]>;//将小数部分的第一位数字字符常量写入LCDW_instruct<0x8F>;W_data<t[0]>; W_data<t[1]>; W_data<t[2]>;delay1u<100>;//延时1ms给硬件一点反应时间}/**********************************************************************************************************函数名称:RTCInit<>**函数功能:初始化实时时钟**入口参数:无**出口参数:无********************************************************************************************************/voidRTCInit<void>{ PREINT=Fpclk/32768-1; //设置基准时钟分频器 PREFRAC=Fpclk-<Fpclk/32768>*32768; CCR=0x00; //禁止时间计数器 YEAR=2008+nn; MONTH=04+yy; DOM=01+rr; DOW=4+zz; HOUR=8+ss; MIN=30+ff; SEC=59+mm; CIIR=0x01; //设置秒值的增量产生1次中断 CCR=0x01; //启动RTC}/**********************************************************************************************************函数名称:SendTimeRtc<>**函数功能:读取RTC的时间值,并将读出的时分秒值通过串口送到上位机显示。**入口参数:无**出口参数:无********************************************************************************************************/voidSendTimeRtc<void>{unsignedchara,b,c,d; intdatas; inttimes;intbak;unsignedchart[]={"年"}; unsignedchars[]={"月"}; unsignedcharr[]={"日"}; unsignedcharm[]={"周"}; unsignedcharn[]={"时"}; unsignedcharp[]={"分"}; unsignedcharq[]={"秒"}; times=CTIME0; //读取完整的时钟寄存器 datas=CTIME1;W_instruct<0x80>;W_data<0x02>; //显示笑脸 W_data<0x02>; //显示笑脸 bak=<datas>>16>&0xfff; //获取年a=bak/1000; bak=bak%1000;b=bak/100;bak=bak%100;c=bak/10;d=bak%10; W_instruct<0x81>; W_data<digit[a]>;//将千位数字的字符常量写入LCDW_data<digit[b]>;//将百位数字的字符常量写入LCDW_data<digit[c]>;//将十位数字的字符常量写入LCDW_data<digit[d]>;//将个位数字的字符常量写入LCDW_instruct<0x83>;W_data<t[0]>; W_data<t[1]>; bak=<datas>>8>&0x0f; //获取月a=bak/10;b=bak%10; W_instruct<0x84>; W

温馨提示

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

评论

0/150

提交评论