国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【單片機(jī)】19-TFT彩屏

這篇具有很好參考價(jià)值的文章主要介紹了【單片機(jī)】19-TFT彩屏。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

一、背景知識(shí)--顯示器

1.什么是TFT

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

(1)LCD顯示器的構(gòu)成:液晶面板+驅(qū)動(dòng)器【電壓驅(qū)動(dòng)】+控制器【邏輯控制】

(2)液晶面板大致分為:TN,TFT,IPS等

(3)驅(qū)動(dòng)器是跟隨面板的【帶動(dòng)液晶分子運(yùn)動(dòng)】,和面板更相關(guān),跟編程無(wú)關(guān)

(4)控制器的邏輯部分,和編程嚴(yán)重相關(guān)

2.LCD和LCM

(1)LCM就是LCD module(LCD模組),就是液晶面板+驅(qū)動(dòng)器(+控制器)的一套硬件模板

(2)LCD俠義僅僅指液晶面板,廣義指LCM

(3)商業(yè)組成:面板廠家,驅(qū)動(dòng)器廠家1,控制器IC廠家,LCM廠家,SoC廠家

3.LCD控制器

(1)顯示器編程時(shí)控制器是關(guān)鍵,至少80%精力在研究控制器手冊(cè)上

(2)有些LCM自帶控制器【自帶顯存】,控制器提供解開(kāi)和外部SoC對(duì)接(I80接口或者RGB接口或其他接口)

(3)有些LCM本身不帶控制器,需要外部SoC或者GPU【顯卡】來(lái)提供控制器(和顯存)

一般是小屏幕(2.4存或者更?。┙o單片機(jī)用的,顯示內(nèi)容簡(jiǎn)單,刷新率低都是自帶控制器的;---》自帶控制器

而大屏幕的(比如4.3寸,7寸或者更大)給嵌入式設(shè)備使用,顯示內(nèi)容復(fù)雜,刷新率高的都是不帶控制器的,需要外部來(lái)提供控制器驅(qū)動(dòng)信號(hào)。--》不帶控制器

二、背景知識(shí)---顏色

1.顏色基礎(chǔ)知識(shí)

(1)自然界的顏色有無(wú)限種

(2)計(jì)算機(jī)中只能顯示出有限種,所以有6萬(wàn)色【65536】,24位色(真彩色),黑白,1位色等多種圖像

(3)人眼是并不精確的顏色識(shí)別設(shè)備,分辨率不高,還要視覺(jué)暫留

(4)所有顏色可以由RGB三原色疊加組成【256*256*256】

(5)圖像簡(jiǎn)單分為2種:黑白圖像又稱為灰度圖,彩色圖像

2.計(jì)算機(jī)中顏色的表示方法

(1)計(jì)算機(jī)中顏色顯示的單位是像素

(2)每一個(gè)像素由1/4/8/16/24【RGB】/32等個(gè)二進(jìn)制位來(lái)表示【24位:RGB,32位:ARGB--》A:表示透明度】

(3)常用:LCD1602/12864【1位色】,RGB565【16位--》6萬(wàn)色】,RGB888【24位--》真彩色】

3.LCD顯示器編程的一般規(guī)律

(1)低層硬件接好

(2)LCD控制器一通初始化

(3)顯存(framebuffer,GRAM【圖像RAM】)是關(guān)鍵,編程的核心就是如何正確填充顯存

(4)顯存由LCM或者SoC一側(cè)提供

三、本章的學(xué)習(xí)方式

1.搞清楚自己的LCD是什么類型的

本次使用的是ILI9325D

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2.對(duì)比參照著看資料

1.原理圖

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2.LCD數(shù)據(jù)手冊(cè)

ILI9325 pdf, ILI9325 Description, ILI9325 Datasheet, ILI9325 view ::: ALLDATASHEET :::

3.學(xué)會(huì)抓和放

(1)抓低層時(shí)序

(2)抓顯存操作

(3)抓數(shù)據(jù)手冊(cè)解讀

(4)抓顯存填充函數(shù)編寫(xiě)與調(diào)試

(5)放控制器初始化序列

四、控制器數(shù)據(jù)手冊(cè)【HX8347-D】

ILI9325 pdf, ILI9325 Description, ILI9325 Datasheet, ILI9325 view ::: ALLDATASHEET :::

HX8347-D datasheet

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

1.基本信息

1)RGB565模式:65,536(R(5),G(6),B(5))colors

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2)接口: i80 system interface with 16-bit bus w【使用16bit的接口】

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

3)內(nèi)部的bit:240*320*18bit=1382400bit【按照顯示18位最大位來(lái)計(jì)算】

? ? ? ? 實(shí)際用了240*320*16bit

2.引腳定義

1.IM:接線類型:16bit

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2.NCS(chip select):片選--引腳電平【負(fù)邏輯】

負(fù)邏輯的CS【0表示選中,1表示未選中】

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

