国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

成都企業(yè)建站系統(tǒng)模板seo標題優(yōu)化

成都企業(yè)建站系統(tǒng)模板,seo標題優(yōu)化,做網(wǎng)站要買多大服務器,蘭州落地防疫前言 (1)本系列是基于STM32的項目筆記,內(nèi)容涵蓋了STM32各種外設的使用,由淺入深。 (2)小編使用的單片機是STM32F105RCT6,項目筆記基于小編的實際項目,但是博客中的內(nèi)容適用于各種單片…

前言

(1)本系列是基于STM32的項目筆記,內(nèi)容涵蓋了STM32各種外設的使用,由淺入深。

(2)小編使用的單片機是STM32F105RCT6,項目筆記基于小編的實際項目,但是博客中的內(nèi)容適用于各種單片機開發(fā)的同學學習和使用。

學習目標

本章有五個任務:

  1. 了解關于TFTLCD液晶屏的硬件接口
  2. 學習和了解STM32 DMA驅(qū)動
  3. TFTLCD液晶屏的硬件接口初始化
  4. LCD液晶初始化
  5. TFTLCD液晶屏代碼移植和顯示測試

TFTLCD液晶屏硬件電路分析

接口說明:TFTLCD液晶屏是連接到了單片機的SPI3接口。

TFTDIO ---- PB5 SPI3-MOSI 數(shù)據(jù)發(fā)送管腳 SPI硬件控制

TFTCMD---- PB4 SPI3-MISO 數(shù)據(jù)/指令控制腳

TFTCLK ----- PB3 SPI3-SCK 數(shù)據(jù)發(fā)送時鐘腳 SPI硬件控制

CS ------PB6 片選腳位

LEDA_EN— PC10 LCD屏背光控制腳

FTFRES — PA15 LCD復位腳

電路設計說明:

● 硬件電路設計是參考液晶屏官方給的參考資料設計的?;臼前凑招酒Y料照抄過來即可

● 為了提高液晶屏的刷屏效率,我們選擇了SPI3接口。采用單線模式

● DIO CLK 必須固定連接 MOSI SCK ,其他管腳可以連任意IO口

TFTLCD液晶屏初始化

hal_tftlcd.c 代碼

