找回密碼
         注冊會員
        搜索附件  

        5-3v.png

         

        單片機驅(qū)動彩屏最簡方案:單片機_RA8889最小開發(fā)板驅(qū)動控制TFT彩屏介紹(一):
        本帖最后由 lcdvision 于 2024-8-23 08:46 編輯

        本文介紹使用單片機+RA8889來驅(qū)動和控制彩屏的最小方案。文章從RA8889的架構(gòu)功能、硬件電路設計及軟件設計三個方面來說明。

        小編已發(fā)布多篇文章介紹了單片機+RA8889來驅(qū)動控制彩屏,但是仍有不少單片機玩家可能對驅(qū)動彩屏還不算熟悉,在此加推一個短篇介紹系列,閱讀時間不會超過半小時,定能揭開您的疑惑!

        本系列文章最后一篇會有彩蛋釋放,敬請跟蹤閱讀。


        一、RA8889的硬件架構(gòu)圖示


        此處仍不嫌啰嗦,再作一下架構(gòu)說明,參下圖:


        主要特色:

        • 解碼:JPG,AVI;支持BMP,PNG圖片
        • 可外接4顆FLASH,支持Q-SPI通信模式
        • 圖片顯示采用DMA,不使用MCU資源
        • MCU接口豐富:8080/6800,SPI-3/4,I2C
        • 支持分辨率:最大1366 x [理論上不限高度]
        • LQFP-100封裝
        • 工作溫度-40~85℃



        二、UI設計時重點
        UI上所用到的圖片、自建字庫預先燒錄到FLASH中,圖片可以是整圖,也可以是小圖。

        RA8889是直接從FLASH尋址讀取圖片、字庫數(shù)據(jù),并顯示到相應的位置,可以是局部更新圖片,也可以是滿屏替換,相當靈活高效。

        MCU只發(fā)送相應的API指令即可,提供給RA8889進行自動尋址及放置圖片,指令簡單,MCU會節(jié)約許多資源,即使使用SPI方式也可以得到十分快速度的畫面切換。

        RA8889內(nèi)建繪圖函數(shù)以及圖形處理(剔除底色、文字上色、圖片疊加運算等),基礎圖形處理簡單快速高效。

        UI界面要顯示的字母,可以調(diào)用RA8889內(nèi)建的字符,顯示數(shù)度快,內(nèi)建字符可放大1~4倍(向量放大)。

        三、對FLASH容量的需求
        RA8889支持JPG格式,多數(shù)UI界面可以采用JPG圖片,因此FLASH容量可以很小。

        可以自建全套漢字字庫,比如24x24,32x32點,字庫不大,可以打包存入FLASH,再利用RA8889的DMA讀取,結(jié)合芯片BTE算法,可快速顯示漢字。

        RA8889可外接擴展4顆FLASH,一般采用NOR。一般UI設計時使用到1~2顆是夠用,更何況支持JPG格式,圖片容量需求更小了。

        注意:請將FLASH擴展到RA8889使用,才能發(fā)揮出這顆控制芯片的優(yōu)勢。而不是擴展到單片機喔!將FLASH擴展到單片機使用時會大打折扣。

        四、顯存
        RA8889內(nèi)建128Mbits顯存,用戶可自由規(guī)劃畫布、圖像,顯存相當充裕,UI界面,需要疊放許多背景圖片、圖標、菜單圖片等等,預先放進緩沖層,需要時直接使用BTE Memory Copy是十分方便快速。

        同時也可以直接切換主界面到其它圖層,切換效果可做到零延時,這個是緩存大的優(yōu)點。

        許多單片機玩家直接驅(qū)動串口屏,反應最大的問題是刷新慢,若用RA8889這顆芯片來驅(qū)動控制彩屏,這個問題是不存在的。

        五、能做到什么效果
        顯示UI,簡單的界面已無法滿足用戶群對產(chǎn)品的期待了,通過RA8889,完全可以將界面做得更加美觀、生動、大氣,同時還能加進動畫效果,這一切只要使用一顆51單片機就能做得到!

        六、應用舉例
        • 咖啡機控制屏
        • 汽車儀表盤
        • 電力、安防儀表
        • 各種醫(yī)療器械儀表盤
        • 自動化控制儀表盤
        • 串口屏



        來吧!只要一顆51單片機,就能點亮彩色的視窗!





        本帖最后由 lcdvision 于 2024-8-23 21:26 編輯

        單片機驅(qū)動彩屏最簡方案:單片機_RA8889最小開發(fā)板驅(qū)動控制TFT彩屏介紹(二)硬件電路設計


        本篇介紹電路設計。底部可下載參考電路。


        一、硬件樣板:

        該板需要外接MCU,圖示接法為SPI-4線。

        可接AT043TN25和AT070TN92,及兼容接口的屏。


        二、RA8889芯片引腳定義


        再上一張引腳簡化圖,概覽引腳結(jié)構(gòu):


        電路中沒有畫MCU,需外接,采用何種接口方式,可通過PS2~0來選擇。最簡單的話SPI-3/4線即可。

        RA8889各個VCC和LDO(1.2V)引腳均需要接旁路電容進行濾波,且放置距離芯片引腳要近一些。


        三、FLASH
        RA8889可外接4顆FLASH,一般建議使用NOR FLASH,基本夠用了:

        該設計中僅接出兩顆FLASH,RA8889有兩路BUS總線,每路總線可擴展2個片選,故總共可外接4顆FLASH。

        FLASH是用于存放UI界面的圖資,可以采用JPG格式存入,支持BMP、JPG、PNG、AVI影片,用戶根據(jù)需要選擇。

        FLASH引腳需要上拉,一是擴展比較多顆負載重,二是在燒錄時會吃多一些電流。


        四、液晶屏接口

        輸出的TTL串聯(lián)22歐姆電阻,是為了降低EMC而加。

        輸出配置兩種接口,40PIN和50PIN,常用的4.3寸采用40PIN,7寸采用50PIN。


        五、FLASH燒錄口的設計

        FLASH外接線進行燒錄,燒錄器采用CH341A即可,便宜易買。該接口引出2路BUS總線,燒錄時TEST1跳線至3.3V,正常工作時取下跳線。

        另外將PS2~0跳線口也放置到該連接器,通過跳線帽便于改變MCU的通信方式。


        六、5V轉(zhuǎn)3.3V電路

        采用通用的1117-3.3芯片即可,注意芯片周圍的覆銅,以便散熱。


        七、5V轉(zhuǎn)LED背光

        背光是整個電路功耗最大的一塊,注意電感L2和肖特基二極管D1的覆銅,便以散熱。適當調(diào)整反饋電阻R11//R12,以防電流過大,零件過熱。

        可以接上R9,通過RA8889的PWM0輸出方波調(diào)整背光亮度。


        八、LCD驅(qū)動電壓

        這部份功耗不大,主要是提供LCD的驅(qū)動電壓,不太吃電流。

        4.3寸的話不需要加這部分電路;AT070TN92則需要外加驅(qū)動電壓,看是繁瑣,其實和LED的升壓電路大同小異。

        焊接時要注意齊納二極管D3和D6的方向,一個負壓,一個正壓。


        九、關于地線
        Layout走線時,注意電源的地單獨走線、覆銅,主要是升壓、和降壓電路,數(shù)字地單獨走線、覆銅,最終在濾波電容附近收到一起。這樣做可極大地預防電源雜訊對數(shù)字電路的干擾。

        本章完
        單片機驅(qū)動彩屏最簡方案:單片機_RA8889最小開發(fā)板驅(qū)動控制TFT彩屏介紹(三)軟件設計

        本篇介紹軟件設計,相關代碼請從本人相關文章獲取,或者至官方論壇獲取。


        一、老樣子,先上一張軟件代碼導圖:


        代碼三步曲:

        • 設定通信方式(已寫好各種通信方式的參考代碼了);
        • 初始化RA8889,如上圖所示,看似很多,代碼都是直接調(diào)用API函數(shù);
        • 調(diào)用API函數(shù)進行界面設計,對于工業(yè)上所使用的UI,這些API足夠用,也十分簡潔!


        二、代碼要點:
        1. 一些宏定義請先修改,在userdef.h
        (1)顯存規(guī)劃:
        1. /* RA8889顯存和顯示配置 */
        2. #define canvas_image_width  1600                //畫布寬度,設定為屏寬的n倍
        3. #define main_image_width  1600                        //圖像寬度,設定為屏寬的n倍
        4. #define LCD_Width  800
        5. #define LCD_Height  480
        復制代碼



        (2)主頻配置,一般只修改SCAN_FREQ即可
        1. /* RA8889頻率配置 */
        2. #define OSC_FREQ        10                        //晶振頻率,外接晶振請使用10MHz
        3. #define DRAM_FREQ        133                        //SDRAM刷新頻率,最高166MHz
        4. #define CORE_FREQ        120                        //RA8889核心頻率,最高133MHz
        5. #define SCAN_FREQ        30                        //PCLK液晶掃描頻率,最高100MHz
        復制代碼



        (3)液晶屏型號定義,最終是在初始化中Set_LCD_Panel();執(zhí)行,不同液晶屏配置不同,許多RD還不熟悉彩屏,這里先賣個關子,待后續(xù)文章另起新篇針對該項專門介紹。

        下方為AT070TN92的液晶屏參數(shù)配置:
        1. #ifdef L80480R70

        2.         //**[10h]**//
        3.         Select_LCD_Sync_Mode();        // Enable XVSYNC, XHSYNC, XDE.
        4. //        Select_LCD_DE_Mode();        // XVSYNC & XHSYNC in idle state.
        5.        
        6.         PCLK_Falling();
        7. //        PCLK_Rising();

        8.         VSCAN_T_to_B();
        9.         PDATA_Set_RGB();

        10.         HSYNC_Low_Active();
        11.         VSYNC_Low_Active();
        12.         DE_High_Active();
        13. //        DE_Low_Active();

        14.         LCD_HorizontalWidth_VerticalHeight(800,480);
        15.         LCD_Horizontal_Non_Display(64);
        16.         LCD_HSYNC_Start_Position(208);
        17.         LCD_HSYNC_Pulse_Width(24);
        18.         LCD_Vertical_Non_Display(16);
        19.         LCD_VSYNC_Start_Position(22);
        20.         LCD_VSYNC_Pulse_Width(16);

        21. #endif
        復制代碼




        下方為AT043TN25的液晶屏參數(shù)配置:
        1. #ifdef AT043TN25

        2.     //**[10h]**//
        3.     //Select_LCD_Sync_Mode();        // Enable XVSYNC, XHSYNC, XDE.
        4.     Select_LCD_DE_Mode(); // XVSYNC & XHSYNC in idle state.

        5.     //        PCLK_Rising();
        6.     PCLK_Falling();
        7.     VSCAN_T_to_B();
        8.     PDATA_Set_RGB();

        9.     //**[13h]**//
        10.     HSYNC_Low_Active();
        11.     VSYNC_Low_Active();
        12.     DE_High_Active();
        13.     //        DE_Low_Active();
        14.     //------------------------------------
        15.     //**[14h][15h][1Ah][1Bh]**//
        16.     LCD_HorizontalWidth_VerticalHeight(480, 272); // LCD Resolution 480x272。
        17.     //**[16h][17h]**//
        18.     LCD_Horizontal_Non_Display(38); // 480x272,HSYNC Back Porch=38。
        19.     //**[18h]**//
        20.     LCD_HSYNC_Start_Position(20); // 480x272 HSYNC Front Porch = 20。
        21.     //**[19h]**//
        22.     LCD_HSYNC_Pulse_Width(20); // 480x272,HSYNC Pulse Width=5~30,set 20。
        23.     //**[1Ch][1Dh]**//
        24.     LCD_Vertical_Non_Display(4); // 480x272,VSYNC Back Porch =4。
        25.     //**[1Eh]**//
        26.     LCD_VSYNC_Start_Position(15); // 480x272,VSYNC Front Porch =15。
        27.     //**[1Fh]**//
        28.     LCD_VSYNC_Pulse_Width(3); // 480x272,VSYNC Pulse Width =3。

        29. #endif
        復制代碼


        參考演示程序已經(jīng)預設各種分辨率的液晶屏參數(shù)配置,可以直接代入測試,再進行微調(diào)。使用上非常簡單!


        (4)MCU通信方式和顯示色深定義:
        1. /*==== MCU接口通信位數(shù)和顯示色深定義 ====*/
        2. //#define MCU_8bit_ColorDepth_8bpp  
        3. //#define MCU_8bit_ColorDepth_16bpp
        4. #define MCU_8bit_ColorDepth_24bpp
        5. //#define MCU_16bit_ColorDepth_16bpp
        6. //#define MCU_16bit_ColorDepth_24bpp_Mode_1
        7. //#define MCU_16bit_ColorDepth_24bpp_Mode_2
        復制代碼



        2. 延時函數(shù)
        使用毫秒即可,請依照自己的MCU主頻調(diào)整延時長度:
        1. void delay_ms(unsigned int n);
        復制代碼



        三、進行UI界面設計
        底層封裝好API函數(shù)了,存放在RA8889_API.c(51單片機請改用RA8889_API_51.c),每個函數(shù)頭均有用法說明,不明白請進函數(shù)查閱詳細參數(shù)說明。并且所有代碼透明,感興趣的話請進入函數(shù)查看底層寄存器的設定。

        UI界面基礎三要素為 繪圖、顯示文字、顯示圖片, 這些都是RA8889硬件支持的功能,顯示速度很快!如下列舉主要的顯示函數(shù):
        1. /* MCU直接寫點,基礎函數(shù) */
        2. void putPixel(unsigned short x,unsigned short y,unsigned long color);

        3. /* 數(shù)據(jù)直接寫顯存 */
        4. void MPU8_8bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned char *data_array);
        5. void MPU8_16bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned char *data_array);
        6. void MPU8_24bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned char *data_array);
        7. void MPU16_16bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned short *data_array);
        8. void MPU16_24bpp_Mode1_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned short *data_array);
        9. void MPU16_24bpp_Mode2_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned short *data_array);

        10. /* 繪圖:各種幾何圖形(硬件實現(xiàn),高速) */
        11. void Draw_Line(unsigned long LineColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2);
        12. void Draw_Triangle(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short X3,unsigned short Y3);
        13. void Draw_Triangle_Fill(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short X3,unsigned short Y3);
        14. void Draw_Circle(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short R);
        15. void Draw_Circle_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short R);
        16. void Draw_Ellipse(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        17. void Draw_Ellipse_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        18. void Draw_Left_Up_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        19. void Draw_Left_Up_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        20. void Draw_Right_Down_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        21. void Draw_Right_Down_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        22. void Draw_Right_Up_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        23. void Draw_Right_Up_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        24. void Draw_Left_Down_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        25. void Draw_Left_Down_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
        26. void Draw_Square(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2);
        27. void Draw_Square_Fill(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2);
        28. void Draw_Circle_Square(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short R,unsigned short Y_R);


        29. /* 內(nèi)存操作:復制、運算、剔除底色、單色延展彩色、淡入淡出(硬件實現(xiàn),快速) */
        30. void BTE_Memory_Copy(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H);
        31. void BTE_Memory_Copy_Chroma_key(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned long Background_color,unsigned short X_W,unsigned short Y_H);
        32. void BTE_MCU_Write_MCU_8bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned char *data_array);
        33. void BTE_MCU_Write_MCU_16bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned short *data_array);


        34. /* DMA功能,快速顯示圖片(JPG,BMP),播放AVI影片 */
        35. void DMA_24bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W ,unsigned long Addr);
        36. void DMA_32bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W,unsigned long Addr);
        37. void JPG_NOR (unsigned long addr,unsigned long JPGsize,unsigned long IDEC_canvas_width,unsigned short x,unsigned short y);
        38. void AVI_NOR(unsigned long addr,unsigned long videosize,unsigned long shadow_buffer_addr,unsigned long PIP_buffer_addr,unsigned long x,unsigned long y,unsigned long height,unsigned long width,unsigned long PIP_width);
        復制代碼



        四、彩蛋
        我們已經(jīng)開發(fā)好一款新的RA8889開發(fā)板,簡單易用,使用您的單片機,通過并口或者串口直接連接即可,外接一片AT043TN25或者AT070TN92,只要接口兼容,通通都能點!


        RA8889精簡版:RA6809,該芯片僅提供SPI接口與MCU通信,但功能上和RA8889完全一樣!更詳細信息請關注我們的產(chǎn)品開發(fā)進展!


        以下效果使用51單片機STC8H8K64U+RA8889/RA6809開發(fā)板+1024x600/800x480彩屏進行演示:
        https://www.bilibili.com/video/BV19SHhexE8r/?share_source=copy_web&vd_source=c0cd4c87f6dcc19bcebab2f4cf3c40db
        STC8H8K64U單片機板+RA8889/RA6809開發(fā)板控制彩屏效果演示圖:

        有沒有興趣?來官方論壇來了解:單片機的視窗
        5-3v.png

        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網(wǎng)站地圖

        GMT+8, 2025-5-1 00:45 , Processed in 0.041822 second(s), 11 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        国产亚洲精品a在线无码| 国产精品涩涩涩视频网站| 99久久精品费精品国产一区二区 | 97人妻无码一区二区精品免费| 亚洲一区无码精品色| 久久精品国产WWW456C0M| 国产精品无码无卡无需播放器| 久久精品国产一区| 凹凸国产熟女精品视频app| 欧美精品人爱c欧美精品| 日批日出水久久亚洲精品tv| 精品伦精品一区二区三区视频 | 精品乱子伦一区二区三区| 最新国产精品拍自在线播放| 亚洲黄色在线观看| 欧美乱大交xxxxx| 国产美女精品一区二区| 92国产精品午夜福利| 国产三级精品三级在线观看专1| 青娱乐在线视频播放| 九九热这里只有在线精品视| 欧美精品在线一区二区三区| 欧美在线精品一区二区三区| 人妻少妇精品久久| 久久99国产综合精品| 国产精品毛片VA一区二区三区| 国产乱人伦偷精品视频不卡| 无码日韩精品一区二区三区免费| 十八18禁国产精品www| 亚洲精品免费观看| 国产精品国产AV片国产| 精品日本一区二区三区在线观看 | 99国产欧美精品久久久蜜芽| 久久996热精品xxxx| 精品一区二区三区在线成人| 久久国产综合精品五月天| 国产午夜福利精品一区二区三区| 久久久久人妻精品一区三寸蜜桃| HEYZO无码综合国产精品227| 亚洲av午夜国产精品无码中文字| 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 |