找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13626|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

STM32驅(qū)動(dòng)LCD任意方向顯示(橫豎屏任意設(shè)置源碼)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在學(xué)習(xí)STM32的過(guò)程中,相信很多人肯定都玩過(guò)LCD,不管是FTF LCD還是1602的點(diǎn)陣液晶屏,那么在玩LCD的時(shí)候有沒(méi)有遇到比較糟心的情況呢,比如說(shuō):在某寶上面買的LCD,在使用的時(shí)候明明想橫屏顯示,但是無(wú)奈店家給的例程只能豎屏顯示;或者是,例程里面只支持某種大小的字符顯示,而你覺(jué)得過(guò)大或者太小,想改卻無(wú)從下手;又或者,你覺(jué)得在顯示菜單時(shí),單一顯示太沒(méi)勁了,還是自己做一個(gè)簡(jiǎn)單UI效果來(lái)的酷炫。別著急,如果你正在為以上的某些問(wèn)題感到困惑,希望我的帖子能夠幫到你。在接下來(lái)的3篇連載的帖子中,我會(huì)詳細(xì)的介紹我是如何解決這些問(wèn)題的。當(dāng)然,對(duì)于各位大佬來(lái)說(shuō),我還是比較菜的,如果哪位大佬或者前輩偶然看到我的帖子,發(fā)現(xiàn)問(wèn)題的話,歡迎留言指正。
        話不多說(shuō),下面轉(zhuǎn)入正題。在看這篇帖子前,請(qǐng)先根據(jù)例程正常驅(qū)動(dòng)你的液晶屏,然后在進(jìn)行下面的工作。我使用的是在某寶買的2.8寸不帶觸控功能的TFT LCD,分辨率為240*320。下面貼出實(shí)物圖,這里貼出該模塊的資料鏈接
2.8-spi-9341.rar (8.44 MB, 下載次數(shù): 128)
里面有液晶屏的相關(guān)資料和51以及STM32的例程



在使用這塊液晶屏?xí)r,完全按照資料里面的原理接線。因?yàn)檫@個(gè)型號(hào)的液晶屏分帶觸摸和不帶觸摸兩種,我用的是不帶觸摸的,例程有觸摸功能和校準(zhǔn)功能,直接去掉。下面分別是原例程初始界面和去掉觸摸功能后的界面。



下面開(kāi)始我們的驅(qū)動(dòng)修改工作。我們先來(lái)看一下字符顯示函數(shù),通過(guò)go to define ,可以發(fā)現(xiàn),不管是漢字顯示函數(shù),還是字符串顯示函數(shù),都是通過(guò)一個(gè)void LCD_SetCursor( )函數(shù)實(shí)現(xiàn)的(漢字顯示可以直接看出,字符串顯示還有一層調(diào)用,通過(guò)go to  define  LCD_ShowChar()函數(shù)然后在go to define  LCD_DrawPoint()函數(shù)可以找到),那么這個(gè)函數(shù)是做什么的呢?我們進(jìn)一步通過(guò)go to define找到他里面調(diào)用的函數(shù)的定義,這里有兩個(gè)函數(shù)分別是void LCD_WR_REG(u16 regval)和void LCD_WR_DATA(u16 data)。這兩個(gè)函數(shù)作用是通過(guò)STM32的SPI接口向LCD驅(qū)動(dòng)芯片寫(xiě)數(shù)據(jù)。

也許你在查看LCD_ShowString()函數(shù)時(shí)會(huì)發(fā)現(xiàn),可以通過(guò)將LCD_DrawPoint(x,y)函數(shù)的X,Y坐標(biāo)進(jìn)行簡(jiǎn)單的變換也可以實(shí)現(xiàn)字符串橫屏顯示的效果(認(rèn)真學(xué)了高中數(shù)學(xué)的應(yīng)該都秒懂,這里不多說(shuō)),但是漢卻依舊只能豎屏顯示,其實(shí)這是治標(biāo)不治本的方法,我也是通過(guò)這個(gè)方法摸索過(guò)來(lái)的。我們回過(guò)頭來(lái)繼續(xù)看,可以看出void LCD_WR_REG(u16 regval)和void LCD_WR_DATA(u16 data)就是控制LCD顯示的最底層的函數(shù)了,即使是LCD的初始化函數(shù)也是調(diào)用這兩個(gè)函數(shù)進(jìn)行數(shù)據(jù)的傳輸。那么我們就明白了,其實(shí)只要通過(guò)修改向LCD控制芯片寫(xiě)入的數(shù)據(jù)就可以更改其顯示方向。那么到底應(yīng)該寫(xiě)什么進(jìn)去呢?下面我們先看一篇博客。http://www.cnblogs.com/amanlikethis/p/3872515.html 這篇博客簡(jiǎn)單介紹了LCD的驅(qū)動(dòng)原理和怎樣控制LCD的顯示方向,帖子下面有相關(guān)的測(cè)試源碼,博主測(cè)試用LCD的驅(qū)動(dòng)芯片剛好和我們使用的LCD的驅(qū)動(dòng)芯片一模一樣,在這里對(duì)博主的博客和資料的開(kāi)源表示感謝。這個(gè)源碼里面已經(jīng)給出了所有顯示方向的初始化函數(shù),那么我們就可以直接移植過(guò)來(lái)啦。移植的過(guò)程中仔細(xì)看就會(huì)發(fā)現(xiàn),LCD_ILI9341_CMD()函數(shù)其實(shí)對(duì)應(yīng)的就是我們的LCD_WR_REG()函數(shù),LCD_ILI9341_Parameter()函數(shù)就是LCD_WR_DATA8(),這里要注意一點(diǎn),是LCD_WR_DATA8()函數(shù)而不是LCD_WR_DATA()函數(shù),至于為什么,大家自己看程序思考。移植過(guò)來(lái)后,我們只需要將對(duì)應(yīng)的部分加到LCD初始化函數(shù)最后的清屏函數(shù)LCD_Clear()之前就可以了。下面看一下移植效果,源碼見(jiàn)附件。


