记录一下修改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就是显示采集成功
今天也是充满希望的一天