3.NWR/SCL:寫(xiě)入數(shù)據(jù)【選中數(shù)據(jù)傳輸方式】

NWR:并行傳輸

SCL:串行傳輸

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

4.NRD:讀取數(shù)據(jù)

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

5.nRESET:軟件復(fù)位

初始化時(shí)候給ILI9325一個(gè)低電平

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

6.SDA:數(shù)據(jù)傳輸線

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

7.DNC_SCL:選擇傳輸數(shù)據(jù)/命令

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

DNC:表示傳輸命令/數(shù)據(jù)

SCL:時(shí)鐘周期

8.DB17-0:傳輸數(shù)據(jù)線

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

9.RCM1, RCM0

0x:x表示1或者0都可以

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

3.System interface circuit

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

4.Parallel bus system interface

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

5.定義引腳

如果我們不知道對(duì)應(yīng)的線應(yīng)該對(duì)應(yīng)原理圖的那一條,則對(duì)應(yīng)相關(guān)代碼去找

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

NCS【復(fù)位】--》原理圖:LCD_EN--》CS【0表示未選中,1表示選中】

DNC_SCL【選擇DNC還是SCL】:原理圖:LCD_RS【1表示傳輸cmd,0表示傳輸數(shù)據(jù)】

NRD_E【可讀接口】:原理圖:LCD_CS1

NWR_RNW【可寫(xiě)接口】:原理圖LCD_WR

DB7-0:數(shù)據(jù)傳輸

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

//TFTLCD彩屏數(shù)據(jù)控制端口定義
#define TFT_DATAPORTH P1
#define TFT_DATAPORTL P0

sbit	TFT_CS  = P2^7;//LCD_EN----NCS
sbit	TFT_RST = P3^3;//SD-CS
sbit	TFT_RS  = P2^6;//LCD_RS
sbit	TFT_WR  = P2^5;//LCD_WR
sbit	TFT_RD  = P3^2;//DI

6.Write to the register:寫(xiě)命令

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

void TFT_WriteRegister(unsigned char cmd){
    TFT_CS=0;//原來(lái)狀態(tài)為0
    
    TFT_RD=1;//因?yàn)榇藭r(shí)是寫(xiě)寄存器,所以讀用不上
    TFT_RS=0;//表示此時(shí)讀取的是命令(cmd)
    
    TFT_DATAPORTH=cmd>>8;//高8位
    TFT_DATAPORTL=cmd;//低八位
    
    TFT_WR=0;//準(zhǔn)備讀取數(shù)據(jù)
    TFT_WR=1;//讀取結(jié)束

    TFT_CS=1;//記得讀完后將CS拉高
}

7.Write to the graphic RAM:寫(xiě)數(shù)據(jù)

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

void TFT_WriteRegister(unsigned char dat){
    TFT_CS=0;//原來(lái)狀態(tài)為0
    
    TFT_RD=1;//因?yàn)榇藭r(shí)是寫(xiě)寄存器,所以讀用不上
    TFT_RS=1;//表示此時(shí)讀取的是數(shù)據(jù)
    
    TFT_DATAPORTH=dat>>8;//高8位
    TFT_DATAPORTL=dat;//低八位
    
    TFT_WR=0;//準(zhǔn)備讀取數(shù)據(jù)
    TFT_WR=1;//讀取結(jié)束

    TFT_CS=1;//記得讀完后將CS拉高
}

8.將寫(xiě)命令和寫(xiě)數(shù)據(jù)函數(shù)合并

void TFT_WriteReg(unsigned int reg,unsigned int dat){
    TFT_CS=0;//原來(lái)狀態(tài)為0
    
    //寫(xiě)寄存器地址到IR
    TFT_RD=1;//因?yàn)榇藭r(shí)是寫(xiě)寄存器,所以讀用不上
    TFT_RS=0;//表示此時(shí)讀取的是命令(cmd)
    
    TFT_DATAPORTH=reg>>8;//高8位
    TFT_DATAPORTL=reg;//低八位
    
    TFT_WR=0;//準(zhǔn)備讀取數(shù)據(jù)
    TFT_WR=1;//讀取結(jié)束

    //寫(xiě)寄存器值到該寄存器地址
    TFT_RD=1;//因?yàn)榇藭r(shí)是寫(xiě)寄存器,所以讀用不上
    TFT_RS=1;//表示此時(shí)讀取的是數(shù)據(jù)
    
    TFT_DATAPORTH=dat>>8;//高8位
    TFT_DATAPORTL=dat;//低八位
    
    TFT_WR=0;//準(zhǔn)備讀取數(shù)據(jù)
    TFT_WR=1;//讀取結(jié)束

    TFT_CS=1;//記得讀完后將CS拉高


}

9.顏色數(shù)據(jù)的編碼

我們采用16bit

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

set_TFT_8B_REG(0x17,0x05);