單片機(jī)源程序如下:
  1. #include "lcd.h"
  2. #include "spi.h"        +  
  3. #include "delay.h"
  4. #include "sys.h"

  5. u8 state=0;
  6. void xianshi(void);//顯示信息  
  7. void refshow(void);//刷新顯示

  8. void xianshi()//顯示信息
  9. {
  10.         BACK_COLOR=WHITE;
  11.         POINT_COLOR=RED;   
  12.         //顯示32*32漢字
  13.         showhanzi32(0,0,0);         //淘
  14.         showhanzi32(40,0,1);         //晶
  15.         showhanzi32(80,0,2);    //馳
  16.         //顯示16*16漢字
  17.         showhanzi16(0,35,0);          //專
  18.         showhanzi16(20,35,1);          //注
  19.         showhanzi16(40,35,2);          //顯
  20.         showhanzi16(60,35,3);          //示
  21.         showhanzi16(80,35,4);          //方
  22.         showhanzi16(100,35,5);          //案           
  23.         LCD_ShowString(0,55,200,16,16,"2.8 TFT SPI 240*320");
  24. }
  25. int main(void)
  26. {                  
  27.         delay_init();                     //延時(shí)函數(shù)初始化         
  28. //        NVIC_Configuration();          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  29.         
  30.         SPI1_Init();        //SPI1初始化
  31.         LCD_Init();                                

  32.         Lcd_GramScan(1);
  33.         LCD_Clear(BLACK);         
  34.         while(1)
  35.         {
  36.                 Lcd_GramScan(1);
  37.                 LCD_Clear(BLACK);
  38.                 LCD_Fill(0,0,100,10,RED);
  39.                 delay_ms(1000);
  40.                
  41.                 Lcd_GramScan(2);
  42.                 LCD_Clear(BLACK);
  43.                 LCD_Fill(0,0,100,10,RED);
  44.                 delay_ms(1000);
  45.                
  46.                 Lcd_GramScan(3);
  47.                 LCD_Clear(BLACK);
  48.                 LCD_Fill(0,0,100,10,RED);
  49.                 delay_ms(1000);
  50.                
  51.                 Lcd_GramScan(4);
  52.                 LCD_Clear(BLACK);
  53.                 LCD_Fill(0,0,100,10,RED);
  54.                 delay_ms(1000);
  55.                
  56.                 Lcd_GramScan(5);
  57.                 LCD_Clear(BLACK);
  58.                 LCD_Fill(0,0,100,10,RED);
  59.                 delay_ms(1000);
  60.                
  61.                 Lcd_GramScan(6);
  62.                 LCD_Clear(BLACK);
  63.                 LCD_Fill(0,0,100,10,RED);
  64.                 delay_ms(1000);
  65.                
  66.                 Lcd_GramScan(7);
  67.                 LCD_Clear(BLACK);
  68.                 LCD_Fill(0,0,100,10,RED);
  69.                 delay_ms(1000);
  70. ……………………

  71. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
2.8寸TFT模塊測(cè)試全方向.rar (364.77 KB, 下載次數(shù): 114)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:238825 發(fā)表于 2018-4-26 22:41 | 只看該作者
講解的很詳細(xì)。。!
回復(fù)

使用道具 舉報(bào)

板凳
ID:386074 發(fā)表于 2018-8-14 16:01 | 只看該作者
剛好在調(diào)試這個(gè)屏,怎么調(diào)試橫屏都不行,借鑒下看看是哪里出錯(cuò)誤了!
回復(fù)

使用道具 舉報(bào)

地板
ID:386074 發(fā)表于 2018-8-14 16:39 | 只看該作者
你這代碼中都沒(méi)有橫屏處理的代碼,基本上完全就是例程來(lái)的。!

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:347759 發(fā)表于 2018-8-15 09:12 | 只看該作者
好文章,下載了,希望對(duì)自己有用,謝謝了
回復(fù)

使用道具 舉報(bào)

6#
ID:443958 發(fā)表于 2018-12-11 13:27 | 只看該作者
不錯(cuò)的資料,學(xué)習(xí)一下。謝謝分享。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表