91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ST7735-TFT屏幕驅動 整理有stm32/51單片機/arduino等驅動代碼

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2025-04-18 10:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

不久前我們收到用戶反饋問題中,多次反饋各種不同型號的屏幕驅動不起來,從0開始編寫代碼花費大量時間,也有不少初次學習驅動屏幕代碼編寫經(jīng)驗過少等問題,為此我們決定以文章的形式發(fā)布到出來分享相應的一些經(jīng)驗以及收集整理好的資料,希望可以幫助用戶更加簡單的學習或快速移植代碼進行項目開發(fā)。

后續(xù)我們將陸續(xù)分享有關ST7789、GC9A01、ST7735、ILI9341等驅動IC的屏幕驅動案例。

還是老樣子需要整理好的代碼可以在評論區(qū)留言郵箱!

關于ST7735

市面采用ST7789驅動IC的屏幕不算少見,本人有幸使用過的屏幕中有一款1.44寸和一款1.8寸的屏幕驅動芯片ST7735,兩者的分辨率為128x128、128x160,比較遺憾的一個點是這款驅動芯片驅動的一些屏幕市面上分辨率相對比較低,顯示效果不如之前使用的ST7789GC9A01好,這里有網(wǎng)上搜集加上自己編寫以及移植整理有stm32f10x、stm32f407、arduino、stc89c516、ESP32單片機代碼,需要整理好的代碼可以在評論區(qū)留言郵箱!

綜合了解并觀察屏幕一下的一些參數(shù)之后開始進行驅動。

硬件接口使用的 2.54mm 間距的排針接口,這使用杜邦線進行連接,需要設計到自己的PCB上高度也是剛好匹配上面的銅柱做定位使用的。

ST7735參數(shù)
供電電壓3.3~5.5V
驅動ICST7735
分辨率128x128/128x160
尺寸1.44 / 1.8寸
驅動接口4線SPI

產(chǎn)商在屏幕設計上添加了3.3V穩(wěn)壓芯片以及電平轉換芯片,使得這款原本3.3V供電的裸屏可以兼容5V和3.3V的單片機,這也意味著arduino51單片機的用戶也可以驅動這款屏幕了,雖然51單片機性能很一般但總比不能驅動的好。

最后了解各個引腳功能之后就可以開始進行驅動

引腳名稱引腳功能
VCC電源正,3.3 - 5V,需要與通信電平一致
GND電源負,地
CS片選,低電平使能
RST復位,低電平使能
DC數(shù)據(jù)/命令選擇,低電平命令,高電平數(shù)據(jù)
SDASPI數(shù)據(jù)輸入端口
SCLSPI時鐘信號輸入端口
BLK背光,懸空使能接地關閉,默認上拉至3.3V

stm32驅動

引腳接線

代碼方面先按照下表接好線燒錄程序之后再對代碼移植的關鍵部分進行說明

stm32f10xST7735
3V3VIN
GNDGND
CSPB6
RSTPA6
DCPA7
SDAPA4
SCLPA5
BLKPB7

BLK背光引腳不用可以懸空不接

默認的代碼燒錄進行之后顯示上面圖片中大大的 優(yōu)信電子logo,先把示例代碼驅動起來,如果示例代碼驅動不起來先檢查一下接線供電方面的問題,不然后面代碼改了半天沒有用找問題就和我剛驅動的時候一樣頭皮發(fā)麻。


驅動成功之后用戶可以開始移植代碼。

代碼移植

文件復制

lcdlcd_initC文件h文件復制到自己的工程里面,這四個文件包含屏幕初始化以及驅動畫點劃線顯示文字圖像的代碼。
另外還有兩個文件為image.hlcdfont.h,這兩個文件分別存儲顯示圖片數(shù)組與顯示文字數(shù)組。

復制到自己工程中編譯后會報錯,因為缺少了pbdata.h中的毫秒級延時函數(shù),可以把原工程中的ms延時函數(shù)復制過來也可以使用自己編寫的,名稱與下面的相同即可

void delay_ms(u16 a)

添加好文件到工程里面之后再次編譯一般不會報錯,如果仍然報錯就只能看具體報錯信息去修改了

和上面的接線不變,編寫下面主函數(shù)先進行測試

int main(void)
{
    LCD_Init();
    LCD_Fill(0,0,LCD_W,LCD_H,WHITE);   //填充為白色背景色
    while(1)
    {
        LCD_ShowPicture(0,0,LCD_W,LCD_H,YXDZ_logo);   //顯示一張圖片
    }
}

需要用戶修改的接口一般有一下幾個點

端口修改

lcdfont.h文件中包含對使用引腳的宏定義,修改其中的GPIO以及引腳即可修改使用的端口

//-----------------LCD端口定義---------------- 