10.Display Data GRAM;顯存

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

1.地址計(jì)數(shù)器

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2.顯示模式

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

11.Command set:命令集

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

五、應(yīng)用層代碼分析和移植

1.寫(xiě)指令

//寫(xiě)命令
void TFT_WriteCmd(unsigned int cmd)
{
	 TFT_CS=0;

	 TFT_RD=1;
	 TFT_RS=0;
	 
 	 TFT_DATAPORTH=cmd>>8;			// 高8位
	 TFT_DATAPORTL=cmd;				// 低8位

	 TFT_WR=0;
	 TFT_WR=1;

	 TFT_CS=1; 
}
//寫(xiě)數(shù)據(jù)
void TFT_WriteData(unsigned int dat)
{
	 TFT_CS=0;

	 TFT_RD=1;
	 TFT_RS=1;	 

	 TFT_DATAPORTH=dat>>8;	 	// 數(shù)據(jù)高8位
	 TFT_DATAPORTL=dat;		   	// 數(shù)據(jù)低8位

	 TFT_WR=0;;
	 TFT_WR=1;

	 TFT_CS=1;
}

2.初始化

// LCD模組的初始化時(shí)序--官方代碼
void TFT_Init(void)
{
	TFT_RST = 1;
	Delay(100);
	TFT_RST = 0;
	Delay(800);
	TFT_RST = 1;
	Delay(800);
	
	 TFT_CS = 0;
	 //************* Start Initial Sequence **********//
  	 TFT_WriteCmd(0x002e);TFT_WriteData(0x0079); 
	 TFT_WriteCmd(0x00ee);TFT_WriteData(0x000c);  
	 //Driving ability Setting 
	 TFT_WriteCmd(0x00ea);TFT_WriteData(0x0000);  
	 TFT_WriteCmd(0x00eb);TFT_WriteData(0x0020);  
	 TFT_WriteCmd(0x00ec);TFT_WriteData(0x0008);  
	 TFT_WriteCmd(0x00ed);TFT_WriteData(0x00c4);  
	 TFT_WriteCmd(0x00e8);TFT_WriteData(0x0040);  
	 TFT_WriteCmd(0x00e9);TFT_WriteData(0x0038);  
	 TFT_WriteCmd(0x00f1);TFT_WriteData(0x0001);  
	 TFT_WriteCmd(0x00f2);TFT_WriteData(0x0010);
	 TFT_WriteCmd(0x0027);TFT_WriteData(0x00a3);
	 //Gamma 2.2 Setting  
	 TFT_WriteCmd(0x0040);TFT_WriteData(0x0001); 
	 TFT_WriteCmd(0x0041);TFT_WriteData(0x0007);  
	 TFT_WriteCmd(0x0042);TFT_WriteData(0x0007);  
	 TFT_WriteCmd(0x0043);TFT_WriteData(0x0013);  
	 TFT_WriteCmd(0x0044);TFT_WriteData(0x0011);  
	 TFT_WriteCmd(0x0045);TFT_WriteData(0x0024);  
	 TFT_WriteCmd(0x0046);TFT_WriteData(0x0010);  
	 TFT_WriteCmd(0x0047);TFT_WriteData(0x0057);  
	 TFT_WriteCmd(0x0048);TFT_WriteData(0x0009);  
	 TFT_WriteCmd(0x0049);TFT_WriteData(0x0014);
	 TFT_WriteCmd(0x004a);TFT_WriteData(0x0019);  
	 TFT_WriteCmd(0x004b);TFT_WriteData(0x0019);  
	 TFT_WriteCmd(0x004c);TFT_WriteData(0x0016);  
	 TFT_WriteCmd(0x0050);TFT_WriteData(0x001b);  
	 TFT_WriteCmd(0x0051);TFT_WriteData(0x002e);  
	 TFT_WriteCmd(0x0052);TFT_WriteData(0x002c);
 
	 TFT_WriteCmd(0x0053);TFT_WriteData(0x0038);  
	 TFT_WriteCmd(0x0054);TFT_WriteData(0x0038);  
	 TFT_WriteCmd(0x0055);TFT_WriteData(0x003e);  
	 TFT_WriteCmd(0x0056);TFT_WriteData(0x002a);  
	 TFT_WriteCmd(0x0057);TFT_WriteData(0x006f);  
	 TFT_WriteCmd(0x0058);TFT_WriteData(0x0009);  
	 TFT_WriteCmd(0x0059);TFT_WriteData(0x0006);  
	 TFT_WriteCmd(0x005a);TFT_WriteData(0x0006);  
	 TFT_WriteCmd(0x005b);TFT_WriteData(0x000b);  
	 TFT_WriteCmd(0x005c);TFT_WriteData(0x0016);
	 TFT_WriteCmd(0x005d);TFT_WriteData(0x00cc);  
	 
	 //Power Voltage Setting 
	 TFT_WriteCmd(0x001b);TFT_WriteData(0x001b);  
	 TFT_WriteCmd(0x001a);TFT_WriteData(0x0001);  
	 TFT_WriteCmd(0x0024);TFT_WriteData(0x0029);
	 TFT_WriteCmd(0x0025);TFT_WriteData(0x0057); 

	 //****VCOM offset**/// 
	 TFT_WriteCmd(0x0023);TFT_WriteData(0x008a);

	 //Power on Setting 
	 TFT_WriteCmd(0x0018);TFT_WriteData(0x0036);  
	 TFT_WriteCmd(0x0019);TFT_WriteData(0x0001);  
	 TFT_WriteCmd(0x0001);TFT_WriteData(0x0000);
	 TFT_WriteCmd(0x001f);TFT_WriteData(0x0088); 
	 Delay(5);	
	 TFT_WriteCmd(0x001f);TFT_WriteData(0x0080);  
	 Delay(5);	
	 TFT_WriteCmd(0x001f);TFT_WriteData(0x0090);     
	 Delay(5);
	 TFT_WriteCmd(0x001f);TFT_WriteData(0x00d0); 
	 Delay(5);
	 
	 //262k/65k color selection 	
	 TFT_WriteCmd(0x0017);TFT_WriteData(0x0005); 

	 //SET PANEL
	 TFT_WriteCmd(0x0036);TFT_WriteData(0x0000); 
	 
	 //Display ON Setting  
	 TFT_WriteCmd(0x0028);TFT_WriteData(0x0038); 
	 Delay(40); 
	 TFT_WriteCmd(0x0028);TFT_WriteData(0x003c);  

	 //Set GRAM Area 
	 TFT_WriteCmd(0x0002);TFT_WriteData(0x0000);  
	 TFT_WriteCmd(0x0003);TFT_WriteData(0x0000);
	 TFT_WriteCmd(0x0004);TFT_WriteData(0x0000);  
	 TFT_WriteCmd(0x0005);TFT_WriteData(0x00ef); 
	 TFT_WriteCmd(0x0006);TFT_WriteData(0x0000);  
	 TFT_WriteCmd(0x0007);TFT_WriteData(0x0000);   
	 TFT_WriteCmd(0x0008);TFT_WriteData(0x0001);  
	 TFT_WriteCmd(0x0009);TFT_WriteData(0x003f); 
	    
	 TFT_WriteCmd(0x22);
}

