找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 RT8889CNN03開發板.jpg

        RT8889CNN03開發板.jpg

         

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

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

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

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


        一、RA8889的硬件架構圖示


        此處仍不嫌啰嗦,再作一下架構說明,參下圖:


        主要特色:

        • 解碼: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尋址讀取圖片、字庫數據,并顯示到相應的位置,可以是局部更新圖片,也可以是滿屏替換,相當靈活高效。

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

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

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

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

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

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

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

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

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

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

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

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



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





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

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


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


        一、硬件樣板:

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

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


        二、RA8889芯片引腳定義


        再上一張引腳簡化圖,概覽引腳結構:


        電路中沒有畫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影片,用戶根據需要選擇。

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


        四、液晶屏接口

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

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


        五、FLASH燒錄口的設計

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

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


        六、5V轉3.3V電路

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


        七、5V轉LED背光

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

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


        八、LCD驅動電壓

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

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

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


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

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

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


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


        代碼三步曲:

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


        二、代碼要點:
        1. 一些宏定義請先修改,在userdef.h
        (1)顯存規劃:
        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();執行,不同液晶屏配置不同,許多RD還不熟悉彩屏,這里先賣個關子,待后續文章另起新篇針對該項專門介紹。

        下方為AT070TN92的液晶屏參數配置:
        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的液晶屏參數配置:
        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
        復制代碼


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


        (4)MCU通信方式和顯示色深定義:
        1. /*==== MCU接口通信位數和顯示色深定義 ====*/
        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. 延時函數
        使用毫秒即可,請依照自己的MCU主頻調整延時長度:
        1. void delay_ms(unsigned int n);
        復制代碼



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

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

        3. /* 數據直接寫顯存 */
        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. /* 繪圖:各種幾何圖形(硬件實現,高速) */
        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. /* 內存操作:復制、運算、剔除底色、單色延展彩色、淡入淡出(硬件實現,快速) */
        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);
        復制代碼



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


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


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

        有沒有興趣?來官方論壇來了解:單片機的視窗
        RT8889CNN03開發板.jpg

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

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

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        亚洲国产精品无码久久一区二区| 国产乱子伦精品无码专区| 国产在线精品一区二区夜色 | 青青青国产依人精品视频 | 久久国产精品免费一区| 亚洲国产精品激情在线观看| 无码久久精品国产亚洲Av影片| 国产精品一在线观看| 麻豆精品三级全部视频| 亚洲av永久无码精品网站| 精品国产一区二区三区免费| 999成人精品视频在线| 亚洲国产精品成人午夜在线观看| 蜜国产精品jk白丝AV网站| 久久久国产精品亚洲一区| 男人狂扒美女尿口亲尿口动态图| 久久精品人人做人人妻人人玩| 国产第一福利精品导航| 久热精品视频第一页| 久久精品蜜芽亚洲国产AV| 99免费精品国产| 欧美成人天天综合在线视色| 国产精品自拍一区| 亚洲综合精品网站在线观看| 国产成人精品日本亚洲网站 | 97精品国产97久久久久久免费| 久久亚洲中文字幕精品一区| 久久久久久久久无码精品亚洲日韩 | 国产成人A人亚洲精品无码| 九色精品视频在线观看| 久久er99热精品一区二区| 成人精品一区二区三区免费看| 欧美free嫩交video| 亚洲天堂久久精品| 亚洲AV无码久久精品蜜桃| 99久久精品费精品国产| 八戒久久精品一区二区三区| 99久久www免费人成精品| 2018亚洲爱城网址| 国产精品福利电影一区二区三区四区欧美白嫩精品 | 人人妻人人澡人人爽精品欧美 |