久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: STM32驅動LCD任意方向顯示(橫豎屏任意設置源碼) [打印本頁]

作者: dq1611433258    時間: 2018-3-20 10:54
標題: STM32驅動LCD任意方向顯示(橫豎屏任意設置源碼)
在學習STM32的過程中,相信很多人肯定都玩過LCD,不管是FTF LCD還是1602的點陣液晶屏,那么在玩LCD的時候有沒有遇到比較糟心的情況呢,比如說:在某寶上面買的LCD,在使用的時候明明想橫屏顯示,但是無奈店家給的例程只能豎屏顯示;或者是,例程里面只支持某種大小的字符顯示,而你覺得過大或者太小,想改卻無從下手;又或者,你覺得在顯示菜單時,單一顯示太沒勁了,還是自己做一個簡單UI效果來的酷炫。別著急,如果你正在為以上的某些問題感到困惑,希望我的帖子能夠幫到你。在接下來的3篇連載的帖子中,我會詳細的介紹我是如何解決這些問題的。當然,對于各位大佬來說,我還是比較菜的,如果哪位大佬或者前輩偶然看到我的帖子,發現問題的話,歡迎留言指正。
        話不多說,下面轉入正題。在看這篇帖子前,請先根據例程正常驅動你的液晶屏,然后在進行下面的工作。我使用的是在某寶買的2.8寸不帶觸控功能的TFT LCD,分辨率為240*320。下面貼出實物圖,這里貼出該模塊的資料鏈接
2.8-spi-9341.rar (8.44 MB, 下載次數: 128)
里面有液晶屏的相關資料和51以及STM32的例程



在使用這塊液晶屏時,完全按照資料里面的原理接線。因為這個型號的液晶屏分帶觸摸和不帶觸摸兩種,我用的是不帶觸摸的,例程有觸摸功能和校準功能,直接去掉。下面分別是原例程初始界面和去掉觸摸功能后的界面。



下面開始我們的驅動修改工作。我們先來看一下字符顯示函數,通過go to define ,可以發現,不管是漢字顯示函數,還是字符串顯示函數,都是通過一個void LCD_SetCursor( )函數實現的(漢字顯示可以直接看出,字符串顯示還有一層調用,通過go to  define  LCD_ShowChar()函數然后在go to define  LCD_DrawPoint()函數可以找到),那么這個函數是做什么的呢?我們進一步通過go to define找到他里面調用的函數的定義,這里有兩個函數分別是void LCD_WR_REG(u16 regval)和void LCD_WR_DATA(u16 data)。這兩個函數作用是通過STM32的SPI接口向LCD驅動芯片寫數據。

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


單片機源程序如下:
  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();                     //延時函數初始化         
  28. //        NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  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. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

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



作者: annysky    時間: 2018-4-26 22:41
講解的很詳細!!!!
作者: 土豆小王子_叮當    時間: 2018-8-14 16:01
剛好在調試這個屏,怎么調試橫屏都不行,借鑒下看看是哪里出錯誤了!
作者: 土豆小王子_叮當    時間: 2018-8-14 16:39
你這代碼中都沒有橫屏處理的代碼,基本上完全就是例程來的!!!
作者: shengkai540    時間: 2018-8-15 09:12
好文章,下載了,希望對自己有用,謝謝了
作者: starfishes    時間: 2018-12-11 13:27
不錯的資料,學習一下。謝謝分享。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美日韩国产二区 | 日韩毛片在线播放 | 国产精品一级 | 国产精品二区一区二区aⅴ污介绍 | www.huangse| 国产乱淫片视频 | 另类小说第一草 | 成人在线观看网站 | 在线免费观看日韩av | 一区二区三区视频在线播放 | 免费福利片 | 国产在线www | 97人人爱| 成人免费视频播放 | 黄色一级录像 | 亚洲91av | 91一区二区三区 | 日韩精品免费视频 | 国产午夜精品一区二区三区四区 | 激情婷婷网 | 91蜜桃婷婷狠狠久久综合9色 | 免费黄色一级 | 金银在线| 二区三区在线观看 | 日本www视频 | 四虎在线观看 | 国产性猛交96| 欧美又粗又长 | 色伊伊| 午夜精品久久久久久久99黑人 | 久久综合伊人 | 亚洲天堂免费视频 | 黄色在线免费观看视频 | 少妇高潮久久久久久潘金莲 | 黄色一区二区三区 | 成人av一区二区三区在线观看 | 91精品看片 | 欧美xxx视频| 不卡中文字幕 | 国产成人免费在线观看 | 国产精品久久久国产盗摄 |