3.顏色顯示的位置

// 本函數(shù)用來(lái)告訴內(nèi)部的顯存偏移量指針,我們當(dāng)前要操作的顏色數(shù)據(jù)是對(duì)應(yīng)哪一個(gè)像素的
void TFT_SetWindow(unsigned int xStart,unsigned int yStart,unsigned int xEnd,unsigned int yEnd)
{

	//HX8347-D

	//起始x位
	TFT_WriteCmd(0x02);TFT_WriteData(xStart>>8);    //高8位 
	TFT_WriteCmd(0x03);TFT_WriteData(xStart);	 		//低8位
	//起始y位
	TFT_WriteCmd(0x04);TFT_WriteData(xEnd>>8); 
	TFT_WriteCmd(0x05);TFT_WriteData(xEnd); 
	
	//結(jié)束x位
	TFT_WriteCmd(0x06);TFT_WriteData(yStart>>8); 
	TFT_WriteCmd(0x07);TFT_WriteData(yStart);
	//結(jié)束y位
	TFT_WriteCmd(0x08);TFT_WriteData(yEnd>>8); 
	TFT_WriteCmd(0x09);TFT_WriteData(yEnd); 	

	// 最后這個(gè)0x22是為了配合SetWindow之后	TFT_WriteData傳輸?shù)哪切﹤€(gè)【相當(dāng)于將顯示器的開(kāi)關(guān)打開(kāi)】
	// 顏色數(shù)據(jù)來(lái)顯示的。
	TFT_WriteCmd(0x22);
}

4.填充入顏色(清屏)

void TFT_ClearScreen(unsigned char color){
	
	unsigned int x,y;
	//設(shè)置屏幕將來(lái)要顯示的范圍
	TFT_SetWindow(0,0,TFT_XMAX,TFT_YMAX);
	
	for(y=0;y<TFT_YMAX+1;y++){
		for(x=0;x<TFT_XMAX+1;x++){
				TFT_WriteData(color);
		}
	}
	
}

5.顏色定義

// 顏色定義
#define WHITE	0xffff
#define BLACK	0x0000
#define RED		0xF800//R(5)G(6)B(5)-->R為1,G和B為0
#define GREEN	0x07e0
#define BLUE	0x001f

6.簡(jiǎn)單顯存操縱之畫(huà)點(diǎn)/線

1.畫(huà)一個(gè)點(diǎn)