#include "hal_tftlcd.h"
#include "stm32F10x.h"
//#include "lcd_font.h"//-----------------LCD端口定義---------------- 
#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_3)//SCL=SCLK
#define LCD_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_3)#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_5)//SDA=MOSI
#define LCD_MOSI_Set() GPIO_SetBits(GPIOB,GPIO_Pin_5)#define LCD_DC_Clr()   GPIO_ResetBits(GPIOB,GPIO_Pin_4)//DC
#define LCD_DC_Set()   GPIO_SetBits(GPIOB,GPIO_Pin_4)#define LCD_CS_Clr()   GPIO_ResetBits(GPIOB,GPIO_Pin_6)//CS
#define LCD_CS_Set()   GPIO_SetBits(GPIOB,GPIO_Pin_6)#define LCD_RES_Clr()  GPIO_ResetBits(GPIOA,GPIO_Pin_15)//RES
#define LCD_RES_Set()  GPIO_SetBits(GPIOA,GPIO_Pin_15)#define LCD_BLK_Clr()  GPIO_ResetBits(GPIOC,GPIO_Pin_10)//BLK
#define LCD_BLK_Set()  GPIO_SetBits(GPIOC,GPIO_Pin_10)void hal_tftlcdConfig(void)
{SPI_InitTypeDef  SPI_InitStructure;GPIO_InitTypeDef  GPIO_InitStructure;DMA_InitTypeDef  DMA_InitStructure;//DMA初始化結(jié)構體RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);  //相關IO的初始化GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//RES-PA15GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);	  //初始化GPIOAGPIO_SetBits(GPIOA,GPIO_Pin_15);//CMD-PB4//CS-PB6GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);	  //初始化GPIOA	GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_6);//BLK-PC10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOC, &GPIO_InitStructure);	  //初始化GPIOA		GPIO_ResetBits(GPIOC,GPIO_Pin_10);//CLK-PB3//MOSI-PB5GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 |GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);	/* SPI3 configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; //SPI1設置為單線SPI_InitStructure.SPI_Mode = SPI_Mode_Master;	                     //設置SPI1為主模式SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI發(fā)送接收8位幀結(jié)構SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;	 		                   //串行時鐘在不操作時,時鐘為高電平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;		                   //第二個時鐘沿開始采樣數(shù)據(jù)SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;			                     //NSS信號由軟件(使用SSI位)管理SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //定義波特率預分頻的值:波特率預分頻值為8SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;				         //數(shù)據(jù)傳輸從MSB位開始SPI_InitStructure.SPI_CRCPolynomial = 7;						               //CRC值計算的多項式SPI_Init(SPI3, &SPI_InitStructure);//使能DMA發(fā)送DMA_DeInit(DMA2_Channel2); DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&SPI3->DR; //數(shù)據(jù)傳輸目標地址//數(shù)據(jù)緩存地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; 	//外設作為數(shù)據(jù)傳輸?shù)哪康牡谼MA_InitStructure.DMA_BufferSize = 1024;            //發(fā)送Buff數(shù)據(jù)大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //設置外設地址是否遞增DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;          //設置內(nèi)存地址是否遞增DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外設數(shù)據(jù)寬度為8位DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;       	//內(nèi)存數(shù)據(jù)寬度為8位	DMA_InitStructure.DMA_Mode =   DMA_Mode_Normal;                              //普通緩存模式DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;                        //高優(yōu)先級DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                                 //禁止DMA2個內(nèi)存相互訪問DMA_Init(DMA2_Channel2, &DMA_InitStructure);                                 //初始化DMA,SPI在DMA1的通道2SPI_I2S_DMACmd(SPI3,SPI_I2S_DMAReq_Tx,ENABLE);                               /使能SPI2 DMA發(fā)送功能*/	SPI_Cmd(SPI3, ENABLE);//使能SPI2
}// SPI3 DMA發(fā)送
void DMA_SPI3_TX(unsigned char *buffer,unsigned short len)
{DMA2->IFCR |=(0xf<<4);    //清除通道2上面所有的標志位DMA2_Channel2->CNDTR=len; //設置要傳輸?shù)臄?shù)據(jù)長度DMA2_Channel2->CMAR=(u32)buffer; //設置RAM緩沖區(qū)地址DMA2_Channel2->CCR|=0x1;   ///啟動DMAwhile(!(DMA2->ISR&(1<<5)));///等待數(shù)據(jù)數(shù)據(jù)傳輸完成DMA2_Channel2->CCR &=(uint32_t)~0x1;//關閉DMA
}void LCD_Writ_Bus(unsigned char dat) 
{	LCD_CS_Clr();DMA_SPI3_TX(&dat,1);
}/******************************************************************************函數(shù)說明:LCD寫入數(shù)據(jù)入口數(shù)據(jù):dat 寫入的數(shù)據(jù)返回值:  無
******************************************************************************/
void LCD_WR_DATA8(unsigned char dat)
{LCD_Writ_Bus(dat);
}/******************************************************************************函數(shù)說明:LCD寫入數(shù)據(jù)入口數(shù)據(jù):dat 寫入的數(shù)據(jù)返回值:  無
******************************************************************************/
void LCD_WR_DATA(unsigned short dat)
{unsigned char d[2];d[0] = dat>>8;d[1] = dat;DMA_SPI3_TX(&d[0],2);
}/******************************************************************************函數(shù)說明:LCD寫入命令入口數(shù)據(jù):dat 寫入的命令返回值:  無
******************************************************************************/
void LCD_WR_REG(unsigned char dat)
{LCD_DC_Clr();//寫命令LCD_Writ_Bus(dat);LCD_DC_Set();//寫數(shù)據(jù)
}void hal_Oled_Display_on(void)
{LCD_BLK_Set();
}void hal_Oled_Display_off(void)
{LCD_BLK_Clr();
}
///void hal_oled_RestH(void)
{LCD_RES_Set();
}
void hal_oled_RestL(void)
{LCD_RES_Clr();
}

hal_tftlcd.h 代碼

#ifndef ____HAL_TFTLCD_H_
#define ____HAL_TFTLCD_H_void hal_tftlcdConfig(void);void LCD_WR_REG(unsigned char dat);
void LCD_WR_DATA8(unsigned char dat);
void LCD_WR_DATA(unsigned short dat);
void DMA_SPI3_TX(unsigned char *buffer,unsigned short len);void hal_Oled_Display_on(void);
void hal_Oled_Display_off(void);
void hal_oled_RestH(void);
void hal_oled_RestL(void);
#endif

代碼分析

hal_tftlcd.c 包括

● TFTLCD液晶屏通訊接口初始化

