STM32 TFT學習筆記——刷字符

主機環境:Windows 7 SP1

開發環境:MDK5.14

目標板:ST NUCLEO-F303RE

TFT型號:2.4英寸,帶觸摸,SD卡,240*320分辨率,26萬色

驅動IC:ILI9325

ST庫版本:STM32Cube_FW_F3_V1.1.0


刷完圖片之後,很自然就想進行刷字符實驗,該刷字符實驗其實跟刷12864液晶屏字符是一樣的,因爲都是點陣型液晶屏,需要我們把字符轉換成點陣數據,這裏就需要藉助取字模工具了,這個網上有很多,這裏使用的是PCtoLCD2002


這裏需要注意的是取模方式,需要和你的ILI9325驅動相配合,這裏我使用逐行式掃描,高位在前,陰碼格式。如下:


刷字符和刷圖片其實是一樣的,唯一不同的是,對於字符來說在一塊區域中不是每個點都是有值的(即不爲0),因此要想在LCD上顯示該字符需要設置兩種顏色,前景色和背景色,當刷字符時如果當前bit爲1則刷入前景色,當前bit爲0時則刷入背景色,針對字符大小不同就需要設置不同的window area這樣才能顯示正確的字符,上圖中字符點陣是16*16,因此需要調用LCD_SetDisplayWindow(0x0000,0x0000,16,16);來設置當前字符的區域地址以及寬度和高度,刷字符代碼如下

for(i = 0; i < 32; i++)
{
	for(j = 0; j < 8; j++)
	{
		if(abc[i]&0x80)
		{
			ILI9325_Write_Value(LCD_BLACK);
		}
		else
		{
			ILI9325_Write_Value(LCD_WHITE);
		}
		abc[i]<<=1;
	}
	
}
abc即爲用軟件生成的字庫代碼,效果如下:


在完善LCD的過程中發現一個很有用的代碼,原來在F3Cube的庫裏面有一個很好的LCD代碼以及驅動代碼供我們參考,在庫裏面的Drivers文件夾下的BSP目錄裏面,如圖


裏面有個stm32303e_evel_lcd.c/h文件,打開


可以看到左側提供了很多函數,我們完全可以拿來借用,有巨人的肩膀讓我們站,爲啥不佔呢?哈哈,同時在components目錄下有個ili9328驅動文件,如圖


同時庫代碼使用的結構也很好,lcd裏面提供統一的接口由具體的驅動ic代碼來實現各自具體的代碼,很方便對代碼進行擴展,我們只需要編輯對應ili9325代碼即可,大家可以借鑑一哈。本來想借機研究以下FMC驅動LCD的可是看完相應的文檔後發現NUCLEO-F303RE沒有FMC引腳,只有100pin以上的芯片纔有FMC引腳,沒搞頭了。。。FMC的學習推薦大家看官方的AN2790應用筆記——TFT LCD與FSMC的硬件連接 大容量STM32F10xxx FSMC接口,講的就是如用使用FSMC來驅動TFT LCD。

臨了看到刷字符的白色背景色很突兀特別影響美觀,然後就想能不能去掉背景色,如果背景是單一顏色的純色,那我們刷字符時只需要設置字符的背景色爲底部的純色就可以了,如果我們的底部是一副圖片呢,就像之前的圖,字符的背景色白色很不和諧,怎麼實現呢?RGB565是沒有透明度屬性的,而且GRAM的AC是自動控制,因此我們只需要在刷字符背景色時重新計算遊標就可以了,而不是刷入背景色,代碼如下

for(i = 0; i < 32; i++)
{
	for(j = 0; j < 8; j++)
	{
		if(abc[i]&0x80)
		{
			ILI9325_Write_Value(LCD_BLACK);
		}
		else
		{
			//ILI9325_Write_Value(LCD_WHITE);
			//重新計算遊標地址
			LCD_SetCursor(((i%2)*8 + (j + 1))%16,i/2 + ((j+1)/8)*(i%2));
			ILI9325_Write_Address(0x22);
		}
		abc[i]<<=1;
	}
	
}
需要注意的是這個代碼是有問題的,我這裏的起始地址爲(0,0),對於任意地址而言LCD_SetCursor裏面的值是需要重新計算的,跟你的起始地址是有關係的,這裏只是看效果所以沒考慮那麼多,效果圖如下


可以看到左上角的白色背景色沒有了,"中"字就像是在圖片上的水印一樣。然而這並沒有什麼卵用。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章