//往(x,y)坐標(biāo)位置畫(huà)一個(gè)點(diǎn)
void GUI_DrawDot(uint x,uint y,uint color){
	
	uchar i=0;
	//起始和終止位置一樣,表示一個(gè)點(diǎn)
	//初始化要開(kāi)始畫(huà)的位置
	TFT_SetWindow(x,y,x,y);
	//將顏色填入
	TFT_WriteData(color);
	
	//點(diǎn)的大小是3*3
	TFT_SetWindow(x-1,y-1,x+1,y+1);
	for(i=0;i<9;i++){
		TFT_WriteData(color);
	}
	
	
	//點(diǎn)的大小是5*5
	TFT_SetWindow(x-2,y-2,x+2,y+2);
	for(i=0;i<25;i++){
		TFT_WriteData(color);
	}
	
}

2.畫(huà)一條橫線


//橫線
//往(x,y)坐標(biāo)位置畫(huà)一條橫線,長(zhǎng)度是l,顏色是color
void GUI_DrawLineX(uint x,uint y,uint l,uint color){
	
	uchar i=0;
	
	//一條線
	TFT_SetWindow(x,y,x+l,y);
	//三條線
	TFT_SetWindow(x,y+1,x+l,y+1);
	
	for(i=0;i<l+1;i++){//注意點(diǎn):是l+1
		TFT_WriteData(color);
	}
	
}

3.畫(huà)一條豎線

//豎線
//往(x,y)坐標(biāo)位置畫(huà)一條豎線,長(zhǎng)度是l,顏色是color
void GUI_DrawLineY(uint x,uint y,uint l,uint color){
	
	uchar i=0;
	
	//一條線
	TFT_SetWindow(x,y,x,y+l);
	
	for(i=0;i<l+1;i++){//注意點(diǎn):是l+1
		TFT_WriteData(color);
	}
	
}

4.畫(huà)一個(gè)十字架

//往(x,y)坐標(biāo)為中心點(diǎn)畫(huà)一個(gè)十字,長(zhǎng)度為1,顏色為color
void GUI_DrawShiZi(uint x,uint y,uint l,uint color){
	
	uchar i=0;
	
	//先畫(huà)橫線
	TFT_SetWindow(x-l/2,y,x+l/2,y);
	
	for(i=0;i<l+1;i++){//注意點(diǎn):是l+1
		TFT_WriteData(color);
	}
	
	
	//先畫(huà)豎線
	TFT_SetWindow(x,y-l/2,x,y+l/2);
	
	for(i=0;i<l+1;i++){//注意點(diǎn):是l+1
		TFT_WriteData(color);
	}
	
}

7.LCD顯示之寫(xiě)字

注意點(diǎn):

1)一個(gè)漢字對(duì)應(yīng)2個(gè)字節(jié),所以我們?cè)O(shè)置

// ------------------  漢字字模的數(shù)據(jù)結(jié)構(gòu)定義 ------------------------ //
struct  Cn32CharTypeDef                   // 漢字字模數(shù)據(jù)結(jié)構(gòu) 
{
	unsigned char  Index[2];            // 漢字內(nèi)碼索引,一個(gè)漢字占兩個(gè)字節(jié)	
	unsigned char   Msk[116];            // 點(diǎn)陣碼數(shù)據(jù)(32*29/8) 
};
/
// 漢字字模表,大小為:32*29                                                          //
// 漢字庫(kù): 宋體二號(hào),橫向取模左高位,數(shù)據(jù)排列:從左到右從上到下           //
/
code struct  Cn32CharTypeDef const CnChar32x29[]=
{
/*--  文字:  普  --*/
/*--  宋體22;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=30x29   --*/
/*--  寬度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=32x29  --*/
"普",0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x00,0x00,0x78,0x3C,0x00,0x00,0x3C,0x78,0x00,
0x00,0x3C,0x70,0xC0,0x00,0x1C,0xE1,0xE0,0x1F,0xFF,0xFF,0xF0,0x00,0x1C,0xE3,0x00,
0x0E,0x1C,0xE7,0xC0,0x07,0x9C,0xE7,0x80,0x03,0xDC,0xEF,0x00,0x03,0xDC,0xEE,0x00,
0x01,0xDC,0xFC,0x60,0x00,0x9C,0xF9,0xF0,0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFF,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x00,0x00,0x00,0x00,
	

/*--  文字:  中  --*/
/*--  宋體22;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=30x29   --*/
/*--  寬度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=32x29  --*/
"中",0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x01,0x80,0x1F,0xFF,0xFF,0xE0,
0x1F,0xFF,0xFF,0xE0,0x1E,0x07,0x01,0xC0,0x1E,0x07,0x01,0xC0,0x1E,0x07,0x01,0xC0,
0x1E,0x07,0x01,0xC0,0x1E,0x07,0x01,0xC0,0x1E,0x07,0x01,0xC0,0x1F,0xFF,0xFF,0xC0,
0x1F,0xFF,0xFF,0xC0,0x1E,0x07,0x01,0xC0,0x1C,0x07,0x01,0x80,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,
}
//寫(xiě)出漢字大小為:32*29
void GUI_Write32CnChar(uint x, uint y, uchar *p, uint wordColor, uint backColor){
	
	unsigned char i,j,wordNum;//wordNum:表示一共要顯示的數(shù)字個(gè)數(shù)
	unsigned int color;
	
	while(*p!='\0'){
	//先確定要寫(xiě)的位置
			TFT_SetWindow(x,y,x+31,y+28);
			for(wordNum=0;wordNum<20;wordNum++){
				//因?yàn)橐粋€(gè)漢字對(duì)應(yīng)兩個(gè)編碼,我們要確定這個(gè)編碼和字是否可以對(duì)應(yīng)上
				if((CnChar32x29[wordNum].Index[0]==*p)
						&&
						(CnChar32x29[wordNum].Index[1]==*(p+1)))
				{
					//表示此時(shí)對(duì)應(yīng)上,則可以開(kāi)始讀取116個(gè)字模
					for(i=0;i<116;i++){
						//讀取每一位字模(一位8bit)
						color=CnChar32x29[wordNum].Msk[i];
						//將這一位數(shù)據(jù)讀出來(lái),然后判斷8位bit是1還是0
						for(j=0;i<8;j++){
							if(color&0x80){
								//進(jìn)入,則表示此為bit為1,則這個(gè)位置是有漢字要顯示
								TFT_WriteData(wordColor);
							}else{
								//表示這個(gè)位置沒(méi)有漢字顯示,則設(shè)置為背景色
								TFT_WriteData(backColor);
							}
							//因?yàn)槲覀兪菑母呶婚_(kāi)始讀取,所以要將數(shù)據(jù)向左移動(dòng)一位
							color<<=1;
						}
					}
				}
			}
		
	}
	
}

