基於NUCLEO-G071RB控制1.8寸TFT的項目

G0板卡展示及介紹


1、圖片展示


試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目


2、硬件介紹

STM32G0x1:新一代入門級32位MCU,超過93%的 I/O利用率,其中板卡包含STM32G071RB(M0+內核64MHz、128K Flash和36K SRAM)+ST-Link/V2-1調試器+兩組擴展接口(Arduino、STmorpho擴展接口)。下面是它的硬件資源圖。


試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目


項目概述

TFT彩屏是目前應用最廣泛的液晶顯示屏之一,全稱是Thin Film Transistor,即薄膜晶體管,屬於有源矩陣液晶顯示器,以顯示效果細膩、無閃爍、視角大、超薄等特點獲得了廣泛應用。從電視電腦顯示屏,到手機等小屏幕設備都廣泛採用TFT彩屏。而且它可以“主動地”對屏幕上的各個獨立的像素進行控制,這樣可以大大提高反應時間。一般TFT的反應時間比較快,約80毫秒,而且可視角度大,一般可達到130度左右,主要運用在高端產品。從而可以做到高速度、高亮度、高對比度顯示屏幕信息。TFT屬於有源矩陣液晶顯示器,在技術上採用了“主動式矩陣”的方式來驅動,方法是利用薄膜技術所作成的電晶體電極,利用掃描的方法“主動拉”控制任意一個顯示點的開與關,光源照射時先通過下偏光板向上透出,藉助液晶分子傳導光線,通過遮光和透光來達到顯示的目的。

因此本次項目使用新的G0開發板來進行控制1.8寸TFT屏的點亮並進行顯示字符串和數字及圖片等等功能。

硬件設計

1、板卡原理圖


試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目

2、接線說明

本次所使用的1.8寸TFT屏幕接線只需要外接6根線,分別試電源正負及和4跟信號線,分別如下連接:

SCL(時鐘線):D8

SDA(數據線):D9

RST(復位):C4

CLR(清除):C5


軟件調試


1、TFT初始化

<code>void LCD_Init(void){  GPIO_InitTypeDef GPIO_InitStruct = {0};  /* GPIO Ports Clock Enable */  __HAL_RCC_GPIOC_CLK_ENABLE();  __HAL_RCC_GPIOD_CLK_ENABLE();  /*Configure GPIO pin Output Level */  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_RESET);  /*Configure GPIO pins : PC4 PC5 */  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull = GPIO_NOPULL;  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);  /*Configure GPIO pins : PD8 PD9 */  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull = GPIO_NOPULL;  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_SET);  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_SET);  //OLED_CS_Clr();  //打開片選使能   LCD_RST_Clr();   HAL_Delay(500);   LCD_RST_Set();   HAL_Delay(500);  //OLED_BLK_Set();    LCD_WR_REG(0x11);//Sleep exit    HAL_Delay(500);       //ST7735R Frame Rate  LCD_WR_REG(0xB1);   LCD_WR_DATA8(0x01);   LCD_WR_DATA8(0x2C);   LCD_WR_DATA8(0x2D);   LCD_WR_REG(0xB2);   LCD_WR_DATA8(0x01);   LCD_WR_DATA8(0x2C);   LCD_WR_DATA8(0x2D);   LCD_WR_REG(0xB3);   LCD_WR_DATA8(0x01);   LCD_WR_DATA8(0x2C);   LCD_WR_DATA8(0x2D);   LCD_WR_DATA8(0x01);   LCD_WR_DATA8(0x2C);   LCD_WR_DATA8(0x2D);     LCD_WR_REG(0xB4); //Column inveLCD_DC ion   LCD_WR_DATA8(0x07);     //ST7735R Power Sequence  LCD_WR_REG(0xC0);   LCD_WR_DATA8(0xA2);   LCD_WR_DATA8(0x02);   LCD_WR_DATA8(0x84);   LCD_WR_REG(0xC1);   LCD_WR_DATA8(0xC5);   LCD_WR_REG(0xC2);   LCD_WR_DATA8(0x0A);   LCD_WR_DATA8(0x00);   LCD_WR_REG(0xC3);   LCD_WR_DATA8(0x8A);   LCD_WR_DATA8(0x2A);   LCD_WR_REG(0xC4);   LCD_WR_DATA8(0x8A);   LCD_WR_DATA8(0xEE);     LCD_WR_REG(0xC5); //VCOM   LCD_WR_DATA8(0x0E);       LCD_WR_REG(0x36); //MX, MY, RGB mode   LCD_WR_DATA8(0xC0); #ifdef USE_LANDSCAPE  LCD_WR_DATA8(0xA8); //豎屏C8 橫屏08 A8#else  LCD_WR_DATA8(0xC8); //豎屏C8 橫屏08 A8#endif      //ST7735R Gamma Sequence  LCD_WR_REG(0xe0);   LCD_WR_DATA8(0x0f);   LCD_WR_DATA8(0x1a);   LCD_WR_DATA8(0x0f);   LCD_WR_DATA8(0x18);   LCD_WR_DATA8(0x2f);   LCD_WR_DATA8(0x28);   LCD_WR_DATA8(0x20);   LCD_WR_DATA8(0x22);   LCD_WR_DATA8(0x1f);   LCD_WR_DATA8(0x1b);   LCD_WR_DATA8(0x23);   LCD_WR_DATA8(0x37);   LCD_WR_DATA8(0x00);     LCD_WR_DATA8(0x07);   LCD_WR_DATA8(0x02);   LCD_WR_DATA8(0x10);   LCD_WR_REG(0xe1);   LCD_WR_DATA8(0x0f);   LCD_WR_DATA8(0x1b);   LCD_WR_DATA8(0x0f);   LCD_WR_DATA8(0x17);   LCD_WR_DATA8(0x33);   LCD_WR_DATA8(0x2c);   LCD_WR_DATA8(0x29);   LCD_WR_DATA8(0x2e);   LCD_WR_DATA8(0x30);   LCD_WR_DATA8(0x30);   LCD_WR_DATA8(0x39);   LCD_WR_DATA8(0x3f);   LCD_WR_DATA8(0x00);   LCD_WR_DATA8(0x07);   LCD_WR_DATA8(0x03);   LCD_WR_DATA8(0x10);      LCD_WR_REG(0x2a);  LCD_WR_DATA8(0x00);  LCD_WR_DATA8(0x00+2);  LCD_WR_DATA8(0x00);  LCD_WR_DATA8(0x80+2);  LCD_WR_REG(0x2b);  LCD_WR_DATA8(0x00);  LCD_WR_DATA8(0x00+3);  LCD_WR_DATA8(0x00);  LCD_WR_DATA8(0x80+3);    LCD_WR_REG(0xF0); //Enable test command    LCD_WR_DATA8(0x01);   LCD_WR_REG(0xF6); //Disable ram power save mode   LCD_WR_DATA8(0x00);   LCD_WR_REG(0x3A); //65k mode   LCD_WR_DATA8(0x05);   LCD_WR_REG(0x29);//Display on  }/<code>