● TFTLCD通過DMA數(shù)據(jù)發(fā)送函數(shù)

● TFTLCD液晶屏其他端口控制函數(shù)

TFTLCD SP3接口初始化流程

? 定義TFTLCD通訊的接口

//-----------------LCD端口定義---------------- 
#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_3)//SCL=SCLK
#define LCD_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_3)#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_5)//SDA=MOSI
#define LCD_MOSI_Set() GPIO_SetBits(GPIOB,GPIO_Pin_5)#define LCD_DC_Clr()   GPIO_ResetBits(GPIOB,GPIO_Pin_4)//DC
#define LCD_DC_Set()   GPIO_SetBits(GPIOB,GPIO_Pin_4)#define LCD_CS_Clr()   GPIO_ResetBits(GPIOB,GPIO_Pin_6)//CS
#define LCD_CS_Set()   GPIO_SetBits(GPIOB,GPIO_Pin_6)#define LCD_RES_Clr()  GPIO_ResetBits(GPIOA,GPIO_Pin_15)//RES
#define LCD_RES_Set()  GPIO_SetBits(GPIOA,GPIO_Pin_15)#define LCD_BLK_Clr()  GPIO_ResetBits(GPIOC,GPIO_Pin_10)//BLK
#define LCD_BLK_Set()  GPIO_SetBits(GPIOC,GPIO_Pin_10)

? 打開相關時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);  //相關IO的初始化GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//打開端口重映射,PB3、PB4端口默認的功能不是SPI3,是JTAG,所以要對端口重映射,讓它們具備SPI3的功能

? 初始化TFTLCD 液晶屏 和SPI3相關的GPIO口

	//CMD-PB4//CS-PB6GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);	  //初始化GPIOA	GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_6);//BLK-PC10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOC, &GPIO_InitStructure);	  //初始化GPIOA		GPIO_ResetBits(GPIOC,GPIO_Pin_10);//CLK-PB3//MOSI-PB5GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 |GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);	

? 初始化SPI3相關參數(shù)

/* SPI3 configuration */ 
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; //SPI1設置為單線
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;	                     //設置SPI1為主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI發(fā)送接收8位幀結(jié)構
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;	  //串行時鐘在不操作時,時鐘為高電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;		 //第二個時鐘沿開始采樣數(shù)據(jù)
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;	 //NSS信號由軟件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //定義波特率預分頻的值:波特率預分頻值為8
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//數(shù)據(jù)傳輸從MSB位開始
SPI_InitStructure.SPI_CRCPolynomial = 7;			 //CRC值計算的多項式
SPI_Init(SPI3, &SPI_InitStructure);

? 配置SPI3 DMA功能。

DMA介紹:

直接存儲器存取(DMA)用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。無須CPU干預,數(shù)據(jù)可以通過DMA快速地移動,這就節(jié)省了CPU的資源來做其他操作。兩個DMA控制器有12個通道(DMA1有7個通道,DMA2有5個通道),每個通道專門用來管理來自于一個或多個外設對存儲器訪問的請求。還有一個仲裁器來協(xié)調(diào)各個DMA請求的優(yōu)先權。

總之,當我們的功能中涉及數(shù)據(jù)傳輸功能時,例如ADC、DMA、USART等,為了使數(shù)據(jù)傳輸更快,可以在數(shù)據(jù)傳輸中加上DMA功能,使能DMA發(fā)送或接收。

DMA1 各個通道對應表:

DMA2 各個通道對應表:

我們項目用到是DMA2的發(fā)送功能,因為我們只需要對TFTLCD顯示屏發(fā)送數(shù)據(jù)。