8.LCD顯示圖像

1.用Image2LCD獲取圖像頭文件

Image to LCD

選擇:320*240

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

PC機(jī)上圖片默認(rèn)32位:8位R,8位G,8位B,8位透明

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2.寫(xiě)繪圖函數(shù)

1)圖像出來(lái)的編碼,i是低8位,i+1是高8位

2)設(shè)置顯示范圍的時(shí)候,注意左閉右開(kāi)

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

//在(x,y)為左上角的位置上繪圖
void GUI_DrawPicture(uint x,uint y,uchar *pPic,uint width,uint height){
	
	uint i;
	
	//注意開(kāi)閉區(qū)間問(wèn)題【我們是32*29---》31*28】,所以結(jié)尾要分別-1
	TFT_SetWindow(x+0,y+0,x+width-1,y+height-1);
	//因?yàn)槲覀兪?6bit分為2字節(jié)發(fā)送,所以我們應(yīng)該2個(gè)為一組發(fā)送
	//width*height*2:圖片的編碼數(shù)組
	for(i=0;i<width*height*2;i+=2){
		
		//i:表示低8位,i+1:表示高8位
		//位或:將兩者合并起來(lái)
		//0X89(低8位),0X98(高8位),
		TFT_WriteData((pPic[i]<<0) | (pPic[i+1]<<8));	
	}
	
	
}

6.ILI9325數(shù)據(jù)手冊(cè)

1.基本信息

1)i80 系統(tǒng)接口,具有 8 位/9 位/16 位/18 位總線寬度

2)240RGBx320 點(diǎn)分辨率,具有真正的 262,144 顯示顏色

2.引腳

1.IM:串行外設(shè)接口

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

2.NCS:片選

NCS=1:表示未選中

NCS=0:表示選中

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

3.RS: 寄存器選擇信號(hào)

選中寄存器類型

RS=1:表示要進(jìn)行寫(xiě)數(shù)據(jù)

RS=0:表示要進(jìn)行寫(xiě)命令

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

4.nWR/SCL:選中寫(xiě)狀態(tài)

nWR/SCL=0:表示此時(shí)要進(jìn)入寫(xiě)狀態(tài)

nWR/SCL=1:表示此時(shí)不進(jìn)入寫(xiě)狀態(tài)

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

5.nRD:選擇讀狀態(tài)

nRD=0:表示此時(shí)要進(jìn)入讀狀態(tài)

nRD=1:表示此時(shí)不進(jìn)入讀狀態(tài)

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

6.nRESET

初始狀態(tài)為0

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

7.DB[17:0]:數(shù)據(jù)傳輸線

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

3.塊描述

IR:索引寄存器(index register)---》IR 是存儲(chǔ)來(lái)自控制寄存器和內(nèi)部GRAM 的索引信息的寄存器。

WDR:是臨時(shí)存儲(chǔ)要寫(xiě)入控制寄存器和內(nèi)部GRAM 的數(shù)據(jù)的寄存器。

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

4.寄存器

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件

