STM32學習 LCD的使用

2021-09-25 16:21:54 字數 3135 閱讀 5720

原理:

lcd即液晶顯示器,給液晶施加電場,會改變它的分子排列,從而改變光線傳播方向,配合偏振光片,它就具有控制光線透過率的作用,再配合彩色濾光片,就能改變某一顏色透光量的多少。做出可控紅、綠、藍光輸出強度的顯示結構,組成乙個顯示單位,通過控制紅綠藍的強度,可以使該單位混合輸出不同的色彩,這樣的乙個顯示單位被稱為畫素。(需要背光源)

初始化:

1.初始化各個管腳,開啟背光燈,模擬8080時序

2.記得禁止jtag功能

3.初始化配置

常用指令的使用:

1.開闢乙個視窗(設定x座標和y座標以及它們的高度和寬度)

2.填充畫素(開闢了顯示視窗後,再傳送畫素資料時,這些資料就會直接顯示在它設定的視窗位置中)

/**

* @brief 在ili9341顯示器上開闢乙個視窗

* @param usx :在特定掃瞄方向下視窗的起點x座標

* @param usy :在特定掃瞄方向下視窗的起點y座標

* @param uswidth :視窗的寬度

* @param usheight :視窗的高度

* @retval 無

*/void ili9341_openwindow ( uint16_t usx, uint16_t usy, uint16_t uswidth, uint16_t usheight )

/** * @brief 在ili9341顯示器上以某一顏色填充畫素點

* @param ulamout_point :要填充顏色的畫素點的總數目

* @param uscolor :顏色

* @retval 無

*/static __inline void ili9341_fillcolor ( uint32_t ulamout_point, uint16_t uscolor )

畫直線的演算法:

1.乙個畫素乙個畫素的畫點;

2.取x、y較長的為長度(假設y>x,則迴圈長度為y)

3.若nxn(k為整數)次迴圈中x不自加,其餘都自加

/**

* @brief 在 ili9341 顯示器上使用 bresenham 演算法畫線段

* @param usx1 :在特定掃瞄方向下線段的乙個端點x座標

* @param usy1 :在特定掃瞄方向下線段的乙個端點y座標

* @param usx2 :在特定掃瞄方向下線段的另乙個端點x座標

* @param usy2 :在特定掃瞄方向下線段的另乙個端點y座標

* @note 可使用lcd_setbackcolor、lcd_settextcolor、lcd_setcolors函式設定顏色

* @retval 無

*/void ili9341_drawline ( uint16_t usx1, uint16_t usy1, uint16_t usx2, uint16_t usy2 )

if( ldelta_y >0)

lincrease_y =1;

else

if( ldelta_y ==0)

lincrease_y =0;

//水平線

else

if( ldelta_x > ldelta_y )

ldistance = ldelta_x;

//選取基本增量座標軸

else

ldistance = ldelta_y;

for( us =

0; us <= ldistance +

1; us ++

)//畫線輸出

if( lerror_y > ldistance )

}}

字模的概念以及液晶上字元的顯示:

對於英文編碼,ascii碼便可以;而中文編碼比較麻煩,例程中採用的是gb2312

若想要在液晶上顯示字元,需要引入字模庫(每個字元對應有乙個字模,代表的是規定大小中畫素的排列規則)

由於中文的字模庫很大,需要放入外部儲存裝置,我暫時用了乙個陣列來儲存需要顯示的中文字元,顯示的演算法如下:

#define length_ch				4				

//漢字的個數

#define ch_height 24

#define ch_width 24

//漢字字模陣列

u8 charer_ch[length_ch][72

]=,/*"阿",0*/

,/*"士",1*/

,/*"大",2*/};

/*"夫",3*/

void

draw_char_ch

(uint16_t usx,uint16_t usy,u8 *ptr)

else

}for

(bitcount=

0;bitcount<

8;bitcount++

)else

}for

(bitcount=

0;bitcount<

8;bitcount++

)else}}

}/*@brief 顯示漢字字串

* @param line:顯示的行數

* @param ptr:輸入乙個二維陣列的變數名(一維指標陣列)

* @retval 無

*/void

draw_string_ch

(uint16_t line,u8 (

*ptr)[72

])}

使用步驟

ili9341_gramscan (6)

;lcd_setcolors

(red,black)

;ili9341_clear(0

,0,lcd_x_length,lcd_y_length)

;/* 清屏,顯示全黑 */

draw_string_ch(24

,charer_ch)

;

英文的顯示通過英文本元的ascii碼來實現對字模庫的檢索

reference:

野火教程

STM32學習筆記(五)LCD函式

x,y 起點座標 len 小數點後的位數 size 字型大小,此處省略,預設1608字型 color 顏色,此處僅保留前景色,可自行修改 num 數值 0 4294967295 void lcd shownum u16 x,u16 y,float num,u8 len,u16 color html ...

使用stm32在lcd上隨意顯示漢字

怎樣在lcd彩屏上顯示漢字,我們習慣使用漢字型檔,也有很多自己做乙個漢字型檔,我就習慣這一種。介紹一下 我做的顯示 同乙個世界!同乙個夢想!首先 在網上下乙個提取點陣的的軟體生成自己的字型檔,const struct typfont16 font16lib 漢字的點陣結構體格式為 typedef s...

STM32中LCD顯示少量漢字

以下程式主要針對stm32中庫函式進行操作 在lcd顯示漢字,首先需要對漢字進行取模,我們都知道乙個漢字所占用的空間大小是2b。接下來通過取模軟體對所需要顯示的漢字進行取模 注意有的取模軟體可能存在問題 在這我們要補充乙個知識就是漢字在計算機中儲存形式 輸入碼 漢字的字數繁多,字形複雜,常用的漢字有...