本文來源電子發(fā)燒友社區(qū),作者:李唐, 帖子地址:https://bbs.elecfans.com/jishu_2248438_1_1.html
前面介紹過I2C接口的OLED屏顯示驅(qū)動(dòng),這次介紹的是驅(qū)動(dòng)SPI接口的顯示屏,其中一款是LCD5110,一款是0.96寸的LCD顯示屏,一款是 2.2寸TFT顯示屏。
前面介紹過I2C接口的OLED屏顯示驅(qū)動(dòng),這次介紹的是驅(qū)動(dòng)SPI接口的顯示屏,其中一款是LCD5110,一款是0.96寸的LCD顯示屏,一款是 2.2寸TFT顯示屏。
LCD5110是一款用用于諾基亞手機(jī)的顯示屏LCD5110,該顯示屏的顯示效果如圖1和圖2所示。
![poYBAGIBAduAS7W3AABOjQUxvIQ816.jpg](https://file.elecfans.com/web2/M00/2F/24/poYBAGIBAduAS7W3AABOjQUxvIQ816.jpg)
圖1顯示效果
![poYBAGIBAd2AAbB0AABRowBIlLg922.jpg](https://file.elecfans.com/web2/M00/2F/24/poYBAGIBAd2AAbB0AABRowBIlLg922.jpg)
圖2顯示效果
為驅(qū)動(dòng)該顯示屏,它與開發(fā)板的連接關(guān)系為:
CLK---PB0
DIN---PB1
DC ---PB2
RST---PB3
CS ---PB4
為驅(qū)動(dòng)的方便,這里仍使用GPIO口來模擬SPI接口來實(shí)現(xiàn),其輸出高低電平的語句定義為:
#define LCD_CLK_HGPIO_Write(GPIOB,PIN0,GPIO_SET)
#define LCD_DIN_LGPIO_Write(GPIOB,PIN1,GPIO_RESET)
#define LCD_DIN_HGPIO_Write(GPIOB,PIN1,GPIO_SET)
#define LCD_DC_L GPIO_Write(GPIOB,PIN2,GPIO_RESET)
#define LCD_DC_H GPIO_Write(GPIOB,PIN2,GPIO_SET)
#define LCD_RST_LGPIO_Write(GPIOB,PIN3,GPIO_RESET)
#define LCD_RST_HGPIO_Write(GPIOB,PIN3,GPIO_SET)
#define LCD_CS_L GPIO_Write(GPIOB,PIN4,GPIO_RESET)
#define LCD_CS_H GPIO_Write(GPIOB,PIN4,GPIO_SET)
對LCD5110的初始化函數(shù)為:
- void LCD5110_Init(void)
- {
- Delay32M_ms(800);
- LCD_reset_hard;
- LCD_write_cmd(0x21);
- LCD_write_cmd(0x06);
- LCD_write_cmd(0x13);
- LCD_write_cmd(0xc8);
- LCD_write_cmd(0x20);
- LCD_write_cmd(0x0c);
- LCD_write_cmd(Y_Page_Addr);
- LCD_write_cmd(X_Col_Addr);
- LCD_clr_scr();
- }
實(shí)現(xiàn)字節(jié)數(shù)據(jù)發(fā)送的函數(shù)為:
- void LCD_write_byte(unsigned char wbyte, unsigned char dat_cmd)
- {
- unsigned char i;
- LCD_CS_L;
- if(dat_cmd)
- {
- LCD_DC_H;
- }
- else
- {
- LCD_DC_L;
- }
- for(i = 8; i; i--)
- {
- if(wbyte & 0x80)
- {
- LCD_DIN_H;
- }
- else
- {
- LCD_DIN_L;
- }
- Delay_us(2);
- LCD_CLK_L;
- wbyte <<= 1;
- Delay_us(2);
- LCD_CLK_H;
- }
- LCD_CS_H;
- }
清除顯示屏的函數(shù)為:
- void LCD_clr_scr(void)
- {
- unsigned int i;
- LCD_write_cmd(X_Col_Addr);
- LCD_write_cmd(Y_Page_Addr);
- for(i = 504; i; i--) LCD_write_dat(0x00);
- }
實(shí)現(xiàn)圖示效果的主程序?yàn)椋?/font>
- int main(void)
- {
- int16_t i;
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOB,PIN0,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN2,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN3,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN4,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
- GPIO_Write(GPIOA,PIN8,GPIO_SET);
- LCD5110_Init();
- LCD_prints(0,0,"CSM32RV20");
- LCD_prints(0,1,"LCD5110 ");
- LCD_prints(0,2,"jinglixixi");
- while(1)
- {
- GPIO_Toggle(GPIOA,PIN8);
- for(i=0;i<10;i++)
- {
- Delay32M_us(50000);
- }
- }
- }
對于另一款0.96寸的彩色LCD屏,它也是使用SPI接口工作。相較于LCD5110顯示屏,該顯示屏可以顯示彩色的圖片。
該顯示屏的初始化函數(shù)為:
- void OLED_Init(void)
- {
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- Delay32M_ms(800);
- OLED_WR_Byte(0xAE,OLED_CMD);
- OLED_WR_Byte(0x02,OLED_CMD);
- OLED_WR_Byte(0x10,OLED_CMD);
- OLED_WR_Byte(0x40,OLED_CMD);
- OLED_WR_Byte(0x81,OLED_CMD);
- OLED_WR_Byte(0xff,OLED_CMD);
- OLED_WR_Byte(0xA1,OLED_CMD);
- OLED_WR_Byte(0xC8,OLED_CMD);
- OLED_WR_Byte(0xA6,OLED_CMD);
- OLED_WR_Byte(0xA8,OLED_CMD);
- OLED_WR_Byte(0x3f,OLED_CMD);
- OLED_WR_Byte(0xD3,OLED_CMD);
- OLED_WR_Byte(0x00,OLED_CMD);
- OLED_WR_Byte(0xd5,OLED_CMD);
- OLED_WR_Byte(0x80,OLED_CMD);
- OLED_WR_Byte(0xD9,OLED_CMD);
- OLED_WR_Byte(0xF1,OLED_CMD);
- OLED_WR_Byte(0xDA,OLED_CMD);
- OLED_WR_Byte(0x12,OLED_CMD);
- OLED_WR_Byte(0xDB,OLED_CMD);
- OLED_WR_Byte(0x40,OLED_CMD);
- OLED_WR_Byte(0x20,OLED_CMD);
- OLED_WR_Byte(0x02,OLED_CMD);
- OLED_WR_Byte(0x8D,OLED_CMD);
- OLED_WR_Byte(0x14,OLED_CMD);
- OLED_WR_Byte(0xA4,OLED_CMD);
- OLED_WR_Byte(0xA6,OLED_CMD);
- OLED_WR_Byte(0xAF,OLED_CMD);
- OLED_WR_Byte(0xAF,OLED_CMD);
- }
其圖片顯示函數(shù)為:
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
- {
- unsigned int j=0;
- unsigned char x,y;
- if(y1%8==0) y=y1/8;
- else y=y1/8+1;
- for(y=y0;y;y++)
- {
- OLED_Set_Pos(x0,y);
- for(x=x0;x;x++)
- {
- OLED_WR_Byte(BMP[j++],OLED_DATA);
- }
- }
- }
相應(yīng)的顯示主程序?yàn)椋?/font>
- int main(void)
- {
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOB,PIN0,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
- OLED_ShowString(20,0,"CSM32RV20",16);
- OLED_ShowString(20,2,"OLED TEST",16);
- Delay32M_ms(2000);
- OLED_DrawBMP(0,0,128,8,BMP1);
- while(1);
- }
經(jīng)編譯與下載,其顯示效果如圖3和圖4所示。
![pYYBAGIBAd-AHHubAABML_9ET2s052.jpg](https://file.elecfans.com/web2/M00/2F/2B/pYYBAGIBAd-AHHubAABML_9ET2s052.jpg)
圖3顯示字符串
![pYYBAGIBAeGAGhbYAABKkvoPE5s453.jpg](https://file.elecfans.com/web2/M00/2F/2B/pYYBAGIBAeGAGhbYAABKkvoPE5s453.jpg)
圖4顯示圖像
對于TFT顯示屏,它相較于0.96寸LCD顯示屏其顯示尺寸要更大,故顯示的內(nèi)容也更多。
該顯示屏的初始化函數(shù)為:
- void LCD_Init(void)
- {
- LCD_REST_Low();
- Delay32M_ms(20);
- LCD_REST_High();
- Delay32M_ms(20);
- LCD_CS_Low();
- LCD_WR_REG(0xCB);
- LCD_WR_DATA8(0x39);
- LCD_WR_DATA8(0x2C);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x34);
- LCD_WR_DATA8(0x02);
- LCD_WR_REG(0xCF);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0XC1);
- LCD_WR_DATA8(0X30);
- LCD_WR_REG(0xE8);
- LCD_WR_DATA8(0x85);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x78);
- LCD_WR_REG(0xEA);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x00);
- LCD_WR_REG(0xED);
- LCD_WR_DATA8(0x64);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0X12);
- LCD_WR_DATA8(0X81);
- LCD_WR_REG(0xF7);
- LCD_WR_DATA8(0x20);
- LCD_WR_REG(0xC0);
- LCD_WR_DATA8(0x23);
- LCD_WR_REG(0xC1);
- LCD_WR_DATA8(0x10);
- LCD_WR_REG(0xC5);
- LCD_WR_DATA8(0x3e);
- LCD_WR_DATA8(0x28);
- LCD_WR_REG(0xC7);
- LCD_WR_DATA8(0x86);
- LCD_WR_REG(0x36);
- LCD_WR_DATA8(0x48);
- LCD_WR_REG(0x3A);
- LCD_WR_DATA8(0x55);
- LCD_WR_REG(0xB1);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x18);
- LCD_WR_REG(0xB6);
- LCD_WR_DATA8(0x08);
- LCD_WR_DATA8(0x82);
- LCD_WR_DATA8(0x27);
- LCD_WR_REG(0xF2);
- LCD_WR_DATA8(0x00);
- LCD_WR_REG(0x26);
- LCD_WR_DATA8(0x01);
- LCD_WR_REG(0xE0);
- LCD_WR_DATA8(0x0F);
- LCD_WR_DATA8(0x31);
- LCD_WR_DATA8(0x2B);
- LCD_WR_DATA8(0x0C);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x08);
- LCD_WR_DATA8(0x4E);
- LCD_WR_DATA8(0xF1);
- LCD_WR_DATA8(0x37);
- LCD_WR_DATA8(0x07);
- LCD_WR_DATA8(0x10);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x09);
- LCD_WR_DATA8(0x00);
- LCD_WR_REG(0XE1);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x14);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x11);
- LCD_WR_DATA8(0x07);
- LCD_WR_DATA8(0x31);
- LCD_WR_DATA8(0xC1);
- LCD_WR_DATA8(0x48);
- LCD_WR_DATA8(0x08);
- LCD_WR_DATA8(0x0F);
- LCD_WR_DATA8(0x0C);
- LCD_WR_DATA8(0x31);
- LCD_WR_DATA8(0x36);
- LCD_WR_DATA8(0x0F);
- LCD_WR_REG(0x11);
- Delay32M_ms(120);
- LCD_WR_REG(0x29);
- LCD_WR_REG(0x2c);
- }
其字符界面顯示函數(shù)為:
- void xianshi()
- {
- LCD_Clear(RED);
- BACK_COLOR=RED;
- POINT_COLOR=WHITE;
- LCD_ShowString(20,80,160,16,16,"CSM32RV20");
- LCD_ShowString(20,120,200,16,16,"2.4 SPI_TFT240*320");
- LCD_ShowString(20,240,160,16,16,"jinglxixi ");
- LCD_ShowString(20,280,200,16,16,"2022.1.16 ");
- }
相應(yīng)的圖片顯示函數(shù)為:
- void show_image(void)
- {
- int i,j,k;
- unsigned char picH,picL;
- Address_set(0,0,79,79);
- k=0;
- for(i=0;i<80;i++)
- {
- for(j=0;j<80;j++)
- {
- picH=gImage_cgq[k*2];
- picL=gImage_cgq[k*2+1];
- LCD_WR_DATA8(picH);
- LCD_WR_DATA8(picL);
- k++;
- }
- }
- }
實(shí)現(xiàn)顯示效果的主程序?yàn)椋?/font>
- int main(void)
- {
- int16_t i;
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOB,PIN0,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN2,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN3,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN4,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOA,PIN10,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT);
- GPIO_Write(GPIOB,PIN0,GPIO_SET);
- GPIO_Write(GPIOB,PIN1,GPIO_SET);
- GPIO_Write(GPIOA,PIN8,GPIO_SET);
- GPIO_Write(GPIOA,PIN10,GPIO_SET);
- GPIO_Write(GPIOA,PIN12,GPIO_SET);
- LCD_Init();
- LCD_Clear(RED);
- xianshi();
- Delay32M_ms(2000);
- LCD_Clear(BLACK);
- show_image();
- while(1)
- {
- GPIO_Toggle(GPIOA,PIN8);
- for(i=0;i<10;i++)
- {
- Delay32M_us(50000);
- }
- }
- return 0;
- }
經(jīng)編譯與下載,其顯示效果如圖5和圖6所示。
![poYBAGIBAeOAFbfVAAA-79hrROI643.jpg](https://file.elecfans.com/web2/M00/2F/24/poYBAGIBAeOAFbfVAAA-79hrROI643.jpg)
圖5顯示字符串
![pYYBAGIBAeWATwe9AAA7fhYEMTw829.jpg](https://file.elecfans.com/web2/M00/2F/2B/pYYBAGIBAeWATwe9AAA7fhYEMTw829.jpg)
圖6顯示字符串
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
南京中科微
+關(guān)注
關(guān)注
0文章
60瀏覽量
818 -
CSM32RV20
+關(guān)注
關(guān)注
0文章
40瀏覽量
234
發(fā)布評論請先 登錄
相關(guān)推薦
迅為RK3568開發(fā)板驅(qū)動(dòng)指南Linux中通用SPI設(shè)備驅(qū)動(dòng)
迅為RK3568開發(fā)板驅(qū)動(dòng)指南Linux中通用SPI設(shè)備驅(qū)動(dòng)
![迅為RK3568<b class='flag-5'>開發(fā)板</b><b class='flag-5'>驅(qū)動(dòng)</b>指南Linux中通用<b class='flag-5'>SPI</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>](https://file1.elecfans.com/web3/M00/06/FF/wKgZO2eRsTyAQNODAACATQzlR7A177.png)
迅為RK3568開發(fā)板SPI驅(qū)動(dòng)指南-mcp2515驅(qū)動(dòng)編寫:讀寄存器函數(shù)
迅為RK3568開發(fā)板SPI驅(qū)動(dòng)指南-mcp2515驅(qū)動(dòng)編寫:讀寄存器函數(shù)
![迅為RK3568<b class='flag-5'>開發(fā)板</b><b class='flag-5'>SPI</b><b class='flag-5'>驅(qū)動(dòng)</b>指南-mcp2515<b class='flag-5'>驅(qū)動(dòng)</b>編寫:讀寄存器函數(shù)](https://file1.elecfans.com/web3/M00/06/9F/wKgZPGeN8JqABlkvAADNI9YFDS8893.png)
【敏矽微ME32G070開發(fā)板免費(fèi)體驗(yàn)】開箱+點(diǎn)燈+點(diǎn)亮OLED
ME32G070 支持硬件 I2C,這里偷個(gè)懶,不想使用繁瑣的跳線,直接在開發(fā)板上隨意插入 OLED 顯示屏的引腳,如下:
直接插上 OLED 顯示屏即可
由于 PB6、PB4 不是 I2C 引腳,這里
發(fā)表于 12-19 00:25
淺談顯示屏的接口類型
一個(gè)顯示屏通常能夠完成顯示內(nèi)容、播放音頻、網(wǎng)絡(luò)連接的功能,不同的功能又由不同的接口負(fù)責(zé)。
追加名額丨米爾瑞芯微RK3576開發(fā)板有獎(jiǎng)試用
米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開發(fā)板免費(fèi)試用活動(dòng)加碼啦~~米爾追加了2塊價(jià)值849元的MYD-LR3576
![追加名額丨米爾瑞芯<b class='flag-5'>微</b>RK3576<b class='flag-5'>開發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
常用在工業(yè)控制系統(tǒng)上的MCU芯片資料:CSM32RV20
CSM32RV20是一款基于RISC-V核的低功耗MCU芯片。 內(nèi)置RISC-V RV32IMAC內(nèi)核(2.6CoreMark/MHz); 蕞高32MHz工作頻率; 內(nèi)置4kB的SRAM; 內(nèi)置8B
![常用在工業(yè)控制系統(tǒng)上的MCU芯片資料:<b class='flag-5'>CSM32RV20</b>](https://file1.elecfans.com/web1/M00/F4/DC/wKgZoWczDC-AV7TwAAEXvP1_BJ0707.png)
有獎(jiǎng)丨米爾 瑞芯微RK3576開發(fā)板免費(fèi)試用
米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開發(fā)板免費(fèi)試用活動(dòng)來啦~~米爾提供了7塊價(jià)值849元的MYD-LR3576
![有獎(jiǎng)丨米爾 瑞芯<b class='flag-5'>微</b>RK3576<b class='flag-5'>開發(fā)板</b>免費(fèi)<b class='flag-5'>試用</b>](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
【米爾-國產(chǎn)瑞芯微RK3568開發(fā)板試用體驗(yàn)】燒寫Debian鏡像以及顯示設(shè)置
【感謝】
感謝電子發(fā)燒友論壇,米爾科技提供了米爾-國產(chǎn)瑞芯微RK3568開發(fā)板試用機(jī)會。收到開發(fā)板有幾天了,今天分享一下如何獲取資料以及燒友Debain鏡像以及
發(fā)表于 08-22 20:35
【龍芯2K0300蜂鳥板試用】開箱體驗(yàn)
。
核心板引腳圖如下:
這開發(fā)板尺寸有限,但板載資源非常充足,提供豐富的外設(shè)擴(kuò)展接口,包括LCD顯示屏接口、
發(fā)表于 08-12 19:59
【龍芯2K0300蜂鳥板試用】開發(fā)板簡介
2K0300、DDR4 SDRAM、PHY芯片、EMMC、NOR FLASH芯片設(shè)計(jì)。
底板為用戶擴(kuò)展了豐富的外圍接口,如LCD顯示屏、3路 SPI接口、4路PWM
發(fā)表于 08-12 17:27
LED顯示屏中什么是USB接口?
USB,全稱是Universal Serial Bus,即通用串行總線。它是一種用于連接計(jì)算機(jī)與外部設(shè)備的接口標(biāo)準(zhǔn),具有廣泛的應(yīng)用范圍。在LED顯示屏中,USB接口就像是一個(gè)橋梁,連接著顯示屏
【龍芯2K0300蜂鳥板試用】+開箱及板卡資源介紹
、DDR4 、PHY芯片、EMMC、NOR FLASH等核心部件;在底板設(shè)計(jì)上為用戶擴(kuò)展了豐富的外圍接口,比如LCD顯示屏、3路SPI接口、4路PWM
發(fā)表于 08-08 23:09
【GD32F303紅楓派開發(fā)板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實(shí)驗(yàn)
通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容:
?SPI通信協(xié)議,參考19.2.1東方紅開發(fā)板使用手冊
?GD32F303 SPI操作方式,參考19.2.2東方紅開發(fā)板使用手冊
?NAND FLAS
![【GD32F303紅楓派<b class='flag-5'>開發(fā)板</b>使用手冊】第二十講 <b class='flag-5'>SPI-SPI</b> NAND FLASH讀寫實(shí)驗(yàn)](https://file1.elecfans.com/web2/M00/F1/AD/wKgaomZzisiAamI-AABGtAQwDgo073.png)
評論