6.Write to register:寫(xiě)寄存器(命令)

單片機(jī)tft是什么,51單片機(jī),單片機(jī),嵌入式硬件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-798125.html

//寫(xiě)命令
void LIL9325_Write_Cmd(unsigned int cmd){
	//表示此函數(shù)要進(jìn)行的操作是:寫(xiě)
	TFT_WR=1;
	//打開(kāi)片選
	TFT_CS=0;
	//表示此時(shí)寫(xiě)命令【1】or數(shù)據(jù)【0】
	TFT_RS=0;
	//此時(shí)是寫(xiě)命令,讀不用使用到,所以一直為高電平
	TFT_RD=1;
	//打開(kāi)寫(xiě)命令
	TFT_WR=0;
	TFT_WR=1;
	TFT_DATAPORTL=cmd>>8;
 	TFT_DATAPORTL=dat&0x00ff;
 	TFT_WR=0;
 	TFT_WR=1;
	//關(guān)閉片選
	TFT_CS=1;
	
}

7.Read from Data:寫(xiě)數(shù)據(jù)

//寫(xiě)數(shù)據(jù)
void LIL9325_Write_Data(unsigned int dat){
	//表示此函數(shù)要進(jìn)行的操作是:寫(xiě)
	TFT_WR=1;
	//打開(kāi)片選
	TFT_CS=0;
	//表示此時(shí)寫(xiě)命令【1】or數(shù)據(jù)【0】
	TFT_RS=1;
	//此時(shí)是寫(xiě)命令,讀不用使用到,所以一直為高電平
	TFT_RD=1;
	//打開(kāi)寫(xiě)命令
	TFT_WR=0;
	TFT_WR=1;
	TFT_DATAPORTL=dat>>8;
 	TFT_DATAPORTL=dat&0x00ff;
 	TFT_WR=0;
 	TFT_WR=1;
	//關(guān)閉片選
	TFT_CS=1;
	
}

8.讀取數(shù)據(jù)

//讀取數(shù)據(jù)
void LIL_Read_Data(unsigned int dat){
	
	//打開(kāi)片選
	TFT_CS=0;
	//此時(shí)是讀數(shù)據(jù)【1】
	TFT_RS=1;
	//此時(shí)是要進(jìn)行讀操作
	TFT_RD=0;//則此時(shí)讀操作要拉為低電平
	
	_nop_();
	dat=TFT_DATAPORTL;
	dat<<=8;
	dat|=TFT_DATAPORTL;
	
	//關(guān)閉讀操作,拉為高電平
	TFT_RD=1;
	//關(guān)閉片選
	TFT_CS=1;
	
}

