记录一下修改LCD例程显示DHT11温湿度实验的过程
老规矩上链接
链接:https://pan.baidu.com/s/1wIbGhExWudEC0KbKO6zUXQ
提取码:i2j5
IC:stm32f103vet6
硬件:DHT11、1.44寸LCD屏
接线方法:
DH11---stm32
VCC --- 3.3V
GND --- GND
DATA --- PC4
LCD---stm32
VCC --- 5V
GND --- GND
SCL --- PB13
SDA --- PB15
RES --- PB12
DC --- PB10
CS浮空
BL浮空
因为卖家提供的代码函数部分有问题这里就不在下面贴出代码了
需要的自行去百度网盘下载
讲一下修改了什么地方
就是在User下的gui.c里面的函数LCD_ShowChar

1 //****************************************************************** 2 //函数名: LCD_ShowChar 3 //功能: 显示单个英文字符 4 //输入参数:(x,y):字符显示位置起始坐标 5 // fc:前置画笔颜色 6 // bc:背景颜色 7 // num:数值(0-94) 8 // size:字体大小 9 // mode:模式 0,填充模式;1,叠加模式 10 //返回值: 无 11 //修改记录:无 12 //****************************************************************** 13 void LCD_ShowChar(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 size,u8 mode) 14 { 15 u8 temp; 16 u8 pos,t; 17 u16 colortemp=POINT_COLOR; 18 19 num=num-' ';//得到偏移后的值 20 LCD_SetWindows(x,y,x+size/2-1,y+size-1);//设置单个文字显示窗口 21 if(!mode) //非叠加方式 22 { 23 24 for(pos=0;pos<size;pos++) 25 { 26 if(size==12)temp=asc2_1206[num][pos];//调用1206字体 27 else temp=asc2_1608[num][pos]; //调用1608字体 28 for(t=0;t<size/2;t++) 29 { 30 if(temp&0x01)LCD_WR_DATA(fc); 31 else LCD_WR_DATA(bc); 32 temp>>=1; 33 34 } 35 36 } 37 }else//叠加方式 38 { 39 for(pos=0;pos<size;pos++) 40 { 41 if(size==12)temp=asc2_1206[num][pos];//调用1206字体 42 else temp=asc2_1608[num][pos]; //调用1608字体 43 for(t=0;t<size/2;t++) 44 { 45 POINT_COLOR=fc; 46 if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点 47 temp>>=1; 48 } 49 } 50 } 51 POINT_COLOR=colortemp; 52 LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏 53 }
注意这里引入参数的最后一位是0是覆盖模式,1是叠加模式
也就是选0的话在这个地方显示的东西是把之前显示的给覆盖掉
问题就是显示温湿度选0的话不能正常显示数值,显示是一个大约4*4的方块,搞不懂是什么问题,没有时间去深究
选0显示中文的话又可以正常使用,那好吧那就不管那么多选1叠加模式
那么要如何在显示新内容前删除之前显示的内容呢
于是我在LCD_Clear(BLACK)清除屏幕内容的基础上写了一个新函数rwLCD_Clear,放在lcd.c的最下面

1 //自定义的覆盖函数2020-2-8 2 void rwLCD_Clear(u16 x, u16 y, u16 x1, u16 y1, u16 Color) 3 { 4 u16 i,j; 5 LCD_SetWindows(x,y,x1,y1); 6 for(i=0;i<lcddev.width;i++) 7 { 8 for(j=0;j<lcddev.height;j++) 9 LCD_WR_DATA_16Bit(Color); //写入数据 10 } 11 }
解释一下参数的含义
rwLCD_Clear(u16 x, u16 y, u16 x1, u16 y1, u16 Color)
x和y是组合选择出第一个点
x1和y1是组合选择出第二点
将(x,y)和(x1,y1)这两个点做一个长方形,也就是面积从x到x1,y到y1的区域
然后将这个面积里面的颜色换成Color
只要Color选择BLACK也就达到了清除屏幕显示内容的目的
因为这个问题这个工程代码写的也不是挺好,之后有时间再来修改一下,最近在忙一个项目
简单放两张测试的图片来
这是接线没问题,成功从DHT11采集到数据的照片
这个是将dht11的线断开,下面的采集成功会替换成采集失败,如果重新接上dht11就是显示采集成功
今天也是充满希望的一天