#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_5)//SCL=SCLK
#define LCD_SCLK_Set() GPIO_SetBits(GPIOA,GPIO_Pin_5)

#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_4)//SDA=MOSI
#define LCD_MOSI_Set() GPIO_SetBits(GPIOA,GPIO_Pin_4)

#define LCD_RES_Clr()  GPIO_ResetBits(GPIOA,GPIO_Pin_6)//RES
#define LCD_RES_Set()  GPIO_SetBits(GPIOA,GPIO_Pin_6)

#define LCD_DC_Clr()   GPIO_ResetBits(GPIOA,GPIO_Pin_7)//DC
#define LCD_DC_Set()   GPIO_SetBits(GPIOA,GPIO_Pin_7)

#define LCD_CS_Clr()   GPIO_ResetBits(GPIOB,GPIO_Pin_6)//CS
#define LCD_CS_Set()   GPIO_SetBits(GPIOB,GPIO_Pin_6)

#define LCD_BLK_Clr()  GPIO_ResetBits(GPIOB,GPIO_Pin_7)//BLK
#define LCD_BLK_Set()  GPIO_SetBits(GPIOB,GPIO_Pin_7)
但值得注意的是僅僅修改這里的`宏定義`是沒辦法使用的,在`lcdfont.c`文件中包含著對`GPIO引腳`以及`時鐘初始化`的函數(shù)需要進行端口的修改
void LCD_GPIO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);     //使能端口時鐘
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;     
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽輸出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
     GPIO_Init(GPIOA, &GPIO_InitStructure);
     GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽輸出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
     GPIO_Init(GPIOB, &GPIO_InitStructure);
     GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);
}

修改完這里之后才算是將端口修改完畢

lcdfont.h頂部還有兩個宏定義可以自行決定是否修改,分別對應這屏幕顯示方向屏幕分辨率的參數(shù)

#define USE_HORIZONTAL 0  //設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏

#define LCD_W 240
#define LCD_H 240

顯示函數(shù)

lcd.h中包含了屏幕顯示內容的函數(shù),以及部分顏色的色號主要用于刷新屏幕背景色

void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);//指定區(qū)域填充顏色
void LCD_DrawPoint(u16 x,u16 y,u16 color);//在指定位置畫一個點
void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color);//在指定位置畫一條線
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);//在指定位置畫一個矩形
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);//在指定位置畫一個圓

void LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示漢字串
void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示單個12x12漢字
void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示單個16x16漢字
void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示單個24x24漢字
void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示單個32x32漢字

void LCD_ShowChar(u16 x,u16 y,u8 num,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示一個字符
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode);//顯示字符串
u32 mypow(u8 m,u8 n);//求冪
void LCD_ShowIntNum(u16 x,u16 y,u16 num,u8 len,u16 fc,u16 bc,u8 sizey);//顯示整數(shù)變量
void LCD_ShowFloatNum1(u16 x,u16 y,float num,u8 len,u16 fc,u16 bc,u8 sizey);//顯示兩位小數(shù)變量

void LCD_ShowPicture(u16 x,u16 y,u16 length,u16 width,const u8 pic[]);//顯示圖片


//畫筆顏色
#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 //淺棕藍色(選擇條目的反色)

在使用的時候只需要看后面的中文注釋調用對應的函數(shù)即可,非常方便使用

但是如果需要顯示文字圖片的話只是直接調用上面的函數(shù)還不夠,漢字數(shù)組存儲的lcdfont.h文件中只包含了中英文字母、數(shù)字、符號以及非常少量的中文數(shù)組,中文數(shù)組存儲在以下幾個數(shù)組中,按照相同的格式自行添加進去即可

中文漢字數(shù)組

typedef struct 
{
    unsigned char Index[2];    
    unsigned char Msk[24];
}typFNT_GB12; 
const typFNT_GB12 tfont12[]={
"優(yōu)",0x24,0x01,0x24,0x02,0x22,0x00,0xFA,0x07,0xA3,0x00,0xA2,0x00,0xA2,0x00,0xA2,0x00,
0x92,0x00,0x92,0x04,0x8A,0x04,0x06,0x07,
"信",0x44,0x00,0x84,0x00,0xFA,0x07,0x02,0x00,0xF3,0x03,0x02,0x00,0xF2,0x03,0x02,0x00,
0xF2,0x03,0x12,0x02,0xF2,0x03,0x12,0x02,
"電",0x10,0x00,0x10,0x00,0xFF,0x01,0x11,0x01,0x11,0x01,0xFF,0x01,0x11,0x01,0x11,0x01,
0xFF,0x01,0x11,0x04,0x10,0x04,0xE0,0x07,
"子",0x00,0x00,0xFC,0x01,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0xFF,0x07,0x20,0x00,
0x20,0x00,0x20,0x00,0x20,0x00,0x38,0x00,
};