//使能DMA發(fā)送
DMA_DeInit(DMA2_Channel2); 
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&SPI3->DR; //數(shù)據(jù)傳輸目標地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; 	數(shù)據(jù)傳輸方向,從內(nèi)存讀取發(fā)送到外設
DMA_InitStructure.DMA_BufferSize = 1024;            //發(fā)送Buff數(shù)據(jù)大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //設置外設地址是否遞增
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //設置內(nèi)存地址是否遞增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外設數(shù)據(jù)寬度為8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //內(nèi)存數(shù)據(jù)寬度為8位	DMA_InitStructure.DMA_Mode =   DMA_Mode_Normal;                         //普通緩存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;                        //高優(yōu)先級
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;            //禁止DMA2個內(nèi)存相互訪問
DMA_Init(DMA2_Channel2, &DMA_InitStructure);        //初始化DMA,SPI在DMA1的通道2SPI_I2S_DMACmd(SPI3,SPI_I2S_DMAReq_Tx,ENABLE); /使能SPI2 DMA發(fā)送功能*/	
SPI_Cmd(SPI3, ENABLE);//使能SPI2
SPI3 DMA 數(shù)據(jù)發(fā)送函數(shù)
// SPI3 DMA發(fā)送
void DMA_SPI3_TX(unsigned char *buffer,unsigned short len)
{DMA2->IFCR |=(0xf<<4);    //清除通道2上面所有的標志位DMA2_Channel2->CNDTR=len; //設置要傳輸?shù)臄?shù)據(jù)長度DMA2_Channel2->CMAR=(u32)buffer; //設置RAM緩沖區(qū)地址DMA2_Channel2->CCR|=0x1;   ///啟動DMAwhile(!(DMA2->ISR&(1<<5))) ; ///等待數(shù)據(jù)數(shù)據(jù)傳輸完成DMA2_Channel2->CCR &=(uint32_t)~0x1;//關閉DMA
}
void LCD_Writ_Bus(unsigned char dat) 
{	LCD_CS_Clr();DMA_SPI3_TX(&dat,1);
}
其他LCD腳位控制函數(shù)
void hal_Oled_Display_on(void)
{LCD_BLK_Set();
}void hal_Oled_Display_off(void)
{LCD_BLK_Clr();
}void hal_oled_RestH(void)
{LCD_RES_Set();
}
void hal_oled_RestL(void)
{LCD_RES_Clr();
}
LCD指令和數(shù)據(jù)發(fā)送函數(shù)
/******************************************************************************函數(shù)說明:LCD寫入數(shù)據(jù)入口數(shù)據(jù):dat 寫入的數(shù)據(jù)返回值:  無
******************************************************************************/
void LCD_WR_DATA8(unsigned char dat)
{DMA_SPI3_TX(dat);
}/******************************************************************************函數(shù)說明:LCD寫入數(shù)據(jù)入口數(shù)據(jù):dat 寫入的數(shù)據(jù)返回值:  無
******************************************************************************/
void LCD_WR_DATA(unsigned short dat)
{unsigned char d[2];d[0] = dat>>8;d[1] = dat;DMA_SPI3_TX(&d[0],2);
}/******************************************************************************函數(shù)說明:LCD寫入命令入口數(shù)據(jù):dat 寫入的命令返回值:  無
******************************************************************************/
void LCD_WR_REG(unsigned char dat)
{LCD_DC_Clr();//寫命令LCD_Writ_Bus(dat);LCD_DC_Set();//寫數(shù)據(jù)
}

以上內(nèi)容都是hal_tftlcd.c 和hal_tftlcd.h文件內(nèi)容,都是有關于stm32外設 DMA SPI3 的初始化的函數(shù).

以下內(nèi)容將會是mt_tftlcd.c 和mt_tftlcd.h文件內(nèi)容,都是有關于模塊 LCD屏幕 的初始化內(nèi)容,LCD屏幕模塊的初始化都是基于stm32外設初始化的函數(shù)寫的,所以模塊的初始化函數(shù)都是調(diào)用外設初始化函數(shù)組合而成的,底層就是stm32外設的初始化函數(shù),模塊的初始化函數(shù)和代碼,相對來說是應用層代碼。所以,mt文件中是應用層驅(qū)動代碼,hal文件中是底層驅(qū)動代碼。

LCD屏幕初始化和LCD填充函數(shù)

LCD驅(qū)動和LCD相關其他驅(qū)動函數(shù),我們直接從官方參考的例程移植過來使用即可,不需要自己深入的研究。

void mt_tftlcd_init(void);

LCD_Fill(unsigned short xsta,unsigned short ysta,unsigned short xend,unsigned short yend,unsigned short color);

注意:不論是底層驅(qū)動代碼還是應用層驅(qū)動代碼,都是基于配置STM32寄存器寫的程序,不要求深入研究,會調(diào)用即可;應用層驅(qū)動程序是基于底層驅(qū)動程序編程的。

mt_tftlcd.c代碼

