日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

独木带你玩转彩屏——应用1驱动彩屏(寄存器spi版)

發布時間:2024/1/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 独木带你玩转彩屏——应用1驱动彩屏(寄存器spi版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

彩屏驅動

  • 1. 驅動彩屏
    • 1.1 初始化引腳
    • 1.2 初始化彩屏
  • 2. 彩屏涂色
  • 3. 結果展示
  • 4. 獲取資源

SPI驅動彩屏
筆者最近畫了個嘉立創的紫色版,上面布有彩屏模塊,不得不說嘉立創紫真的很nice!
是不是很cool
言歸正傳,筆者曾經在學長#巨大的八爪魚# 幫助下寫過一篇FSMC驅動彩屏的文章,但是筆者并沒有玩轉彩屏,所以這次要出系列彩屏文章,形成一個完整的彩屏項目

STM32F103VET6驅動彩屏TFT2.8(ili9341)HAL庫+標準庫

可是!
之前買的那塊微雪彩屏價格直逼one hundred yuans,
筆者果斷放棄,不用FSMC驅動,找個便宜的裸屏


點擊! 筆者購買的彩屏連接,便宜,還給你教程

言歸正傳 ,這次是真的!

1. 驅動彩屏

彩屏對應引腳
彩屏引腳
TFT_CSPA4
TFT_RESPE13
D/RPE8
SPI1_MOSIPA7
SPI1_MISOPA6
SPI1_SCKPA5
TFT_LED+3.3V
SPI3_MOSIPB5:
SPI3_MISOPB4
:SPI3_SCK:PB3:
T_CSPA15
T_IRQ:PE10-:
注!TFT_LED引腳我直接接到一個按鍵上,用按鍵控制背光燈

1.1 初始化引腳

//打開需要用到的功能,配置輸入輸出模式RCC->APB2ENR =RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPEEN | RCC_APB2ENR_SPI1EN | RCC_APB2ENR_TIM1EN ;GPIOA->CRH = (GPIOA->CRH & 0XFFFFF00F) | 0X4B0;GPIOE->CRH = (GPIOE->CRH & 0X00F00F0F) | 0X44037030; //spi初始化配置 void SPI1_Init(void) {/* SPI初始化 */GPIOA->CRL = (GPIOA->CRL & 0X0000FFFF) | 0Xb4bb0000;//spi引腳配置SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_SPE; } void LCD_GPIOInit(void) {//推挽輸出 RES/DR配置GPIOE->CRH = (GPIOE->CRH & 0XFF0FFFF0) | 0X300003;}
注!初始化引腳的內容就不羅嗦了
//低電平復位 void LCD_RESET(void) {LCD_RST_CLR;delay_ms(100); LCD_RST_SET;delay_ms(100); }

1.2 初始化彩屏

void LCD_Init(void) { SPI1_Init(); //硬件SPI1初始化LCD_GPIOInit();//LCD GPIO初始化 LCD_RESET(); //LCD 復位// LCD_WR_REG(0X01); 軟件res// Power control BLCD_WR_REG (0xcf);LCD_WR_DATA (0x00);LCD_WR_DATA (0x81);LCD_WR_DATA ( 0x30);// Power on sequence controlLCD_WR_REG (0xed);LCD_WR_DATA ( 0x64);LCD_WR_DATA ( 0x03);LCD_WR_DATA (0x12);LCD_WR_DATA ( 0x81);// Driver timing control ALCD_WR_REG (0xe8);LCD_WR_DATA (0x85);LCD_WR_DATA (0x10);LCD_WR_DATA (0x78);// Power control ALCD_WR_REG ( 0xcb);LCD_WR_DATA ( 0x39);LCD_WR_DATA (0x2c);LCD_WR_DATA (0x00);LCD_WR_DATA (0x34);LCD_WR_DATA ( 0x02);// Pump ratio controlLCD_WR_REG (0xf7);LCD_WR_DATA(0x20);// Driver timing control BLCD_WR_REG ( 0xea);LCD_WR_DATA ( 0x00);LCD_WR_DATA ( 0x00);// Frame Rate Control (In Normal Mode/Full Colors)LCD_WR_REG ( 0xb1);LCD_WR_DATA ( 0x00);LCD_WR_DATA ( 0x1b);// Display Function ControlLCD_WR_REG ( 0xb6);LCD_WR_DATA ( 0x0a);LCD_WR_DATA ( 0xa2);// Power Control 1LCD_WR_REG ( 0xc0);LCD_WR_DATA ( 0x35);// Power Control 2LCD_WR_REG ( 0xc1);LCD_WR_DATA ( 0x11);// VCOM Control 1LCD_WR_REG ( 0xc5);LCD_WR_DATA ( 0x45);LCD_WR_DATA ( 0x45);// VCOM Control 2LCD_WR_REG ( 0xc7);LCD_WR_DATA ( 0xa2);// Enable 3GLCD_WR_REG ( 0xf2);LCD_WR_DATA ( 0x00);// Gamma SetLCD_WR_REG ( 0x26);LCD_WR_DATA ( 0x01);// Positive Gamma CorrectionLCD_WR_REG ( 0xe0);LCD_WR_DATA ( 0x0f);LCD_WR_DATA ( 0x26);LCD_WR_DATA ( 0x24);LCD_WR_DATA ( 0x0b);LCD_WR_DATA ( 0x0e);LCD_WR_DATA ( 0x09);LCD_WR_DATA ( 0x54);LCD_WR_DATA ( 0xa8);LCD_WR_DATA ( 0x46);LCD_WR_DATA ( 0x0c);LCD_WR_DATA ( 0x17);LCD_WR_DATA ( 0x09);LCD_WR_DATA ( 0x0f);LCD_WR_DATA ( 0x07);LCD_WR_DATA ( 0x00);// Negative Gamma CorrectionLCD_WR_REG ( 0xe1);LCD_WR_DATA ( 0x00);LCD_WR_DATA ( 0x19);LCD_WR_DATA ( 0x1b);LCD_WR_DATA ( 0x04);LCD_WR_DATA ( 0x10);LCD_WR_DATA ( 0x07);LCD_WR_DATA ( 0x2a);LCD_WR_DATA ( 0x47);LCD_WR_DATA ( 0x39);LCD_WR_DATA ( 0x03);LCD_WR_DATA ( 0x06);LCD_WR_DATA ( 0x06);LCD_WR_DATA ( 0x30);LCD_WR_DATA ( 0x38);LCD_WR_DATA ( 0x0f);// Pixel Format SetLCD_WR_REG ( 0x3a);LCD_WR_DATA ( 0x55);// Sleep OutLCD_WR_REG ( 0x11);delay_ms(120);// ILI9341_SetScanDirection(0); // 設置掃描方向LCD_WR_REG ( 0x29); // 允許顯示顯存中的圖像 (后面還需要打開背光才能開顯示)LCD_direction(USE_HORIZONTAL);//設置LCD顯示方向LCD_Clear(WRITE);//清全屏白色 }

上面的初始化的命令和數據都是根據ILI9341手冊上寫的,如下圖

Power control B 對應著手冊上的Command cfh ,后面的數據就是對應下面的三個參數分別為 0X00 0X81 0X30

運行代碼,現在應該是 白色了,但是我們無法確定是否真的驅動成功,所以下面我們就要對屏幕進行涂色

2. 彩屏涂色

//這段代碼是賣家給出的清屏代碼,函數詳細我再下面代碼中注釋了 void LCD_Clear(u16 Color) {unsigned int i,m; /*這個函數是設置顯示圖框,顯示的橫縱坐標起點和終點*/LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1); LCD_CS_CLR;//將spi的cs拉低LCD_RS_SET;//rs置一for(i=0;i<lcddev.height;i++)//for循環遍歷像素點{for(m=0;m<lcddev.width;m++){ Lcd_WriteData_16Bit(Color);//將顏色數據寫進去,顯示在每個像素點}}LCD_CS_SET;//拉高 數據發送完畢 }
涂色,發現彩屏并不是所有像素點都顯示了紅色,有三橫的像素點顯示不正常
回到初始化彩屏代碼,其中的sleep out 命令#退出低功耗模式,下面有個120ms的延時, 筆者將延時去掉
結果如上圖更多橫的像素點沒有被涂色
所以將延時改到150ms,像素點顯示正常,筆者將其定義為,彩屏未完全睡醒
注:sleep out 初始化時必須要有的不然屏幕就是一直處于低功耗狀態,一直為白屏,有興趣的朋友可以嘗試通過按鍵來切換彩屏的狀態

3. 結果展示

測試展示圖
嘿嘿!先來看看結果視頻

4. 獲取資源

【獲取資源】

1.資源鏈接:點擊獲取
2.關注微信公眾號后臺回復:SPI驅動彩屏

【注意】

資源中有彩屏文字顯示測試、圖片顯示測試、還有圖形顯示測試。

后續筆者將更新彩屏文字顯示等應用的文章
【關注微信公眾號一起來交流】

·

總結

以上是生活随笔為你收集整理的独木带你玩转彩屏——应用1驱动彩屏(寄存器spi版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。