typedef struct 
{
    unsigned char Index[2];    
    unsigned char Msk[32];
}typFNT_GB16; 
const typFNT_GB16 tfont16[]={
"優(yōu)",0x10,0x09,0x10,0x11,0x10,0x11,0x08,0x01,0xE8,0x7F,0x0C,0x05,0x0C,0x05,0x0A,0x05,
0x09,0x05,0x08,0x05,0x88,0x04,0x88,0x44,0x88,0x44,0x48,0x44,0x48,0x78,0x28,0x00,
"信",0x10,0x02,0x10,0x04,0xD0,0x7F,0x08,0x00,0x08,0x00,0x8C,0x3F,0x0C,0x00,0x0A,0x00,
0x89,0x3F,0x08,0x00,0x08,0x00,0x88,0x3F,0x88,0x20,0x88,0x20,0x88,0x3F,0x88,0x20,
"電",0x80,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,
0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x50,0x80,0x40,0x80,0x40,0x00,0x7F,
"子",0x00,0x00,0xFE,0x1F,0x00,0x08,0x00,0x04,0x00,0x02,0x80,0x01,0x80,0x00,0xFF,0x7F,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,
};

數(shù)組名字里面的GB12GB16代表了12號字體16號字體的數(shù)組,文件中也有24號32號

圖片

圖片存儲在image.h文件中,圖片文件中的內容比較簡單,一個純數(shù)組取模放進去的