#include "mt_Tftlcd.h"
#include "hal_tftlcd.h"static void hal_tftlcd_Delay(unsigned int de);
unsigned char ColorBuf[640];void mt_tftlcd_init(void)
{hal_tftlcdConfig();//初始化GPIOhal_tftlcd_Delay(10000);hal_oled_RestL();//復位hal_tftlcd_Delay(10000);hal_oled_RestH();hal_tftlcd_Delay(100);//************* Start Initial Sequence **********//LCD_WR_REG(0x11);hal_tftlcd_Delay(10000);//delay_ms(100); //Delay 120msLCD_WR_REG(0X36);// Memory Access Controlif(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);else LCD_WR_DATA8(0xA0);LCD_WR_REG(0X3A);// LCD_WR_DATA8(0X03);   //12bitLCD_WR_DATA8(0X05);  //--------------------------------ST7789S Frame rate setting-------------------------LCD_WR_REG(0xb2);LCD_WR_DATA8(0x0c);LCD_WR_DATA8(0x0c);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x33);LCD_WR_DATA8(0x33);LCD_WR_REG(0xb7);LCD_WR_DATA8(0x35);//---------------------------------ST7789S Power setting-----------------------------LCD_WR_REG(0xbb);LCD_WR_DATA8(0x35);LCD_WR_REG(0xc0);LCD_WR_DATA8(0x2c);LCD_WR_REG(0xc2);LCD_WR_DATA8(0x01);LCD_WR_REG(0xc3);LCD_WR_DATA8(0x13);LCD_WR_REG(0xc4);LCD_WR_DATA8(0x20);LCD_WR_REG(0xc6);LCD_WR_DATA8(0x0f);LCD_WR_REG(0xca);LCD_WR_DATA8(0x0f);LCD_WR_REG(0xc8);LCD_WR_DATA8(0x08);LCD_WR_REG(0x55);LCD_WR_DATA8(0x90);LCD_WR_REG(0xd0);LCD_WR_DATA8(0xa4);LCD_WR_DATA8(0xa1);//--------------------------------ST7789S gamma setting------------------------------LCD_WR_REG(0xe0);LCD_WR_DATA8(0xd0);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x06);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x0b);LCD_WR_DATA8(0x2a);LCD_WR_DATA8(0x3c);LCD_WR_DATA8(0x55);LCD_WR_DATA8(0x4b);LCD_WR_DATA8(0x08);LCD_WR_DATA8(0x16);LCD_WR_DATA8(0x14);LCD_WR_DATA8(0x19);LCD_WR_DATA8(0x20);LCD_WR_REG(0xe1);LCD_WR_DATA8(0xd0);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x06);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x0b);LCD_WR_DATA8(0x29);LCD_WR_DATA8(0x36);LCD_WR_DATA8(0x54);LCD_WR_DATA8(0x4b);LCD_WR_DATA8(0x0d);LCD_WR_DATA8(0x16);LCD_WR_DATA8(0x14);LCD_WR_DATA8(0x21);LCD_WR_DATA8(0x20);LCD_WR_REG(0x29);hal_Oled_Display_on();//打開背光LCD_Fill(0,0,LCD_W,LCD_H,RED);
} /******************************************************************************函數(shù)說明:設置起始和結(jié)束地址入口數(shù)據(jù):x1,x2 設置列的起始和結(jié)束地址y1,y2 設置行的起始和結(jié)束地址返回值:  無
******************************************************************************/
void LCD_Address_Set(unsigned short x1,unsigned short y1,unsigned short x2,unsigned short y2)
{LCD_WR_REG(0x2a);//列地址設置LCD_WR_DATA(x1+2);LCD_WR_DATA(x2+2);LCD_WR_REG(0x2b);//行地址設置LCD_WR_DATA(y1+1);LCD_WR_DATA(y2+1);LCD_WR_REG(0x2c);//儲存器寫
}static void hal_tftlcd_Delay(unsigned int de)
{while(de--);
}void LCD_Fill(unsigned short xsta,unsigned short ysta,unsigned short xend,unsigned short yend,unsigned short color)
{          unsigned short i; LCD_Address_Set(xsta,ysta,xend-1,yend-1);//設置顯示范圍for(i=0;i<xend;i++){ColorBuf[i++] = color>>8;ColorBuf[i] = color;}for(i=ysta;i<yend*2;i++){		DMA_SPI3_TX(ColorBuf,xend);}	
}

mt_Tftlcd.h代碼

