stm32驅動1.44寸LCD屏顯示溫濕度實驗-將dht11的溫濕度數據在LCD屏幕上顯示


記錄一下修改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就是顯示采集成功

 

今天也是充滿希望的一天

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM