版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 智能测控系统课程大作业作业题目 : 环境温度测量及湿度检测 学院名称 : 电气工程学院 专业班级 : 测控1303班 学生姓名 : 杜栋梁 学 号 : 201323030320 完成时间: 2016-6 任课教师 : 王威 目录1 课程大作业内容21.1 课题设计背景21.2 课题设计的意义31.3 设计目标32 系统设计方案32.1 温湿度传感器选型与论证42.2 显示屏的选择与论证42.2 信号采集电路52.3 供电电源的选择63 硬件设计63.1 结构框图73.2 温度信号采集电路73.2.1传感器简介73.3单片机的最小电路图84 软件设计94.1 程序模块94.2 软件设计流程图1
2、05调试106总结11参考文献11附件12程序12 1 课程大作业内容1.1 课题设计背景随着科技的发展对对检测技术要求的不断增高,迫使新材料的开发及寻找检测能力的不断提升。传感器的种类与测量精度以及测量稳定性也发生了巨大的变化,从最初的接触式测温到非接触式测温,膨胀式、热电阻式以及热电偶式测温,使温度检测领域得到了快速发展。再加上单片机技术的不断发展,测量检测变得更加方便。温湿度传感器除电阻式、电容式湿敏元件之外,还有电解质离子型湿敏元件、重量型湿敏元件(利用感湿膜重量的变化来改变振荡频率)、光强型湿敏元件、声表面波湿敏元件等。湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴
3、露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。在公共工作场所为了达到让人感到舒适的环境温度及湿度,往往需要对温度、湿度进行检测已达到最佳的效果。本课题以ds18b20温度传感器为温度检测器件,设计了一个对单点温度实时检测的单片机温度检测系统。以bsp_dht11湿度传感器为湿度检测器件。1.2 课题设计的意义(1)、该设计具有以下优点:制作简单,便于使用,价格便宜,稳定可靠,功耗低省电。(2)通过设计与制作可以达到这些目的:熟悉MSP430单片机技术的应用范围;掌握MSP430单片机编程的特点,提高实践操作能力能够在制作过程中发现并改正错误。达到一定的解决问题的能力。提高了动手的能
4、力。1.3 设计目标使用ds18b20温度传感器测量环境温度并完成A/D转换。bsp_dht11湿度传感器测量湿度,把数据发送到MSP430中进行转换用LCD进行显示。2 系统设计方案系统设计方案的选择是决定设计作品完整度与精度的重要前提,一个好的作品的完成需要选择比较多种方案,从多种方案中选择最优方案,才能使设计作品精度更高。本次设计主要从实用性,稳定性,精度等级,可靠性,经济性等方面进行考虑。在完成本次课程设计要求、目的的情况下尽可能的准确和经济的条件下进行选择。2.1 温湿度传感器选型与论证本设计采用测量精度高,性能稳定可靠的ds18b20温度传感器作为温度检测器件和bsp_dht11温
5、湿度传感器作为湿度监测器件。尽管bsp_dht11也能够检测出环境温度,但该传感器的测温范围窄,精度不够,和要求测量的环境较为苛刻。因此选用较为精确的ds18b20来测量温度。该传感器具有适应性强检测迅速,受环境影响较小。且对温度可以接触和非接触测量均可。而其他传感器价格和测量条件较为苛刻因此不建议选取。2.2 显示屏的选择与论证方案一:采用LCD1602显示。LCD1602是一种专门用于显示字母、数字、符号等点阵式LCD,能够同时显示16x02即32个字符。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间
6、距和行间距的作用。由于它不能显示汉字,而温度湿度的显示需要显示汉字,所以此方案不可行。方案二:采用LCD5110显示。LCD5110采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,支持多种串行通信协议,传输速率高达4Mbps,可全速写入显示数据,无等待时间。它由84x48的点阵LCD组成,可显示汉字和字符。LCD5110工作电压3.3V,正常显示时工作电流200uA以下,而且接口简单,体积小便于安装携带,速度快,价格便宜。所以采用此方案,显示模块选择用LCD 5110。但屏幕色彩较暗,在光线较强的地方无法清晰的辨别。方案三:采用TFT彩屏显示。TFT-LCD采用低压应用,低驱动电压,
7、固体化使用安全性和可靠性提高;平板化,又轻薄,节省了大量原材料和使用空间;低功耗,它的功耗约为CRT显示器的十分之一,反射式TFT-LCD甚至只有CRT的百分之一左右,节省了大量的能源;高亮度,高对比度,高响应速度。无辐射、无闪烁,对使用者的健康无损害。适用范围宽,从-20到+50的温度范围内都可以正常使用,寿命超过3万小时,且价格便宜因此本次设计采用TFT-LCD作为显示屏。2.2 信号采集电路ds18b20是一种64 位只读存储器储存器件的唯一片序列号。高速暂存器含有两个字节的温度寄存器,这两个寄存器用来存储温度传感器输出的数据。除此之外,高速暂存器提供一个直接的温度报警值寄存器(TH和T
8、L),和一个字节的配置寄存器。配置寄存器允许用户将温度的精度设定为9,10,11 或12 位。TH,TL 和配置寄存器是非易失性的可擦除程序寄存器(EEPROM),所以存储的数据在器件掉电时不会消失。ds18b20通过达拉斯公司独有的单总线协议依靠一个单线端口通讯。当全部器件经由一个3态端口或者漏极开路端口(DQ引脚在ds18b20上的情况下)与总线连接的时候,控制线需要连接一个上拉电阻。在这个总线系统中,微控制器(主器件)依靠每个器件独有的64位片序列号辨认总线上的器件和记录总线上的器件地址。由于每个装置有一个独特的片序列码,总线可以连接的器件数目事实上是无限的。ds18b20的另一个功能是
9、可以在没有外部电源供电的情况下工作。当总线处于高电平状态,DQ与上拉电阻连接通过单总线对器件供电。同时处于高电平状态的总线信号对内部电容(Cpp)充电,在总线处于低电平状态时,该电容提供能量给器件。这种提供能量的形式被称为“寄生电源”。作为替代选择,ds18b20同样可以通过VDD引脚连接外部电源供电。如下图2.1s18b20的工作原理图2.1用户单片机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,并触发一次信采集。信号发送如图所示。数据时序图2.2bsp_dht11时序原理图2.22.3 供电电源的选择本
10、设计采用标准USB数据线5V为该设计供电。3 硬件设计硬件电路的设计是该系统重要的部分,是系统运行的前提,如果硬件设计的科学合理就能大大增加该系统功能的稳定性,可靠性。系统软件的设计是以硬件设计为前提,硬件设计是单片机高效工作的前提与重要保障,但是只有软件和硬件都正确,并且软件与硬件能够相互兼容、协调工作才能使系统工作达到我们想要的效果。本系统的硬件设计部分主要包括传感器电桥电路设计、运算放大电路的设计、单片机最小系统设计下面进行详细介绍。3.1 结构框图 本设计采用均采用3.3V电源供电,温度传感器和温湿度传感器采集到数据后发送到单片机,单片机根据接收到的数据进行处理后再LCD屏幕上显示。如
11、图3.1位系统结构框图。图3.1 系统结构框图3.2 温度信号采集电路温度信号的获取关系到后续电路设计的难度,因此温度信号是获取是本设计的关键。3.2.1传感器简介ds18b20的简介:独特的单线接口仅需一个端口引脚进行通讯每个器件有唯一的64 位的序列号存储在内部存储器中简单的多点分布式测温应用无需外部器件可通过数据线供电。供电范围为3.0V到5.5V测温范围为-55125(67257)在1085范围内精确度为±5温度计分辨率可以被使用者选择为912位最多在750ms 内将温度转换为12 位数字用户可定义的非易失性温度报警设置报警搜索命令识别并标志超过程序限定温度(温度报警条件)的
12、器件与ds1822兼容的软件应用包括温度控制、工业系统、消费品、温度计或任何热感测系统bsp_dht11的简介:DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据 +8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。实际使用时发现小数位都是
13、0,这一步忽略对结果也不造成影响。3.3单片机的最小电路图MSP430g2553简介:MSP430G2553性能参数(DIP-20) 工作电压范围:1.83.6V。5种低功耗模式。16位的RISC结构,62.5ns指令周期。超低功耗运行模式-230µA;待机模式-0.5µA;关闭模式-0.1µA;可以在不到1µs的时间里超快速地从待机模式唤醒。基本时钟模块配置:具有四种校准频率并高达16MHz的内部频率;内部超低功耗LF振荡器;32.768KHz晶体;外部数字时钟源。两个16 位Timer_A,分别具有三个捕获比较寄存器。用于模拟信号比较功能或者斜率模数
14、(A/D)转换的片载比较器。带内部基准、采样与保持以及自动扫描功能的10位200-ksps 模数(A/D)转换器。16KB闪存,512B的RAM。16个I/O口。这里给出了本次实验的最小电路图3.1最小电路图3.14 软件设计4.1 程序模块本装置主要用到MSP430g2553单片机的IO功能程序设计中主要包括:1. 单片机对温度传感器的数据接收模块。2. 单片机对温湿度传感器的数据接收模块。3. 对LCD屏的显示模块。4.2 软件设计流程图图4.1软件流程图5调试本次设计最主要的工作之一就是对系统的调试部分,因为一个测量显示软件的主要功能就是显示正确的结果。开始显示的数据会因为采集的不准确和
15、其他方面的误差导致接收到的数据不能正确表示想要的得到的数据,也可能会因为采集过程出现频繁的错误等问题。因此调试的工作极其重要,在温度传感器的采集过程中经过和标准的温度值的校准,测出了误差的范围和误差的大致规律最后在现实过程中消除了这种误差让温度测量更加准确稳定。在湿度传感器的调试过程中的工作更是复杂,湿度传感器可以返回温度和湿度值,但经过检测返回的温度值与实际的温度值偏差较大,而湿度的计算方法是在该温度条件下的空气中水含量的多少,这就使得测得的温度不准导致湿度不准确,最后查阅资料找到了湿度的测量计算方法。将返回的湿度值加权后再显示出来。这些工作很复杂湿度传感器的工作要求的时序很高就导致在时序配
16、置上要花很大功夫一点不对就不能返回正确的结果屡屡出错。总之调试工作发杂多变。6总结本次设计的东西看起来很简单,好像没有什么技术含量。但当实际操作时想要完美的运行却遇到了重重的困难。因为MSP430是开始接触的单片机,之前也一直没有做过关于它的太多试验。修改驱动显示屏程序也花费了很长时间才将原来51单片机的程序移植过来,结果刷屏与显示与想要显示的位置不符,后来请教同学计算了LCD的显示位置才更改过来。接下来的湿度调试,因为开始找不到bsp_dht11温湿度传感器的原理图就在网上找了关于它的程序结果发现不能用不管怎么更改总是无法返回正确的数值,最后终于找到了关于该传感器的详细资料。发现该传感器的工
17、作要求对时序的要求特别严格,最后精确计算了延时时间并且进行了延时时间的修改才能返回结果。但得到的湿度值与正常的湿度值存在较大的偏差,但没有标准湿度值可以进行比较于是选取了天气预报软件上面公布的湿度值进行校准。 因为这次作业选用的是模块化的传感器且传感器对电压的要求不太严格3.0V5.0V均可以,为了降低设计设计的复杂度就选取了给单片机供电的3.3V电压作为传感器和显示屏的供电电压。本次对单片机的实际制作成东西才感到动手的重要性,和一些看起来简单的东西也许不那么简单。在以后的学习中要增加动手的能力。参考文献1 杨家成单片机原理与应用及C51程序设计北京:清华大学出版社,20072 夏路易 石宗义
18、Protel 99se电路原理图与电路板设计教程北京:北京希望电子出版社,20043 李林功单片机原理与应用基于实例驱动和Proteus仿真北京:科学出版社,20114 皮大能等. 单片机课程设计指导书. 北京:北京理工大学出版社,20105 MSP430单片机C语言应用程序设计实例精讲 电子工业出版社 2006.05附件程序主程序#include <msp430g2553.h>#include "font.h"#include "sys.h"#include "lcd.h"#include "ds18b20.h
19、"#include "dht11.h"void CLK_Init(void) /时钟配置 if (CALBC1_16MHZ =0xFF | CALDCO_16MHZ = 0xFF) while(1); / If calibration constants erased / do not load, trap CPU! DCOCTL=0; BCSCTL1 = CALBC1_16MHZ; / Set range DCOCTL = CALDCO_16MHZ; / Set DCO step + modulation */ BCSCTL2 |= 0X06; /SMCLK为D
20、CO的8分频,2Mvoid showjiemian() /界面显示LCD_Fill(0,0,128,40,WHITE);/在指定区域填充颜色showhanzi(0,4,0);showhanzi(32,4,1);showhanzi(64,4,2);showhanzi(96,4,3);/环境监测LCD_ShowString(100,68,"%");/%:showhanzi1(14,42,0,RED,YELLOW);showhanzi1(34,42,1,RED,YELLOW);/温度showhanzi1(100,42,2,BLUE,YELLOW);/showhanzi1(14,6
21、8,3,RED,YELLOW);showhanzi1(34,68,4,RED,YELLOW);/湿 度LCD_ShowString(56,42,""); /温度显示LCD_ShowChar(72,42,'.',0);LCD_ShowString(70,68,""); /湿度显示int main(void) WDTCTL = WDTPW | WDTHOLD;/ Stop watchdog timer unsigned int temp=0,temp1,temp2,temp3; /ucharRH_data_H = 0; P2DIR |= 0x
22、1f;/设置P2为输出方式输出方式 P2OUT |= 0X1f; BACK_COLOR=YELLOW; POINT_COLOR=BLUE; /背景色,画笔色 CLK_Init(); Lcd_Init(); LCD_Clear(YELLOW); DHT11_IO_Init(); showjiemian(); while(1) temp=Read_Temp(); temp1=temp/100; temp2=temp%100/10; temp3=temp%10;LCD_ShowNum(56,42,temp1,2);/显示数字LCD_ShowNum(80,42,temp2,1);/显示数字LCD_Sh
23、owNum(88,42,temp3,1);/显示数字DHT11();LCD_ShowNum(88,68, ucharRH_data_H,3);delay_ms(1000);温度采集#include <msp430g2553.h>#include "ds18b20.h"#include "sys.h"void DS18B20_Init(void) /DS18B20初始化函数 DQ_OUT; DQ_L; /拉低总线 delay_us(480); /精确延时 大于 480us DQ_H; /释放总线 delay_us(48); DQ_IN; DQ_
24、OUT; DQ_H; delay_us(360);void DS18B20_WriteData(u8 dat)/写一个字节 u8 i; for(i=0;i<8;i+)/位计数值 DQ_L; /拉低总线产生写信号 delay_us(5); if(dat&0x01) DQ_H;/此位数据是否为高,是高则将单总线拉高 else DQ_L;/是低则将单总线拉低 dat>>=1; /准备下一位数据的传送 delay_us(50); DQ_H; /释放总线,等待总线恢复 delay_us(8); u8 DS18B20_ReadData(void) /读一个字节u8 i;u8 da
25、t=0;for(i=0;i<8;i+)/位计数值dat>>=1;/右移,准备接受新的数据位DQ_L; /拉低总线产生读信号delay_us(5);DQ_H; /释放总线准备读数据delay_us(5);/等待5微秒DQ_IN;/配置为输入,开始读取数据位_NOP();if(READ_DQ)/该位是否为高dat|=0x80;/是就将此位置高delay_us(50);/等待50微秒DQ_OUT;DQ_H;delay_us(5);return(dat);/将读到的一个字节返回u16 Read_Temp(void) /读取温度u16 temp_low,temp_high,d;floa
26、t c;DS18B20_Init();/初始化,每次写命令都从初始化开始DS18B20_WriteData(0xcc); /跳过ROM命令DS18B20_WriteData(0x44); /温度转换命令DS18B20_Init();/初始化,每次写命令都从初始化开始DS18B20_WriteData(0xcc); /跳过ROM命令DS18B20_WriteData(0xbe); /temp_low=DS18B20_ReadData();/读温度低字节temp_high=DS18B20_ReadData();/读温度高字节temp_high<<=8;d=temp_high|temp_
27、low;c=d*0.0625;d=(u16)(c*100);return(d); /返回16位变量湿度采集#include"dht11.h"#include "sys.h"#include <msp430g2553.h>unsigned int uchartemp;unsigned char ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,ucharcheckdata;unsigned char ucharT_data_H_temp,ucharT_data_L_temp,uc
28、harRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;void DHT11_IO_Init() P1SEL &= BIT0;void COM(void)unsigned char i; unsigned char ucharFLAG; uchartemp=0; P1DIR &= BIT0; for(i=0;i<8;i+) ucharFLAG=2; while(!(P1IN&0x01)&&ucharFLAG+); delay_us(30); uchartemp=uchartemp<&
29、lt;1; if(P1IN&0x01) uchartemp |= 1; ucharFLAG=1; while(P1IN&0x01)&&ucharFLAG+); void DHT11(void) unsigned char ucharFLAG; P1DIR |= BIT0;/设置P1.0为输出口 DATA_L; delay_ms(20); />18MS DATA_H; delay_us(30); P1DIR &= BIT0; if(!(P1IN&0x01) ucharFLAG=1; while(!(P1IN&0x01)&&am
30、p;ucharFLAG+); ucharFLAG=1; while(P1IN&0x01)&&ucharFLAG+); COM(); ucharRH_data_H_temp=uchartemp; COM(); ucharRH_data_L_temp=uchartemp; COM(); ucharT_data_H_temp=uchartemp; COM(); ucharT_data_L_temp=uchartemp; COM(); ucharcheckdata_temp=uchartemp; uchartemp=(ucharT_data_H_temp+ucharT_data
31、_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp); if(uchartemp=ucharcheckdata_temp) ucharRH_data_H=ucharRH_data_H_temp; ucharRH_data_L=ucharRH_data_L_temp; ucharT_data_H=ucharT_data_H_temp; ucharT_data_L=ucharT_data_L_temp; ucharcheckdata=ucharcheckdata_temp; else ucharRH_data_H=12; ucharT_data_H=23
32、; /P2DIR |= BIT0;显示#include <msp430g2553.h>#include "font.h"#include "sys.h"#include "lcd.h"u16 BACK_COLOR, POINT_COLOR; /背景色,画笔色 void LCD_Writ_Bus(char da) /串行数据写入u8 i;for(i=0; i<8; i+)if(da & 0x80)SDA_H;elseSDA_L;SCK_L;da <<= 1;SCK_H; void LCD_WR_DA
33、TA8(char da) /发送数据-8位参数 AO_H;LCD_Writ_Bus(da); void LCD_WR_DATA(int da) AO_H;LCD_Writ_Bus(da>>8);LCD_Writ_Bus(da); void LCD_WR_REG(char da) AO_L;LCD_Writ_Bus(da); void LCD_WR_REG_DATA(int reg,int da) LCD_WR_REG(reg);LCD_WR_DATA(da);void Address_set(unsigned int x1,unsigned int y1,unsigned int
34、x2,unsigned int y2) LCD_WR_REG(0x2a); LCD_WR_DATA8(x1>>8); LCD_WR_DATA8(x1); LCD_WR_DATA8(x2>>8); LCD_WR_DATA8(x2); LCD_WR_REG(0x2b); LCD_WR_DATA8(y1>>8); LCD_WR_DATA8(y1+32); LCD_WR_DATA8(y2>>8); LCD_WR_DATA8(y2+32); LCD_WR_REG(0x2C);void Lcd_Init(void)/调用一次这些函数,免得编译的时候提示警告
35、CS_H;/*if(LCD_CS=0) LCD_WR_REG_DATA(0,0); LCD_ShowString(0,0," "); LCD_ShowNum(0,0,0,0); LCD_Show2Num(0,0,0,0); LCD_DrawPoint_big(0,0); LCD_DrawRectangle(0,0,0,0); Draw_Circle(0,0,0); */ REST_H; delayms(5);REST_L;delayms(5);REST_H;CS_H;delayms(5);CS_L; /打开片选使能LCD_WR_REG(0x11); /Sleep outde
36、layms(120); /Delay 120ms/-ST7735S Frame Rate-/LCD_WR_REG(0xB1);LCD_WR_DATA8(0x05);LCD_WR_REG(0x11);/Sleep exit delayms (120); /ST7735R Frame RateLCD_WR_REG(0xB1); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D); LCD_WR_REG(0xB2); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D);
37、 LCD_WR_REG(0xB3); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D); LCD_WR_REG(0xB4); /Column inversion LCD_WR_DATA8(0x07); /ST7735R Power SequenceLCD_WR_REG(0xC0); LCD_WR_DATA8(0xA2); LCD_WR_DATA8(0x02); LCD_WR_DATA8(0x84); LCD_
38、WR_REG(0xC1); LCD_WR_DATA8(0xC5); LCD_WR_REG(0xC2); LCD_WR_DATA8(0x0A); LCD_WR_DATA8(0x00); LCD_WR_REG(0xC3); LCD_WR_DATA8(0x8A); LCD_WR_DATA8(0x2A); LCD_WR_REG(0xC4); LCD_WR_DATA8(0x8A); LCD_WR_DATA8(0xEE); LCD_WR_REG(0xC5); /VCOM LCD_WR_DATA8(0x0E); LCD_WR_REG(0x36); /MX, MY, RGB mode LCD_WR_DATA8
39、(0xC8); /ST7735R Gamma SequenceLCD_WR_REG(0xe0); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x1a); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x18); LCD_WR_DATA8(0x2f); LCD_WR_DATA8(0x28); LCD_WR_DATA8(0x20); LCD_WR_DATA8(0x22); LCD_WR_DATA8(0x1f); LCD_WR_DATA8(0x1b); LCD_WR_DATA8(0x23); LCD_WR_DATA8(0x37); LCD_WR_DATA
40、8(0x00); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x02); LCD_WR_DATA8(0x10); LCD_WR_REG(0xe1); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x1b); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x17); LCD_WR_DATA8(0x33); LCD_WR_DATA8(0x2c); LCD_WR_DATA8(0x29); LCD_WR_DATA8(0x2e); LCD_WR_DATA8(0x30); LCD_WR_DATA8(0x30); LCD_WR_DATA8(
41、0x39); LCD_WR_DATA8(0x3f); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0x10); LCD_WR_REG(0x2a);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x7f);LCD_WR_REG(0x2b);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x7f);LCD_WR_
42、REG(0xF0); /Enable test command LCD_WR_DATA8(0x01); LCD_WR_REG(0xF6); /Disable ram power save mode LCD_WR_DATA8(0x00); LCD_WR_REG(0x3A); /65k mode LCD_WR_DATA8(0x05); LCD_WR_REG(0x29); /Display on LCD_WR_REG(0x2C);/清屏函数/Color:要清屏的填充色void LCD_Clear(u16 Color)u8 VH,VL;u16 i,j;VH=Color>>8;VL=Colo
43、r;Address_set(0,0,LCD_W-1,160); for(i=0;i<LCD_W;i+) for (j=0;j<LCD_H;j+) LCD_WR_DATA8(VH); LCD_WR_DATA8(VL); /在指定位置显示一个汉字(32*33大小)/dcolor为内容颜色,gbcolor为背静颜色void showhanzi(unsigned int x,unsigned int y,unsigned char index) unsigned char i,j;const unsigned char *temp=hanzi; Address_set(x,y,x+31,y
44、+31); /设置区域 temp+=index*128;for(j=0;j<128;j+)for(i=0;i<8;i+) if(*temp&(1<<i)!=0)LCD_WR_DATA(POINT_COLOR); elseLCD_WR_DATA(BACK_COLOR); temp+; /在指定位置显示一个汉字(16*16大小)/dcolor为内容颜色,gbcolor为背静颜色void showhanzi1(unsigned int x,unsigned int y,unsigned char index,u16 p_color,u16 b_color)unsign
45、ed char i,j;const unsigned char *temp=hanzi1;BACK_COLOR = b_color;POINT_COLOR = p_color; Address_set(x,y,x+15,y+15); /设置区域temp+=index*32;for(j=0;j<32;j+)for(i=0;i<8;i+) if(*temp&(1<<i)!=0)LCD_WR_DATA(POINT_COLOR);elseLCD_WR_DATA(BACK_COLOR);temp+; /画点/POINT_COLOR:此点的颜色void LCD_DrawPo
46、int(u16 x,u16 y)Address_set(x,y,x,y);/设置光标位置 LCD_WR_DATA(POINT_COLOR); /画一个大点/POINT_COLOR:此点的颜色void LCD_DrawPoint_big(u16 x,u16 y)LCD_Fill(x-4,y-4,x+4,y+4,POINT_COLOR); /在指定区域内填充指定颜色/区域大小:/ (xend-xsta)*(yend-ysta)void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color) u16 i,j; Address_set(xsta,
47、ysta,xend,yend); /设置光标位置 for(i=ysta;i<=yend;i+) for(j=xsta;j<=xend;j+)LCD_WR_DATA(color);/设置光标位置 /画线/x1,y1:起点坐标/x2,y2:终点坐标 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)u16 t; int xerr=0,yerr=0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_x=x2-x1; /计算坐标增量 delta_y=y2-y1; uRow=x1;
48、 uCol=y1; if(delta_x>0)incx=1; /设置单步方向 else if(delta_x=0)incx=0;/垂直线 else incx=-1;delta_x=-delta_x; if(delta_y>0)incy=1; else if(delta_y=0)incy=0;/水平线 elseincy=-1;delta_y=-delta_y; if( delta_x>delta_y)distance=delta_x; /选取基本增量坐标轴 else distance=delta_y; for(t=0;t<=distance+1;t+ )/画线输出 LCD
49、_DrawPoint(uRow,uCol);/画点 xerr+=delta_x ; yerr+=delta_y ; if(xerr>distance) xerr-=distance; uRow+=incx; if(yerr>distance) yerr-=distance; uCol+=incy; /画矩形void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)LCD_DrawLine(x1,y1,x2,y1);LCD_DrawLine(x1,y1,x1,y2);LCD_DrawLine(x1,y2,x2,y2);LCD_DrawLine(x2,y1,x2,y2);/在指定位置画一个指定大小的圆/(x,y):中心点/r :半径void Draw_Circle(u16 x0,u16 y0,u8 r)int a,b;int di;a=0;b=r; di=3-(r<<1); /判断下个点位置的标志while(a<=b)LCD_DrawPoint(x0-b,y0-a); /3 LCD_DrawPoint(x0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026重庆市血液中心非在编采血护士招聘1人模拟试卷含答案详解(基础题)
- 2026年安徽农业大学茶业学院管理助理招聘考前冲刺密卷及参考答案详解(黄金题型)
- 2026年河南省事业单位招聘联考开封市龙亭区考察笔试题库附参考答案详解(典型题)
- 2026四川大学校聘非事业编制岗位招聘14人笔试题库附完整答案详解(名师系列)
- 2026河北石家庄市艺术学校招聘兼职教师16人笔试题库附参考答案详解【典型题】
- 中地国际工程有限公司2027届土建技术员(海外岗)招聘10人模拟试卷及参考答案详解【培优A卷】
- 2026云南楚雄州永仁县教育系统选调校医1人笔试题库【原创题】附答案详解
- 中地国际工程有限公司2027届土建技术员(海外岗)招聘10人笔试题库【名师系列】附答案详解
- 2026江西南昌安义县工投商业管理有限公司第二批招聘工作人员1人模拟试卷【综合卷】附答案详解
- 2026(第四期)广东顺德人资企业管理有限公司招聘14人笔试题库附参考答案详解(精练)
- 2025年茂名港集团有限公司招聘笔试真题
- 2026安徽师范大学专职辅导员招聘3人(第二批)笔试参考题库及答案详解
- 2026年车险查勘定损人员上岗考核试卷及答案
- 成都教科附属2026初一入学语文分班考试真题含答案
- 2026书记员面试题目及答案
- 2026-2027北师大版七(上)数学第一章 丰富的图形世界 单元测试卷
- 2026中煤华利新疆炭素科技有限公司招聘16人笔试历年典型考点题库附带答案详解
- 中国骨科大手术vte预防指南(2025版)
- 肺癌病人营养支持护理
- 2026年江苏省安全员C1证(机械类)考试真题(含答案解析)
- 2026中医养生精益化管理课件
评论
0/150
提交评论