#ifndef ____MT_TFTLCD_H_
#define ____MT_TFTLCD_H_#define USE_HORIZONTAL 3  //設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏#if USE_HORIZONTAL==0||USE_HORIZONTAL==1#define LCD_W 240
#define LCD_H 320#else
#define LCD_W 320
#define LCD_H 240
#endif///RGB565
#define WHITE         	 0xFFFF
#define BLACK         	 0x0000	  
#define BLUE           	 0x001F  
#define BRED                  0XF81F
#define GRED 		 0XFFE0
#define GBLUE	         0X07FF
#define RED           	         0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 			     0XBC40 //棕色
#define BRRED 			     0XFC07 //棕紅色
#define GRAY  			     0X8430 //灰色
#define DARKBLUE      	 0X01CF	//深藍色
#define LIGHTBLUE      	 0X7D7C	//淺藍色  
#define GRAYBLUE       	 0X5458 //灰藍色
#define LIGHTGREEN     	 0X841F //淺綠色
#define LGRAY 			     0XC618 //淺灰色(PANNEL),窗體背景色
#define LGRAYBLUE        0XA651 //淺灰藍色(中間層顏色)
#define LBBLUE           0X2B12 //淺棕藍色(選擇條目的反色)enum
{FORTSIZE_12 = 12,FORTSIZE_16 = 16,	FORTSIZE_24 = 24,FORTSIZE_32 = 32,	FORTSIZE_48 = 48,	
};#define HUE_LCD_FONT     WHITE
#define HUE_LCD_BACK     BLACK//YELLOW  //BLACK//
#define HUE_FONT_BACK    GRAYvoid mt_tftlcd_init(void);
void LCD_Fill(unsigned short xsta,unsigned short ysta,unsigned short xend,unsigned short yend,unsigned short color);
#endif

功能測試驗證

LCD屏幕全屏顯示黃色,表示驅(qū)動完成OK。

http://m.aloenet.com.cn/news/43359.html

相關文章:

  • 滄州大型網(wǎng)站建設開發(fā)網(wǎng)站多少錢
  • 如何用網(wǎng)站賺錢湖南省人民政府官網(wǎng)
  • 為解析的域名做網(wǎng)站企業(yè)宣傳推廣方案
  • dreamweaver網(wǎng)站建設教程新網(wǎng)站怎么推廣
  • 簡歷網(wǎng)站有哪些廈門人才網(wǎng)官網(wǎng)招聘
  • 南昌做任務的網(wǎng)站網(wǎng)站可以自己做嗎
  • 酒店網(wǎng)站建設注意什么四川seo選哪家
  • 網(wǎng)站模板 psd免費注冊個人網(wǎng)站不花錢
  • 一家專業(yè)做家譜的網(wǎng)站seo網(wǎng)站內(nèi)容優(yōu)化
  • 做網(wǎng)站收入來源表寧波營銷型網(wǎng)站建設優(yōu)化建站
  • 專注七星彩網(wǎng)站開發(fā)品牌運營公司
  • 制作網(wǎng)頁的軟件都有哪些內(nèi)蒙古seo
  • 展示型網(wǎng)站系統(tǒng)營銷最好的方法
  • 商城網(wǎng)站離不開支付系統(tǒng)推廣普通話宣傳內(nèi)容
  • 三站合一的網(wǎng)站怎么做網(wǎng)址大全百度
  • 重慶榮昌網(wǎng)站建設費用疫情優(yōu)化調(diào)整
  • 寧波網(wǎng)站建設哪里有今天新聞摘抄十條
  • 設計網(wǎng)站設計網(wǎng)站怎么制作公司網(wǎng)頁
  • 網(wǎng)站子站建設合同樣本免費網(wǎng)頁制作平臺
  • 網(wǎng)站建設微信運營公司seo流量
  • 營銷型網(wǎng)站建設中國最好的網(wǎng)絡營銷公司
  • 安慶什么網(wǎng)站做火商丘seo優(yōu)化
  • 剛做網(wǎng)站做什么網(wǎng)站好點互聯(lián)網(wǎng)營銷師培訓費用是多少
  • 北京網(wǎng)站備案速度電商代運營收費標準
  • 廈門網(wǎng)站建設開發(fā)公司百度關鍵詞指數(shù)查詢工具
  • 昆明市城鄉(xiāng)建設局網(wǎng)站網(wǎng)絡營銷方式有哪幾種
  • 成都個人網(wǎng)站制作公司網(wǎng)絡最有效的推廣方法
  • 桂林做網(wǎng)站多少錢贛州seo推廣
  • 做網(wǎng)站商城前景怎么樣上海seo有哪些公司
  • 網(wǎng)頁設計實訓總結(jié)1500字寧波企業(yè)seo服務