const unsigned char YXDZ_logo[32768] =  { /* 0X10,0X10,0X00,0X80,0X00,0X80,0X01,0X1B, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
...................
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};

記得在數(shù)組前面加const就行

其他單片機驅動

使用其他單片機編寫的代碼顯示的效果與上面的STM32的相同,都是一張圖片,空間不夠的單片機只是顯示了一張小一點的圖片。

51單片機

51單片機程序由stm32的移植過去的,所以是一樣的使用,唯一的區(qū)別是51單片機空間小顯示不了大圖片,速度也比較慢。

arduino/ESP32

arduinoESP32的代碼也是從原來STM32的移植過去的,不過因為編譯器不同做了比較多的修改,總體上做的函數(shù)接口stm32的是一致的并沒有做修改,由于數(shù)據(jù)兼容性不一樣在調用漢字顯示之類的功能的時候需要對數(shù)據(jù)做類型轉換,如下所示的中文漢字顯示函數(shù)調用。

LCD_ShowChinese(0,0,(unsigned char*)"優(yōu)信電子",RED,WHITE,32,0);

其他的參數(shù)沒發(fā)現(xiàn)有哪里和STM32函數(shù)上的不同,由于是移植,并沒有像C++一樣做庫進行使用(還是懶。。。),所以函數(shù)修改還是在文件中進行修改,而不是聲明的方式去定義使用引腳,用戶修改使用引腳的話只需要打開lcd_init.h文件找到下面的代碼段,看到了自然知道怎么進行修改。

//-----------------LCD端口定義---------------- 
#define CS 5
#define RST 33
#define DC 27
#define SDA 23
#define SCL 18
#define BLK 22

沒有采用硬件SPI,所以速度沒有想象中的那么快,確實肉眼可見的慢了很多。

總結

后續(xù)我們將編寫、移植或者收集測試好的一些屏幕代碼分享相應的一些LCD、OLED等顯示器件的驅動案例,也由衷的感謝中景園開源了如此優(yōu)秀的LCD驅動庫非常方便了用戶的使用與移植,供大家共同學習進步,前行路上,優(yōu)信與大家同在,歡迎一鍵三連,感謝各位大佬!

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5199

    文章

    20454

    瀏覽量

    334265
  • STM32
    +關注

    關注

    2310

    文章

    11162

    瀏覽量

    373521
  • Arduino
    +關注

    關注

    190

    文章

    6526

    瀏覽量

    196966
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TFT-LCD液晶驅動線路及其激光修復方法

    一、引言 TFT-LCD液晶驅動線路是實現(xiàn)像素精準驅動與顯示控制的核心鏈路,主要由柵極驅動線路(橫向)、數(shù)據(jù)驅動線路(縱向)及薄膜晶體管(
    的頭像 發(fā)表于 02-12 15:08 ?412次閱讀

    小白也能聽懂的單片機知識路徑

    已經(jīng)掌握了51單片機的基礎知識,包括編程邏輯、硬件接口。這將有助于你更快地適應STM32的學習節(jié)奏。 STM32學習要點: 硬件平臺:選
    發(fā)表于 02-04 16:44

    RA MCU眾測寶典 | SPI驅動TFT屏幕

    IC是ST7735。實驗的主要目的是根據(jù)屏幕的引腳定義來調用FSP庫的SPI功能,為之后的項目模塊整合打個基礎。01硬件部分1.8寸TFT屏幕的引腳定義如下:觀察
    的頭像 發(fā)表于 02-03 17:02 ?7514次閱讀
    RA MCU眾測寶典 | SPI<b class='flag-5'>驅動</b><b class='flag-5'>TFT</b><b class='flag-5'>屏幕</b>

    STM32驅動4寸ST7796S LCD-TFT

    屏幕驅動芯片ST7796S最大支持320*480分辨率的屏幕,顯存GRAM達345600字節(jié),支持8/9/16/18/24位并口數(shù)據(jù)總線,還支持3/4線制SPI通信。
    的頭像 發(fā)表于 02-01 11:15 ?1509次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>驅動</b>4寸<b class='flag-5'>ST</b>7796S LCD-<b class='flag-5'>TFT</b>屏

    類似51單片機可以能驅動智能顯示模塊嗎?

    51單片機就可以驅動智能顯示模塊嗎?
    發(fā)表于 01-19 15:50

    51單片機RS485編程實例資料

    詳細介紹51單片機RS485通信接線和編程代碼
    發(fā)表于 10-20 14:57 ?4次下載

    INA240電流檢測放大器使用及電流計算(附STM32驅動代碼

    引腳定義、4種可選增益及電流量程計算公式,并通過實例演示了如何計算最大/最小電流。用stm32單片機實現(xiàn)電壓、電流的實時采樣檢測并顯示。適用于電機驅動、螺線管控制需要精確電流檢測的場
    的頭像 發(fā)表于 09-28 17:32 ?1652次閱讀
    INA240電流檢測放大器使用及電流計算(附<b class='flag-5'>STM32</b><b class='flag-5'>驅動</b><b class='flag-5'>代碼</b>)

    [ADC/AFE] [求助] 求CS1239的驅動代碼和資料

    正在準備使用貴司的CS1239應用到我們的項目中,希望能提供該芯片的單片機驅動代碼51STM32)、單端應用的參考原理圖和數(shù)據(jù)手冊,謝謝
    發(fā)表于 09-26 09:14

    單片機最小系統(tǒng)工作原理及搭建

    單片機最小系統(tǒng)是指使單片機正常運行所需的最簡電路配置,它是所有單片機應用的開發(fā)基礎。以下是其核心組成、工作原理及搭建指南: 一、最小系統(tǒng)核心組成 單片機芯片 常見型號 :STC89C
    的頭像 發(fā)表于 08-11 10:55 ?3567次閱讀
    <b class='flag-5'>單片機</b>最小系統(tǒng)工作原理及搭建

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置中,電機是重要的執(zhí)行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據(jù)電機類型和功率,搭配合適的
    的頭像 發(fā)表于 07-25 09:31 ?935次閱讀

    使用USB轉TTL串口板和ST-LINK調試下載器給STM32單片機下載程序

    本文詳細介紹如何使用ST-LINK/V2和USB轉TTL串口板為STM32單片機下載程序,包括STM32啟動模式、JTAG與SWD接口對比、驅動
    的頭像 發(fā)表于 06-20 17:26 ?2780次閱讀
    使用USB轉TTL串口板和<b class='flag-5'>ST</b>-LINK調試下載器給<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>下載程序

    2.4寸TFT彩屏配套測試程序-51單片機

    如題,2.4寸TFT彩屏配套測試程序-51單片機。
    發(fā)表于 06-04 16:26 ?0次下載

    GC9A01-TFT屏幕驅動整理stm32/51單片機/arduino驅動代碼

    不久前我們收到用戶反饋問題中,多次反饋各種不同型號的屏幕驅動不起來,從0開始編寫代碼花費大量時間,也有不少初次學習驅動屏幕
    的頭像 發(fā)表于 04-25 11:29 ?1787次閱讀
    GC9A01-<b class='flag-5'>TFT</b><b class='flag-5'>屏幕</b><b class='flag-5'>驅動</b>(<b class='flag-5'>整理</b><b class='flag-5'>有</b><b class='flag-5'>stm32</b>/<b class='flag-5'>51</b><b class='flag-5'>單片機</b>/<b class='flag-5'>arduino</b><b class='flag-5'>等</b><b class='flag-5'>驅動</b><b class='flag-5'>代碼</b>)

    極簡LCD屏驅動實戰(zhàn),快速上手智能設備屏幕交互!

    Air780EPM已經(jīng)支持的LCDST7796/ST7789/ST7735/ST7735V/ST7
    的頭像 發(fā)表于 04-21 15:28 ?895次閱讀
    極簡LCD屏<b class='flag-5'>驅動</b>實戰(zhàn),快速上手智能設備<b class='flag-5'>屏幕</b>交互!

    基于51/32單片機按鍵控制步進電機正反轉,A4988驅動

    基于51/32單片機按鍵控制步進電機正反轉,A4988驅動
    發(fā)表于 04-14 15:05 ?7次下載