記錄一下修改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就是顯示采集成功
今天也是充滿希望的一天