原理:
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。接下來通過取模軟體對所需要顯示的漢字進行取模 注意有的取模軟體可能存在問題 在這我們要補充乙個知識就是漢字在計算機中儲存形式 輸入碼 漢字的字數繁多,字形複雜,常用的漢字有...