到了這里,關(guān)于【單片機(jī)】19-TFT彩屏的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式51單片機(jī)04-矩陣按鍵系列

    嵌入式51單片機(jī)04-矩陣按鍵系列

    一、矩陣按鍵基礎(chǔ)知識(shí) 矩陣按鍵工作原理 : 逐行掃描 :通過(guò)高四位輪流輸出低電平來(lái)對(duì)矩陣鍵盤進(jìn)行掃描,當(dāng)?shù)退奈唤邮盏降臄?shù)據(jù)不全為1的時(shí)候,說(shuō)明有按鍵按下,然后通過(guò)判斷低四位數(shù)據(jù)中哪一位為零來(lái)判斷哪一個(gè)按鍵被按下。 逐列掃描 :通過(guò)低四位輪流輸出低電平來(lái)

    2024年02月07日
    瀏覽(49)
  • 嵌入式硬件與51單片機(jī):演變、挑戰(zhàn)與未來(lái)

    嵌入式硬件與51單片機(jī):演變、挑戰(zhàn)與未來(lái)

    導(dǎo)言: ????????嵌入式硬件及其代表之一的51單片機(jī)在電子領(lǐng)域扮演著至關(guān)重要的角色。本文將深入剖析這一領(lǐng)域的發(fā)展歷程,包括初期的崛起、面臨的挑戰(zhàn)、重大公關(guān)危機(jī)、核心業(yè)務(wù)、當(dāng)前研究方向、采用的技術(shù)、實(shí)際應(yīng)用場(chǎng)景、未來(lái)展望,并提供相關(guān)鏈接,為讀者呈現(xiàn)

    2024年01月24日
    瀏覽(31)
  • STM32使用軟件SPI協(xié)議操作TFT18彩屏

    STM32使用軟件SPI協(xié)議操作TFT18彩屏

    時(shí)間記錄:2024/2/20 (1)SPI設(shè)備通過(guò)4根線進(jìn)行通信,CS片選線,選擇從設(shè)備,SCK時(shí)鐘線,由主設(shè)備產(chǎn)生時(shí)鐘,主機(jī)MOSI線連從機(jī)MISO線,由主機(jī)向從機(jī)發(fā)送信息,主機(jī)MISO線連接從機(jī)MOSI線,由從機(jī)向主機(jī)發(fā)送信息 (2)SPI分為4種通信方式 模式0:CPOL=0,CPHA=0,空閑時(shí)SCK時(shí)鐘線為低

    2024年02月21日
    瀏覽(24)
  • 【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚(yú)缸

    【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚(yú)缸

    Hi,大家好,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目, 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) ?? 項(xiàng)目分享與指導(dǎo): https://gitee.com/sinonfin/sharing 近年以來(lái),隨著我國(guó)綜合實(shí)力飛速飆升,人們對(duì)物質(zhì)和精神生活質(zhì)量的要求也不斷提升,各式各樣的智能

    2024年02月04日
    瀏覽(96)
  • 物聯(lián)網(wǎng)畢設(shè) - 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚(yú)缸

    物聯(lián)網(wǎng)畢設(shè) - 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚(yú)缸

    Hi,大家好,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目, 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) ?? 項(xiàng)目分享與指導(dǎo): https://gitee.com/sinonfin/sharing 近年以來(lái),隨著我國(guó)綜合實(shí)力飛速飆升,人們對(duì)物質(zhì)和精神生活質(zhì)量的要求也不斷提升,各式各樣的智能

    2024年02月03日
    瀏覽(22)
  • STM32畢設(shè)分享 - 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚(yú)缸

    STM32畢設(shè)分享 - 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚(yú)缸

    Hi,大家好,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目, 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 基于單片機(jī)的智能魚(yú)缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) ?? 項(xiàng)目分享與指導(dǎo): https://gitee.com/sinonfin/sharing 近年以來(lái),隨著我國(guó)綜合實(shí)力飛速飆升,人們對(duì)物質(zhì)和精神生活質(zhì)量的要求也不斷提升,各式各樣的智能

    2024年04月11日
    瀏覽(28)
  • STM32(HAL庫(kù))驅(qū)動(dòng)(1.44寸)TFT-LCD彩屏

    STM32(HAL庫(kù))驅(qū)動(dòng)(1.44寸)TFT-LCD彩屏

    目錄 1、簡(jiǎn)介 2、CubeMX初始化配置 2.1 基礎(chǔ)配置 2.1.1 SYS配置 ?2.1.2 RCC配置 2.2 屏幕引腳配置 2.3 項(xiàng)目生成 ?3、KEIL端程序整合 3.1 LCD驅(qū)動(dòng)添加 3.2?函數(shù)修改 3.2.1?lcd.h修改 3.2.2 lcd_innit.h?修改 ?3.2.3 lcd.c修改 ?3.2.4?lcd_inut.c修改 ?3.3?主函數(shù)代碼 3.3.1 添加頭文件 3.3.2?LCD進(jìn)行初始化

    2024年02月03日
    瀏覽(29)
  • 51單片機(jī)和32單片機(jī)有什么區(qū)別?該從哪個(gè)開(kāi)始入門學(xué)習(xí)?

    單片機(jī) (microcontroller)是一種能夠完成特定功能的微型電腦。它包含了中央處理器(CPU)、存儲(chǔ)器(ROM、RAM)以及輸入/輸出接口(I/O)。單片機(jī)被廣泛應(yīng)用于各種電子設(shè)備中,如電子手表、電子計(jì)算器、家用電器、汽車電子、機(jī)器人等等。 目前市面上最常見(jiàn)的單片機(jī)有 51單

    2024年02月08日
    瀏覽(27)
  • STM32和51單片機(jī)有什么區(qū)別

    STM32和51單片機(jī)有什么區(qū)別

    在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到單片機(jī)選型的需要,所以我們往往會(huì)根據(jù)項(xiàng)目的功能需求選擇合適的品牌和型號(hào)。常見(jiàn)的51單片機(jī)和STM32單片機(jī)也將是我們主要考慮的機(jī)型。 STM32和51單片機(jī)參數(shù)區(qū)別 核心不一樣。STM32系列有很多內(nèi)核版本,包括cortex-m1/M4/M7內(nèi)核。常用的單片

    2024年02月03日
    瀏覽(17)
  • 單片機(jī)、ARM、嵌入式開(kāi)發(fā)、Android 底層開(kāi)發(fā)有什么關(guān)系?

    單片機(jī)、ARM、嵌入式開(kāi)發(fā)、Android 底層開(kāi)發(fā)有什么關(guān)系?

    從我目前的見(jiàn)識(shí)來(lái)看: 單片機(jī)是個(gè)系統(tǒng)(比如:51、AVR、PLC...),其中包含了去除了輸入輸出之外的運(yùn)算器、控制器、存儲(chǔ)器,我們用程序可以非常直觀的控制引腳電平的高低。最近很多小伙伴找我,說(shuō)想要一些ARM的資料,然后我根據(jù)自己從業(yè)十年經(jīng)驗(yàn),熬夜搞了幾個(gè)通宵,

    2024年02月02日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包