1、湖南理工学院毕业设计(论文) 毕业设计(论文)题目: 嵌入式温度监测与报警系统设计II毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校
2、要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论
3、文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日注 意 事 项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词 5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论
4、文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序
5、1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订摘 要本设计采用了ARM COTEXM3 系列芯片STM32F103RCT6为主控芯片,对DS18B20温度传感器进行控制,实现温度采集功能,并在TFTLCD液晶显示屏上显示实时温度。软件采用C/OS-嵌入式实时内核与C/GUI图形界面库来实现多任务管理和UI界面的功能。利用C/GUI设计一个具有显示实时温度折线图和控制窗口的UI界面,从而减少按键数量。同时调用C/OS-嵌入式实时内核实现多任务管理和利用C/GUI实现对触摸按键的设置,通过TFTLCD触摸屏上设置的按键进行温度采集的控制。通过利用软件模拟按键从
6、而简化了系统的软硬件设计,更便于使用人员进行控制操作,同时提高了系统的可维护性和可操作性,达到了节约成本和具有更高效率的目的。关键词:微控制器;TFTLCD, DS18B20;温度监测;嵌入式AbstractSystem uses ARM COTEX-M3 chips STM32F103RCT6 as main controller that controls the temperature sensor DS18B20 to achieve temperature acquisition function,and displays real-time temperature on the T
7、FT LCD screen.The software uses the C/OS - embedded real-time kernel and C/GUI graphical interface library to implement the multiple task management and UI interface functions. Using the C/GUI design a interface which display a real-time line graph of temperature and control windows UI to reduce the
8、 number of buttons. At the same time, calling the C/OS - system manage the multiple task and using C/GUI implement settings of touch-key.Using the TFT LCD touch screen buttons control the temperature acquisition. By using simulation keys to simplify the design of system hardware and software,more ea
9、sier to operator to control the operation.Meanwhile it can improve the maintainability of the system and operability, and achieve the purpose of saving cost and higher efficiency.Keywords: Microcontroller; TFTLCD, DS18B20; Temperature monitoring; Embedded目 录摘 要IAbstractII第1章 绪 论11.1 课题设计背景及意义11.2 行业
10、技术发展概况11.3 课题设计的主要内容2第2章 温度监测与报警系统总体设计42.1 系统基本框图42.2 硬系统工作原理图及工作原理42.2.1 系统工作原理图42.2.2 系统工作原理42.3 硬件元件介绍52.3.1 STM32F103RCT6介绍52.3.2 DS18B20介绍52.3.3 TFT-LCD介绍62.3.4 蜂鸣器介绍7第3章 温度监测与报警系统硬件设计83.1 硬件接口框图83.2 MCU设计83.3 JTAG设计93.4 TFTLCD电路设计103.5 蜂鸣器电路设计113.6 DS18B20设计12第4章 软件设计134.1软件简介134.2主函数分析144.3 主
11、要任务分析154.3.1 Task_wave任务154.3.2 Task_TOUCH任务164.3.3 TASK_beep任务174.3.4 Task_DS18B20任务17第5章 调试结果及分析19总 结22参考文献23致 谢24附录一 硬件原理图25附录二 程序2649第1章 绪 论1.1 课题设计背景及意义当今现代化建设和国民经济发展迅速。社会对生产环境和生活环境意识的要求也越来越高。人们的日常生活和周围环境的温湿度息息相关,石油、化工、航天、制药、档案保管、粮食存储等领域对温度也有着较高的要求。现在智能手机,可穿戴设备,轻型医疗产品广泛的进入了人们的生活。其中尤其以苹果公司的产品广为人
12、们喜爱,其产品的主要优点是其用户体验和美观的UI界面更甚于其它品牌。随着单片机价格的降低与普及,可见现在的电子产品朝着系统集成方向快速发展。嵌入式温度产品在家庭安全、农业大棚、工业监控等方面越来越广泛。基于单片机的温度监控系统较传统温度控制系统具有更大的灵活性以及易于扩展功能,是一种低成本、可操作的产品。本次设计采用STM32系列ARM产品与各种外围电路构成嵌入式温度监测与报警系统,实现对温度的实时监测、温度曲线图显示、温度报警。通过本次设计掌握温度检测系统的硬件设计,学习了解STM32芯片使用、触摸屏驱等软件编写方法。熟悉基于C/OS-嵌入式内核编程,以及C/GUI图形库编程。熟练使用Alt
13、ium Designer 6.9软件进行PCB布局与布线,熟悉PCB板的制作。通过课题深入学习相关知识,并巩固所学知识,并熟练综合运用所学知识解决问题,锻炼动手能力与实际工作能力,将所学的理论与实践结合起来。1.2 行业技术发展概况1600年,伽利略研制出气体温度计,一百年后,出现了酒精温度计和水银温度计。随着现代工业发展的需要,相继研制出金属丝电阻、温差电动式元件、双金属式温度传感器。1950年以后,研制了半导体热敏电阻器。最近随着原材料、加工技术的飞速发展,又相继研制出各种温度传感器。常规的热电偶、热电阻、半导体温度传感器等测温方式,需要金属导线传输信号,绝缘性能不能保证。但随着技术发展测
14、温技术日趋多元化,温度检测单元朝着集成与数字化方向发展。国外行业发展比国内早,技术更成熟。国外对温湿度控制技术研究较早,始于20世纪70年代。先是采用模拟式的组合仪器,采集现场信息并进行指示、记录和控制。80年代末出现了分布式控制系统。目前正开发和研制计算机数据采集控制系统的多因子综合控制系统。现在世界各国的温湿度测控技术发展很快,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。几种温度测量技术分类如下:(1)薄膜温度传感器薄膜温度传感器是一种新型的测温传感器,工作原理与普通热电阻,热电偶相同,但它的热接点厚度一般只有几微米。薄膜温度传感器由于具有体积小、响应时间短、灵敏度高、
15、便于集成等特点,适于测量物体随时间快速变化的温度。(2)光纤测温技术光纤测温技术是在近十多年才发展起来的新技术,目前,这一技术仍处于研究发展和逐步推广实用的阶段。在某些传统方法难以解决的测温场合,已逐渐显露出它的某些优异特性。但是,正像其他许多新技术一样,光纤测温技术并不能用来全面代替传统方法,它仅是对传统测温方法的补充。(3)辐射测温技术辐射温度计具有无测量上限,响应速度快,以及不接触被测对象因而不影响被测温场等特点。近年来,随着电子技术的飞速发展、半导体材料的进步及计算机技术的发展与应用,辐射测温技术得到长足的进步和发展。辐射测温仪器的制造水平、性能指标也有了显著提高,在工业生产、制造行业
16、和科学研究中应用也越来越广泛。(4)电量式测温电量式测温方法主要利用材料的电势、电阻或其它电性能与温度的单值关系进行温度测量,包括热电偶温度测量、热电阻和热敏电阻温度测量、集成芯片温度测量等。以上测量技术是当前应用较为广泛的技术。在过去的几年里传统的温度监测方式正在被智能化、自动化、无纸化、网络化的温度监测系统所取代,在可以预见,在未来几年里,我国大部分企业将转变温湿度监测方式,统一装配智能化的温度监测系统。 采用当代传感器技术、自动化测控技术、数字通信技术、计算机应用技术等多学科地综合应用,将需要监测的若干个区域内的环境温度进行自动测量、并将其数据24小时不间断地通讯无线的方式传输给监控计算
17、机,实现对各区数据的分区管理,如查看实时数据、软件报警、现场声光报警、数据记录、存储及数据导出及永久保存等,并结合现场的相关温湿度调控设备实现对现场温湿度的监测与自动控制,从而实现了温湿度监测的智能化、自动化、系统化和网络化,为各行业温度监测提供全面、实用的系统解决方案。1.3 课题设计的主要内容本课题以温度监控与报警为主要研究对象,使用意法半导体公司的STM32F103RCT6处理器为主控制器芯片,基于由Micrium公司提供的C/OS-II嵌入式内核设计管理多个任务,利用SEGGER提供的C/GUI图形界面库开发人机交互界面,并整合软硬件形成整体解决方案。主要工作如下:(1)对系统功能进行
18、了简单介绍,并详细介绍了意法半导体公司的以Cortex-M3为内核的STM32F103RCT6处理器芯片。(2)对DS18B20芯片功能和使用方法进行了详细的介绍,并介绍了LCD集成触摸显示屏的基本特性和使用流程。(3)硬件设计方面制定了以STM32F103RCT6为核心处理器并以DS18b20和LCD为外围电路的整体方案。整体方案包括电源模块、调试模块、显示模块、报警模块等部分。(4)软件方面介绍了C/OS-II操作系统特性和C/GUI库的主要API函数以及设计的三个主要核心函数功能和原理。并编写了DS18b20的驱动函数和设计了LCD人机界面。第2章 温度监测与报警系统总体设计2.1 系统
19、基本框图硬件系统框图如下图2.1所示,该系统主要由单片机STM32F103RCT6及外围电路,LCD显示电路,DS18B20传感器电路,蜂鸣器报警电路以及按键电路四部分构成。DS18B20传感器是一个数字集成器件,不需要再添加AD转换电路,该传感器用来检测环境温度,LCD电路部分具有检测触摸输入和显示功能,蜂鸣器是由处理器驱动的报警装置,对超出范围的温度值进行报警提示,按键电路是防止系统死机而设计的快速复位按键,而处理器是将采集的温度值送到LCD显示部分进行显示,并判断当前温度是否需要报警,还需要监控触摸输入的坐标以响应对应的操作。处理器DS18B20温度检测电路按键电路LCD显示部分蜂鸣器报
20、警图2.1 系统结构框图2.2 硬系统工作原理图及工作原理 2.2.1 系统工作原理图系统原理图包括单片机控制电路,TFTLCD各个模块原理图见附录1。2.2.2系统工作原理系统在开机后,需要通过触摸屏设置报警值,初始报警最大值是123.7,最小值是-52.8,使用者需要根据具体情况设置报警范围。系统上电后每隔两秒便会读取一次DS18B20传感器的值,DS18B20返回两个字节的数据,然后单片机对返回的数据进行调整,得到正确的值并保存到全局数组中,全局数组设计成了一个循环数组,当超过数据范围后新的值便会覆盖旧的值。当检测到触摸屏star按钮按下后,单片机便会将全局数组中十个数据以折线图的形式显
21、示到显示屏上,同时还将当前温度值显示在右上角,每两秒更新一次,保持与读取温度频率相同。同时还需要判断当前温度值是否超出设定的温度范围。如果超过温度范围,控制器便打开蜂鸣器报警。2.3 硬件元件介绍 2.3.1 STM32F103RCT6介绍STM32F103RCT6是意法半导体公司推出的一款32位单片机,最高72MHz工作频率,1.25DMips/MHz,单周期乘法运算和硬件除法,通用增强型。其他功能还包括:256 KB的Flash,最多20 KB SRAM,以 CPU时钟速度存取(读/写),零等待状态;工作温度范围:- 40-85;4件选择可变静态存储控制器,支持Flash,SRAM,PSR
22、AM,NOR和NAND存储器;LCD并行接口,支持英特尔8080和摩托罗拉6800模式;支持三种低功耗模式:睡眠模式,停止模式,待机模式。多达11个定时器,四个16位定时器,2个16位的电机控制PWM定时器,2个看门狗定时器(两个独立窗口型);系统时间定时器,24位的递减计数器,两个用来驱动DAC 的16位基本定时器。STM32F103RCT6引脚排列如图2.2所示。图2.2 STM32F103RCT6 A部分与B部分封装引脚图2.3.2 DS18B20介绍DS18B20的核心功能是它的直接读取数字的温度传感器检测的值存储到温度寄存器中,温度寄存器格式如表2.2所示。温度传感器的精度为用户可编
23、程的9,10,11或12位,每一位对应的的精度分别是0.5,0.25,0.125和0.0625。在上电状态下默认的精度为12位。DS18B20引脚功能如表2.1所示。表2.1 已经给出了引脚说明。 表2.1 DS18B20引脚说明T0-9封装符号说明1GND接地2DQ数据输入/输出引脚。对于单线操作:漏极开路。当工作在寄生电源模式时用来提供电源3VDD可选的VDD 引脚。工作与寄生电源模式时VDD必须接地。2.3.3 TFT-LCD介绍TFT-LCD模块自带一个触摸检测芯片和一个显示驱动芯片,引脚排列图如图2.3所示。开发板模块的触摸屏触摸检测控制芯片为XPT2046。XPT2046是一款4导
24、线制触摸屏控制器,内含12位分辨率125KHz转换速率逐次逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046通过连续执行两次A/D转换,一次X方向一次Y方向触摸检测查出被按的屏幕坐标值。图2.3 TFT_LCD引脚图ILI9341液晶控制器自带显存,其显存总大小为172800(240*320*18/8),即18位模式(26万色)下的显存量。在16位模式下,ILI9341采用RGB565格式存储颜色数据,此时ILI9341的18位数据线与MCU的16位数据线以及LCD GRAM的对应关系如表2.2所示。表2.2 16位数据与显存对应关系表9341总线D
25、17D16D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0MCU数据D15D14D13D12D11NCD10D9D8D7D6D5D4D3D2D1D0NCLCD GRAMR4R3R2R1R0NCG5G4G3G2G1G0B4B3B2B1B0NC2.3.4 蜂鸣器介绍蜂鸣器俗称喇叭,是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。蜂鸣器与家用电器上面的喇叭在用法上也有相似的地方,通常工作电流比较大,电路上的TTL电平基本上驱动不了蜂鸣器,需要增加一个电流放大的电路才可以,这一点与家用电器中的功放有相似之处。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣
26、器两种类型。此次设计使用的蜂鸣器是电磁式的有源蜂鸣器,这里的有源不是指电源的源,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供25Khz左右的方波驱动,才能发声。第3章 温度监测与报警系统硬件设计3.1 硬件接口框图 整个系统硬件接口图如图3.1所示。STM32F103RCT6的PC6与LCD的读数据线相连,PC7与LCD写数据线相连,PC8与LCD数据与命令控制位相连,PC9与LCD片选信号相连,16位PB口与LCD双向数据接口相连。控制器PA2接口驱动蜂鸣器,PA0接口与温度传感器芯片DQ口相连。JTAG接口引出作为程序下载和
27、调试接口。PB接口PC接口JTAG接口PA0接口PA2接口控制器JTAG插座LCD 8080接口温度传感器DQ蜂鸣器图3.1 系统硬件接口 3.2 MCU设计控制器原理图如图3.2所示。PA0连接DS18B20的单信号线上,由PA0模拟产生DS18B20的复位脉冲、应答脉冲、写时序以及读时序。PA2与蜂鸣器相连,由于蜂鸣器是有源蜂鸣器,自带震荡电路。所以PA2并不需要再产生一个周期脉冲来驱动蜂鸣器,只需要输出高电平将打开蜂鸣器否则关闭。Y1是一个32.768KHZ的晶振,给RTC(实时时钟)提供精确定时。STM32的实时时钟(RTC)是一个独立的定时器。STM32的RTC模块拥有一组连续计数的
28、计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。Y2是一个8MHZ晶振, 经过芯片内部PLL后输出系统时钟达到72M最大频率。PB口和PC6-PC10用作集成显示触摸屏的控制口。图3.2 mcu原理图3.3 JTAG设计JTAG因为只有一条数据线,通信协议有必要像其他串行设备接口,如SPI一样为串行传输。时钟由TCK引脚输入。配置是通过TMS引脚采用一次操作一位来实现的。通过TMS引脚的数据在TCK时钟控制下TDI和TDO引脚分别输入或者输出数据。可以通过使用不同同的命令模式来读取芯片的序列号,对输入引脚的采样,驱动(或悬空)输出引脚,或者将TD
29、I与TDO连通以在逻辑上短接多个芯片的链路。TCK的时钟频率随芯片的不同而不同,但是其通常频率范围为10-100MHz。当在集成电路中进行边界扫描时,被处理的信号是在同一块IC的不同功能模块间的,而不是不同IC之间的。TRST引脚是一个可选则性的,相对于待测电平低电平有效的复位开关。如果该引脚没有定义,则待测逻辑被同步时钟输入复位指令复位。JTAG引脚如表3.1所示。表3.1 JTAG接口说明引脚端口名功能1TDI测试数据输入2TDO测试数据输出3TCK 测试时钟4TMS测试模式选择5TRST测试复位JTAG原理图如图3.3所示。图3.3 JTAG原理图3.4 TFTLCD电路设计本设计中我采
30、用开发板附带的TFTLCD显示屏,该模块电路图如图3.4所示。它内部有ILI9325控制器来驱动TFT,TFT采用四线制电阻屏,显示分辨率为320240,接口为16位的80并口,刷屏速度快,自带触摸屏功能,可以省去部分按键电路的制作。TFTLCD可以直接接在控制器的IO口上,TFTLCD模块采用16位的并方式与外部连接,之所以不采用8位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用8位数据线,就会比16位方式慢一倍以上,我们当然希望速度越快越好,所以我们选择16位的接口。该模块的8080并口信号线如表3.2所示。表3.2 引脚功能端口 功能CSTFTLCD片选信号WR向TFTL
31、CD写入数据RD从TFTLCD读取数据D15:016位双向数据线RST硬复位TFTLCDRS命令/数据标志(0,读写命令;1,读写数据)图3.4 TFT_LCD原理图3.5 蜂鸣器电路设计该模块电路图如图3.5所示。我们不能直接用STM32的IO口驱动,因为STM32的单个IO最大可以提供25mA电,而蜂鸣器的驱动电流是30mA左右,两者十分相近,但是全盘考虑,STM32整个芯片的电流,最大也就150mA,如果用IO口直接驱动蜂鸣器,其他地方电流将过小。所以,我们不用STM32的IO直接驱动蜂鸣器,而是通过三极管Q1扩流后再驱动蜂鸣器,这样STM32的IO只需要提供不到1mA的电流就足够了。图
32、3.5 蜂鸣器原理图3.6 DS18B20设计DS18B20电路图如图3.6所示。单总线系统只有一条定义的信号线。每一个总线上的器件必须是漏极开路或三态输出。这样的系统允许每一个挂在总线上的区间都能在适当的时间驱动它。DS18B20的单总线端口(DQ引脚)是漏极开路式的,单总线需要一个约5K的外部上拉电阻;单总线的空闲状态是高电平。无论任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必须停留在空闲状态。在恢复期间,如果单总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。如果总线停留在低电平超过480us,总线上的所有器件都将被复位。图3.6 DS18B20原理图第4章 软件
33、设计4.1软件简介本设计嵌入式系统采用了C/OS-图形界面采用了C/GUI,从而实现多任务、人机友好的嵌入式产品。嵌入式多任务操作系统C/OS-是一个“实时内核”,也称为实时操作系统或RTOS。在C/OS-开发程序比在裸机上更方便,而且后期只需要对各个独立的任务进行修改维护,对整个代码改动量小。在使用可剥夺性的内核时,所有要求快速反应的事件都得到了尽可能快速、有效的处理。通过系统的服务,如信号量、邮箱、队列、延时、超时等,RTOS使得系统资源得到尽可能的最大化利用。C/OS-与其他大型操作系统不同,它仅仅是一个实时内核,并不具有像GUI,TCP/IP协议栈等功能部件。这使得C/OS-显得非常简
34、洁。操作系统具有管理多个任务的功能,开发者只需要编写每个任务函数即可。在进行应用功能的增加或修改时,开发者只需要理解每个任务的代码结构,从而显著的减少了工作强度。弊端是,由于操作系统比专用代码提供更通用的功能,而很多功能在开发中便不会用到,所以这也使得它占用了更多资源,系统工作效率也因此有所降低。于是,通用嵌入式操作系统的选用需要由各个因素决定,例如实时性、Flash容量、RAM容量等等。GUI时英文Graphics User Interface的缩写,即图形用户界面。在计算机的发展历史中,GUI的出现是一次革命。它提供了更友好的UI,使得计算机变得更人性化也使得大多数人都能够学会使用和接受的
35、工具。现在被广泛使用的Windows系统就是在个人电脑领域种占据主主要市场的GUI系统。与PC不同的是由于嵌入式系统对实时性的要求更高,对GUI界面的响应速度的要求也更高。嵌入式系统一般不建立在结构复杂功能冗余以及对硬件性能要求高的系统之上,因此,嵌入式系统如C/OS-更适合轻型、占用资源少、高性能、高可靠性的GUI库。在一些界面功能要求简单的嵌入式系统中,大家可以自行编写一些函数集,来进行图形、文字的显示;但是,对于界面功能要求强大的系统,包括PDA、机顶盒、DVD、WAP手机等系统均要求提供全功能的web浏览器。而这一切均要求有一个功能强大、高性能、高可靠性的GUI系统的支持。 C/GUI
36、的设计目标是提供一个适合大部分实时操作系统并支持大部分LCD控制器的图形函数库。该系统具有图形窗口管理功能,以及各种图形绘制功能。 它适用于单任务操作及多任务操作环境, 也适用于不论是免费的操作系统还是是商业的实时操作系统。 C/GUI全部由C源码组成,以及可以选择的功能部件, 并适用于任意LCD控制器和CPU何尺寸大小的真实显示或虚拟显示。4.2主函数分析开始初始化硬件初始化操作系统创建Task_DS18B20任务创建Task_wave任务创建TASK_beep任务创建Task_TOUCH任务结束图4.1 main函数流程图在多任务开始之前,需要先设置系统时钟频率为72M,初始化触摸屏控制器
37、,初始化C/GUI以及校准触摸屏。流程图如图4.1所示。完成硬件初始化后,还需要调用OSInit()初始化操作系统。然后依次创建Task_DS18B20温度测量任务, Task_wave绘制温度折线图任务,TASK_beep温度报警任务和Task_TOUCH触摸屏监测任务。之后调用OSStart()函数执行最高优先级任务Task_DS18B20。Task_DS18B20每隔2秒执行一次温度读取操作,在读取DS18B20温度值之前,需要调用OS_ENTER_CRITICAL()宏关闭中断,因为DS18B20驱动函数中读数据和写命令时序都是微妙级的延时,而操作系统最小计时是50毫秒,所以此时需要停
38、止任务调度,以避免操作失败。在延时2秒的时间里,任务调度器会检查次级优先级的任务延时时间是否已经等于零,或者任务是否已经进入就绪状态。如果有任务进入就绪状态,系统将装载该任务的地址值到PC寄存器并从堆栈中恢复其它寄存器的值,并开始执行该任务。以上操作是依赖于PendSV异常来进行上下文的切换。当有中断的时候,PendSV将会被悬起等待中断结束,所以能保证任务及时的得到响应。Task_wave任务将温度数据显示成折线图,便于直观了解一段时间的温度变化。当温度值超过设定的最大最小温度范围后引起TASK_beep任务打开蜂鸣器报警,30秒后蜂鸣器将关闭。4.3 主要任务分析 4.3.1 Task_w
39、ave任务Task_wave任务流程图如图4.2所示,Task_wave任务是一个循环结构,只有调用延时函数后才会引起任务切换。该任务的主要功能是通过_Wave函数实现折线图的显示。_Wave函数是绘制温度折线图核心函数,绘制函数的主要思想是t开始赋值0,然后判断t的值是否在412的区间里,由于缓冲数组长度13,显示数据个数是10个数据点,t代表显示数据在缓冲数组中的起始下标,e代表显示数据在缓冲数组中的结束下标。如果t值在4.12区间就代表e值需要调整成数组起始位置,然后开始绘制从起始位置t到结束位置e的十个数据值。每绘制一个数据点就需要将当前点的x坐标和y坐标分别保存到pre_x和 pre
40、_y中,以便于绘制下个点时能将两点连接成直线。绘制完十个点后还需要调整起始位置e和t的值。调用延时函数创建内存设备延时10 s绘制折线图开始Star按键按下?结束NY图4.2 Task_wave任务流程图4.3.2 Task_TOUCH任务延时10 s转换成屏幕坐标调用驱动函数得到坐标开始任务切换?结束YN图4.3 Task_TOUCH任务流程图该任务每10ms调用一次,流程图如下图4.3所示。当手或者触摸笔在屏幕任意一点按下后,该任务将检测到触摸按下的坐标值。并将坐标值存储在pState结构体中,结构体定义如下:typedef struct int x,y; unsigned char Pr
41、essed; GUI_PID_STATE;该结构体的x,y分别是屏幕坐标值,Pressed是标记是否松开。由于该任务是10ms执行一次,而人的触摸时间要远远大于10ms,所以每个触摸都能检测出来。当得到坐标值后,将调用窗口管理功能的库函数对得到的坐标值进行判断该坐标位于哪个窗口控件上,并进一步判断该控件是否有父窗口,然后将WM_NOTIFY_PARENT消息发送给对应窗口,消息封装形式如下:typedef struct int MsgId; /消息Id WM_HWIN hWin; /目的窗口句柄 WM_HWIN hWinSrc; / 发送窗口句柄 union const void* p; /消
42、息附带信息 int v; GUI_COLOR Color; Data; WM_MESSAGE;Data联合体v变量中包含通知代码WM_NOTIFICATION_RELEASED,当释放小工具后,小工具发送该通知代码给父窗口,标记鼠标松开调用父窗口的回调函数,在回调函数中执行对应的操作。4.3.3 TASK_beep任务TASK_beep任务如图4.4所示。在第一遍执行的时候,首先会绘制坐标轴,然后绘制刻度线,接着创建具有滑动条,编辑框以及按钮资源的对话框。进入循环后,将当前读取的温度值与从编辑框读取的设定的温度范围值进行比较,如果超出温度范围便会打开蜂鸣器30秒,然后关闭蜂鸣器,接着进入延时函
43、数,等待任务切换。延时时间到了之后,便会从判断温度开始执行,或者从被中断的地方开始执行。创建控制对话框绘制刻度线报警当前温度超出报警范围?YN开始结束图4.4 TASK_beep任务4.3.4 Task_DS18B20任务Task_DS18B20任务如图4.5所示。该任务核心的函数是DS18B20_Get_Temp()函数,由于读写DS18B20的时序需要延时微秒级别,所以需要关闭中断才能调用该函数,否则其它任务可能打断正在执行的读取操作导致失败。读取完毕后,需要打开中断,以允许多任务切换。DS18B20_Get_Temp()函数的详细分析如下。首先调用DS18B20_Start ()函数开始
44、执行温度转换操作,通过分别调用DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0x44)函数执行上面三个步骤。DS18B20_Rst()通过拉低DQ数据线750微妙,然后释放并延时15微妙,并接着调用DS18B20_Check()函数读取从DS18B20返回的存在脉冲,返回0表示存在该器件,否则不存在。然后执行第二部操作,调用DS18B20_Write_Byte0xcc),0xcc是ROM指令,表示允许总线控制器不用提供64 位ROM 编码;接着调用DS18B20_Write_Byte(0x44);0x44是DS18B20功能指令,这条命令用以启动一次温度转换。温度转换指令被执行,产生的温度转换结果数据以2个字节的形式被存储在高速暂存器中,而后DS18B20保持等待状态。DS18B20_Write_Byte(0xbe)是读取暂存器的指令,该指令发出便可以从DQ数据线读取9个暂存寄存器的值。TL=DS18B20_