基于PT4115的智能台灯控制系统设计和实现通信工程专业.docx
3软件设计KeilUViSiOn开发平台:KeilUViSiOnIDE开发平台简称KeiLKeil支持ARM、C51、Cl66、C251等类型微控制器,能够提供灵活编程的环境进行开发。该开发平台集合项目管理,运行环境,编译代码链接,源代码编辑,程序调试等功能,为开发提供强有力的帮助,一个开发平台集成上述功能,简化开发环境部署,无需多个程序即可完成开发。Keil十分利于新手进行开发,他的易用性能够加快你的嵌入式系统软件开发,能够支持多窗口进行编辑,创建新的源代码以及项目文件管理。Keil内集成的程序调试器,提供了一个独立环境,支持你进行测试,功能验证,定制应用代码。调试器不仅包含了传统的功能,还包括比如说断点,窗口预览,程序执行控制,以及硬件内部操作全可视化等操作。Keil支持C语言、C+语言、汇编语言进行开发,也是各地公司、高校使用频率较高的开发平台。本毕业设计中,用的最多的是C语言,C语言通过Keil内部的编译器,将C语言转换为机器语言,使得我们的微控制器能够识别并执行。相对来说,C语言开发效率较高,比较通用,因此采用C语言进行设计。在程序开头做好相关的准备,不能着急直接开始进行代码的编写。回顾本作品的相关外设,有PWM无极调光模块,OLEDO.96寸SPl型显示屏,TTP223触摸开关模块,DHTll温湿度模块,DS1302RTC模块。根据上述的外设类型,可以进行分类:使用到PWM功能的有PWM无极调光模块,使用到外部中断的有TTP223,PWM无极调光模块,使用到定时器的有DS1302RTC模块,DHTll模块,使用到IIC通信协议的有DHTlI模块,DS1302RTC模块,使用到SPl通信协议的有OLEDO.96寸SPl显示屏,普通IO引脚使用的有LED光源灯珠。如图3-11 1include2 1include3 1include4 1include5 1include6 include7 include8 1include9 1include10 1include<stdint.h> <string.h> <stdio.h> "delay.h" "OLED.h" "uartl.h" "uart.h" nDHTll.H npcf8563.h" "15W4KxxS4.H图3-1头文件定义图此处需要包含所有库文件,不可缺漏,否则会导致相关硬件的代码无法通过编译,从而使得硬件无法正常工作。为了更加方便的编写代码,还需要将数据类型提前定义好,以便后面进行使用,直接使用数据类型更加快捷,也加快了整体程序开发的进展。如图3-2。247.248if(IedpwsBval>300)/PKM值达3。0,熄灭灯249(3(250PWMCR4«0X00;禁止PMM转化251-)252else199 200,201202203 20420520620720820921021121221321421S216217218219220221222223224225226227228229230 A231232233234235236237 -238239 240241242 口2432A245 246 WriteRTC();化新的町髀国马迸PCF8 56 3快决>DHTllValueeTHIEF-O;While(I) (Bbemset (tenp Or 3);Mmser (humdcyr 0, 3);tenp(l - DHTllValue.tenpH;tesp(2 DKTXlVAlue.cenpL; uAldlcyl « DHTllValue.umyH;Hunidity(2 DHT1 1Value.humyL ;获取退受值将温度债转换为字符串delayJnS :ReadRTCO ;DisplAyRTCO;LCD_P8xl6Str(0/0,-DATAINGw);LCD二P8xl6S5<0.2/->:);LCD二 P8x16S= (8"8,2rH-);LCDP8xl6Str(9-8r2r"C");LEJP8x16Str (Gr 4r wHunudity:");LcDP8X16S"(11B-");OLEDeShowChar (88, 0r , + LE0+16);遑堂高位数值暹度低位数境湿支高位数值湿受低位数值读PCF8563时怦值.即读出时、分、秒读出的PCF8S632时间遢度摄氏度cOLtDeShowChAr(9S/OrLCD8(1)÷16);OLED-SowCar(108r0, ,OLED2ShowChar(118rOrOLCD二ShOWCh«(128,0, OLED二ShOWCha1(138,OJOL£D_ShowCh«r(148rOrOLEDSOwCar(158r0rif(teap(2!-0)湿度湿度单位,时间数据显示LED8(2÷16);LED8(3+16);LED8(4÷16);LED3(5÷16);UD()÷16);LED8(7÷16);/M TUifi湿度读取为间断读,当读取到温堂值为。不进行显示.OLED_ShOWC»6«8,2, '+tep 1+1);温度高位数值OLED2ShowCher (78,2, , ,+cen(2)+l<) ;/国度低位数陋OLED2ShowChar (9»8r 4, , *huu<llty 1 16);湿度3E也数值OLED2ShowChas (108, 4, , +huidity(2J+16) ;/湿度低位数值XflKEYl- 1) ( d«lay_ms (5); if (KZYl- 1) (ledpwnvalledpwmval÷ 5;帐填按律按下消料/增大PWM值,调亮灯图3-2时钟与温湿度模块代码图3.1主时钟的定义做系统主时钟的定义,是因为IAP15W4K61S4微控制器集成系统内部可变时钟,根据所需程序的时钟速度进行设置,无需外部外接晶振,大大提高了硬件、软件的开发效率。定义好RTC所需要的全局变量,使得后面OLED0.96寸上128*64的显示设置更加方便,同时此处做好准备便于代码衔接。下一步进行引脚端口的定义声明,为后续按键,LED灯占用相应的微控制器的GPIO口进行准备。接下来是微控制器相关资源的初始化,PWM无极调光模块需要用到内部的PWM资源,需要专门进行指定PWM通道、PWM中断服务进行初始化。进行完PWM相关资源的初始化后,需要声明定义延时函数,以至于关系到后续传感器采集数据,OLED显示屏刷新延时等等相关参数设定。综上程序为主函数程序必备所需的准备工作,接下来为主函数主体详细内容,包含所有传感器外设工作所需内容,独立外设所需的代码将在下一个小结进行详细解释,为了方便,我们将会对这些独立外设所需的代码,另成一个C源文件,便于管理。OLED0.96寸SPI协议单色显示屏针对中景园生产的0.96寸SPI通信协议的OLED显示屏技术手册提供的时序图。如图3-3所示:行同步信号帧同步信号二TjjVV-iTyRMTllNE第I行扫描信号-L第2行扫描信号r第行扫描信号第1列数据第血列数据图3-3n行m列OLED屏扫描原理时序图3.2SPI协议的定义先来解释,SPl是SerialPeriPherallnterfaCe三个英文单词的首字母缩写,用中文来说即为串行通信外部接口,是摩托罗拉公司首次在MC68HC系列处理器定义。如果要用好SPl协议,则需要关注SPl通信时序根据几根关键的线:SDO主设备输出从设备输入(数据输出),SDl主设备输入从设备输出(数据输入),SCLK时钟信号,CS使能信号(片选)。主要工作方式为主从方式工作,此处的主设备为IAP15W4K61S2微控制器,从设备此处为OLED0.96寸SPI协议单色显示屏。从上图可知,行同步信号依次输出,等到信号序列1位置,帧同步信号置高电平,依此类推,每逢行同步信号序列1处,帧同步信号跟着一起置高电平,产生的周期即为TFRm。行扫描信号产生在行同步信号序列1的下降沿位置,整个周期在行同步信号序列1和行同步信号序列2的下降沿区间段,即为TLINE。第二行的扫描信号往下类推,也就是行同步信号序列2的下降沿至行同步信号序列3的下降沿区间段,同样是TlJNE。后面一直到n行扫描信号均是如此。因为SPl通信协议支持同时送数据以及送地址,于是出现了图中第一列数据是跟随着第一行扫描信号同步进行的。此处的数据写入,按照一个字节进行写入,能够根据时序图的运作状态,较好的实现数据写入,为后续显示更多内容做好铺垫。后续需要制定好数据在OLED显示屏内显示的位置,需要做好坐标管理,把相关的代码需要进行整理并且编写入源文件内。后续发现当前的数据内容没有办法按照指定的位置显示,原因出在我们的程序初始化部分内容:需要提前列出页地址,设置好初始的显示位置,再进行指定位置坐标设定,数据写入,地址送入,才能够正确的显示出来。除此之外还需要设置好OLED相关参数,比如说地址,复位信号,还有清除数据,重新指定初始地址等等。因此初始化程序必不可少,否则内部不完整的数据导致后续显示内容不正常,因此需要补齐初始化内容。初始化做好以后,再想进一步显示指定区域的数据内容,找到初始位置的数据后,进行位置平移以及数据处理,再显示在OLED上,显得更加定制化。由于我们要达到最终的要求,我们需要显示出中文内容,不能够纯粹只显示常量内容,还需要增加其他的内容,包括变量,中文说明。于是先从字符开始做起,能够显示出字符,后续想要显示出中文则困难相对小一些,本着一通百通的想法,继续接着为中文显示进行铺垫。查阅了相关的网页信息后,还需要准备中文字库,字库需要有字体类型,字体大小等等相关的源代码才能够显示出中文。后续能够显示出中文汉字,是通过取字模软件生成文字相关参数文件,形成对应的字库源代码,经过程序内的生成代码插入,从而达到中文显示。要想正确的使用DHTll温湿度传感器,首先需要了解DHTll数字温湿度传感器的相关技术文档,发现DHTll温湿度传感器采用的是单总线双向串行通信协议,每次采集都需要主设备IAP15W4K61S2微控制器进行采集信号的发起,然后DHTll会向主设备IAP15W4K61S2微控制器送入传输开始的40bit数据帧进行确认传输,以MSB作为起始端,格式默认为:8bit湿度整型数据,8bit湿度浮点型数据(浮点型数据为0),8bit温度整型数据,8bit温度浮点型数据,8bit校验和数据。如果传送数据正确时,校验和数据为8bit湿度整型数据,8bit湿度浮点型数据,8bit温度整型数据,8bit温度浮点型数据的末八位数据。因此,在源程序编写的时候,可以密切留意此处的校验和数据结果作为数据正确与否。图3-4HDTll时序图根据上述时序图可知:每次IAP15W4K61S2微控制器发起信号采集信号时,DHTIl会从低功耗模式切换到高速模式,一旦数据采集完成,则又会重新恢复到低功耗模式,如此循环采集温湿度信息。在DHTll技术手