2、顯示圖片程序

<code>void showimage() //顯示40*40圖片{    int i,j,k;   for(k=3;k<4;k++)  {       for(j=0;j<3;j++)    {        LCD_Address_set(40*j,40*k,40*j+39,40*k+39);    //座標設置        for(i=0;i<1600;i++)       {                           LCD_WR_DATA8(image[i*2+1]);            LCD_WR_DATA8(image[i*2]);               }       }  }}/<code>


3、顯示浮點數字程序

<code>//函數名 LCD_Show_Float//功能描述:顯示一個任意長度的float型常量或變量//入口參數:x_01,OLED的橫座標;y_01,OLED的頁數;can_0,要顯示的常量或變量;len,要顯示的小數位數。//返回值  :無//特別說明:輸入的小數位數要 低於或等於 所顯示數據的有效小數位數,否則由於浮點型數據的存儲方式 可能顯示出非有效小數位void LCD_Show_Float(unsigned char x_01,unsigned char y_01 ,floatcan_0,unsigned char len){        unsigned char cl_1,cl_2, m,t,real_len,reco_num;//cl_1,cl_2-cumulate累計1,i-小記錄, m,由於符號數據的移動位數, t-累加累減,real_len-數據真實長度,reco_num-數據記錄  unsigned long int can;//將小數部分全部放大成整數部分的值  unsigned int INT_P;//整數部分的值  unsigned int FLOAT_P;//小數部分化為整數的值  // x_01 += 8;  /*符號處理*/  if(can_0<0)  {    m=1;//由於符號,所有數據向右移位   LCD_P8X8(y_01,x_01,'-',POINT_COLOR,BACK_COLOR);    can_0=0-can_0;  }  else  {    m=1;//正號不顯示   LCD_P8X8(y_01,x_01,'+',POINT_COLOR,BACK_COLOR);  }   can = (int)  (can_0*LCD_Pow(10,len)) ;     INT_P = (int)can_0;  FLOAT_P =  (int)(can - INT_P*LCD_Pow(10,len));   /*計算整數部分長度*/  if(INT_P)  {    real_len=10;//設置整數部分可顯示的最大長度,隨意設!   for(t=0;t<real>/<code> 


效果演示

圖片演示


試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目

圖片演示

試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目

顯示字符串

試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目

顯示數字


試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目

顯示浮點數

總體展示


試用報告 | 基於NUCLEO-G071RB控制1.8寸TFT的項目


分享到:


相關文章: