99热成人精品热久久6网站_无码中文亚洲AV吉吉影音_国产精品制服一区二区_中文字幕乱码一区二区三区免费

首頁 > 技術支持 > 應用與案例 > 正文
第七講 單片機驅動彩色液晶屏 顯示文字:Part3.自建字庫 作者:BW.SU   發(fā)表日期:2024-01-15   來源:菱致電子   瀏覽:
目錄
第六講 單片機驅動彩色液晶屏 控制RA8889軟件:顯示文字:Part2.外接字庫
第七講 單片機驅動彩色液晶屏 控制RA8889軟件:顯示文字:Part3.自建字庫
第八講 單片機驅動彩色液晶屏 控制RA8889軟件:顯示圖片
第九講 單片機驅動彩色液晶屏 控制RA8889軟件:認識顯存并進行讀、寫、復制
第十講 單片機驅動彩色液晶屏 控制RA8889軟件:圖像運算
第十一講 單片機驅動彩色液晶屏 控制RA8889軟件:播放avi視頻
第十二講 單片機驅動彩色液晶屏 如何打包bin檔
第十三講 單片機驅動彩色液晶屏 bin檔的燒錄方法
 
如何通過RA8889 / RA8876來顯示文字?

UI界面需求最大的兩個功能,第一個是顯示圖形,第二個是顯示文字。文字部分有ASCII和中文,或者是多國語言,下面我們就專門針對RA8889如何顯示文字展開介紹。

本章要介紹如何自建中文字庫,以及單片機如何控制RA8889進行調用并顯示。

本篇要展現(xiàn)的內容比較豐富,篇幅較長,需要多些耐心閱讀。

三種文字顯示方法的優(yōu)缺比較:


通過上圖比較,自建字庫除了顯示速度會慢一些,優(yōu)勢還是很大,設計靈活度也很高,同時還可以節(jié)省專用字庫芯片的成本,具有一定的經(jīng)效益,值得多加參考!

下面開始介紹單片機如何控制RA8889來驅動彩屏顯示文字,這里主要是針對顯示中文字體進行展開說明,若還有其他國家的字體也可以借鑒該方法進行設計,有興趣的C友們可留言進行探討。

一、需求的中文字數(shù)不多,采用以下方法

  • 自建點陣字碼表;
  • 單片機獲取字碼數(shù)據(jù),按點寫入顯存,同時指定前景、背景及透明色。

框架圖:

調用函數(shù):

void User_Font_Demo(void)
{
    Show_User_Font(25, 32, 350, 180, 0, color65k_red, color65k_green, "菱致電子瑞佑科技");
    Show_User_Font(25, 32, 260, 260, 1, color65k_black, color65k_red, "單片機驅動彩色液晶屏極簡方案");
    delay_seconds(3);
}


子函數(shù):

void Show_User_Font(
    unsigned int font_lib_size // 自建字庫數(shù)組的文字個數(shù)
    ,
    unsigned int font_size // 字模大小,比如32*32點陣寫32
    ,
    unsigned short x // 顯示窗口的x軸坐標
    ,
    unsigned short y // 顯示窗口的y軸坐標
    ,
    int Chroma_key // 是否透明:0-不透明 1-透明色
    ,
    unsigned long Foreground_color // 前景色
    ,
    unsigned long Background_color // 背景色
    ,
    const unsigned char *str // 字符串
)
{
    unsigned int i, j = 0;
    unsigned int k, len; // len;字符串的長度
    unsigned char hanziCode[128];
    unsigned char strfont_0, strfont_1, Index_0, Index_1;

    Goto_Pixel_XY(x, y);
    strcpy((char *)hanziCode, str);
    len = strlen(hanziCode) / 2; // 一個中文漢字占兩個字節(jié)

    for (k = 0; k < len; k++) {
        strfont_0 = *(hanziCode + j); // 字符值
        j++;
        strfont_1 = *(hanziCode + j);
        j++;
        for (i = 0; i < font_lib_size; i++) {
            Index_0 = code_GB_32[i].Index[0]; // 取出字庫數(shù)組中漢字內碼索引值
            Index_1 = code_GB_32[i].Index[1];
            if (strfont_0 == Index_0 && strfont_1 == Index_1) // 比較字符值與漢字內碼索引值
            {
                if (Chroma_key == 1)
                    BTE_MCU_Write_ColorExpansion_Chroma_key_MCU_8bit(0, canvas_image_width, x + font_size * k, y, font_size, font_size, Foreground_color, code_GB_32[i].Msk); // 透明色
                if (Chroma_key == 0)
                    BTE_MCU_Write_ColorExpansion_MCU_8bit(0, canvas_image_width, x + font_size * k, y, font_size, font_size, Foreground_color, Background_color, code_GB_32[i].Msk); // 非透明色
                break;
            }
        }
    }
}


上例中BTE_MCU_Write_ColorExpansion_Chroma_key_MCU_8bit和BTE_MCU_Write_ColorExpansion_MCU_8bit為瑞佑官方API接口程序,本文暫不綴述。實例顯示效果如下圖:


自建漢字每個字皆可單獨取模,因此可展現(xiàn)不同字體。

附上自建漢字字模數(shù)組,漢字取模軟件為橫向8點左高位,從左到右,從上到下排列。取模的軟件可以和我們聯(lián)絡獲取。

// ------------------  漢字字模的數(shù)據(jù)結構定義 ------------------------ //
typedef struct typFNT_GB32                // 漢字字模數(shù)據(jù)結構
{
       signed char Index[2];              // 漢字內碼索引
       char Msk[128];                     // 點陣碼數(shù)據(jù):32*32/8=128
};

/////////////////////////////////////////////////////////////////////////
// 漢字字模表                                                           //
// Font:32,橫向取模左高位,數(shù)據(jù)排列:從左到右從上到下                       //
////////////////////////////////////////////////////////////////////////

struct typFNT_GB32 code_GB_32[] =   // 菱致電子瑞佑科技單片機驅動彩色液晶屏極簡方案
{
"菱", 0x00,0x00,0x00,0x00,0x00,0x60,0x06,0x00,
      0x00,0x60,0x06,0x00,0x00,0x60,0x06,0x00,
      0x3F,0xFF,0xFF,0xFC,0x00,0x60,0x06,0x00,
      0x00,0x61,0x06,0x00,0x00,0x41,0x84,0x00,
      0x0F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xF0,
      0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,
      0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,
      0x00,0x00,0x00,0x00,0x00,0x60,0x0E,0x00,
      0x00,0xE0,0x07,0x00,0x03,0x88,0x01,0xC0,
      0x07,0x18,0x00,0x70,0x3C,0x30,0x00,0x38,
      0x30,0x7F,0xFF,0x0C,0x01,0xE0,0x03,0x00,
      0x03,0xB0,0x07,0x00,0x0E,0x18,0x0C,0x00,
      0x1C,0x0E,0x38,0x00,0x00,0x03,0xE0,0x00,
      0x00,0x03,0xC0,0x00,0x00,0x1F,0x78,0x00,
      0x01,0xF8,0x0F,0xE0,0x3F,0x80,0x00,0xFE,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"致", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x10,0x00,0x3F,0xFF,0x10,0x00,
      0x3F,0xFF,0x10,0x00,0x03,0x00,0x30,0x00,
      0x02,0x08,0x3F,0xFC,0x06,0x0C,0x30,0x20,
      0x04,0x0C,0x30,0x20,0x0C,0x04,0x20,0x20,
      0x08,0x06,0x20,0x20,0x18,0x1E,0x70,0x20,
      0x3F,0xFF,0x70,0x60,0x10,0xC3,0x50,0x60,
      0x00,0xC1,0x50,0x60,0x00,0xC0,0xD8,0x40,
      0x00,0xC0,0x18,0x40,0x00,0xC0,0x08,0xC0,
      0x00,0xC0,0x0C,0xC0,0x3F,0xFE,0x0D,0x80,
      0x00,0xC0,0x07,0x80,0x00,0xC0,0x07,0x00,
      0x00,0xC0,0x03,0x00,0x00,0xC0,0x07,0x80,
      0x00,0xC0,0x0D,0x80,0x00,0xC7,0x18,0xC0,
      0x00,0xFE,0x30,0x60,0x03,0xF0,0x60,0x30,
      0x3F,0x01,0xC0,0x18,0x30,0x01,0x80,0x0C,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"電", 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
      0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,
      0x00,0x03,0x00,0x00,0x0F,0xFF,0xFF,0xE0,
      0x1F,0xFF,0xFF,0xE0,0x10,0x03,0x00,0x20,
      0x10,0x03,0x00,0x20,0x10,0x03,0x00,0x20,
      0x10,0x03,0x00,0x20,0x10,0x03,0x00,0x20,
      0x1F,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0xE0,
      0x10,0x03,0x00,0x20,0x10,0x03,0x00,0x20,
      0x10,0x03,0x00,0x20,0x10,0x03,0x00,0x20,
      0x10,0x03,0x00,0x20,0x10,0x03,0x00,0x20,
      0x10,0x03,0x00,0x20,0x1F,0xFF,0xFF,0xE0,
      0x07,0xFF,0xFF,0x80,0x00,0x03,0x00,0x06,
      0x00,0x03,0x00,0x06,0x00,0x03,0x00,0x06,
      0x00,0x03,0x00,0x04,0x00,0x03,0x00,0x0C,
      0x00,0x01,0xFF,0xFC,0x00,0x00,0xFF,0xF0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"子", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,
      0x00,0x00,0x03,0x80,0x00,0x00,0x06,0x00,
      0x00,0x00,0x1C,0x00,0x00,0x00,0x38,0x00,
      0x00,0x00,0xE0,0x00,0x00,0x03,0x80,0x00,
      0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,
      0x00,0x01,0xC0,0x00,0x00,0x00,0xE0,0x00,
      0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,
      0x00,0x00,0x30,0x00,0x00,0x00,0x18,0x00,
      0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,
      0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,
      0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,
      0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,
      0x01,0x00,0x18,0x00,0x01,0xC0,0x70,0x00,
      0x00,0xFF,0xE0,0x00,0x00,0x1F,0x80,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"瑞", 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,
      0x00,0x00,0x3F,0x00,0x00,0x07,0xBF,0x7C,
      0x3F,0xF7,0xBF,0x7C,0x7F,0xF7,0xBF,0x7C,
      0x7F,0xFF,0xBF,0x7C,0x7F,0xF7,0xFF,0xFC,
      0x3F,0xF7,0xFF,0xFC,0x0F,0xE7,0xFF,0xFC,
      0x0F,0xCF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,
      0x0F,0xDF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFE,
      0x3F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,
      0x3F,0xDF,0xFF,0xFC,0x3F,0xC0,0x7E,0x00,
      0x1F,0xCF,0xFF,0xF8,0x0F,0xDF,0xFF,0xFC,
      0x0F,0xDF,0xFF,0xFC,0x0F,0xEF,0xFF,0xFC,
      0x3F,0xF7,0x77,0x7C,0x7F,0xF7,0x77,0x7C,
      0x7F,0xF7,0x77,0x7C,0x7F,0xF7,0x77,0x7C,
      0x7F,0xFF,0x76,0xFC,0x10,0x1F,0x75,0xFC,
      0x00,0x1F,0x75,0xFC,0x00,0x1F,0x75,0xFC,
      0x00,0x1F,0x75,0xFC,0x00,0x00,0x00,0x00,

"佑", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x01,0xF8,0x7F,0x00,0x01,0xF8,0x7F,0x00,
      0x03,0xF8,0x7F,0x00,0x03,0xE0,0x7F,0x00,
      0x03,0xCF,0xFF,0xFE,0x07,0xDF,0xFF,0xFF,
      0x07,0xDF,0xFF,0xFF,0x07,0xDF,0xFF,0xFF,
      0x0F,0xDF,0xFF,0xFF,0x1F,0xCF,0xFF,0xFE,
      0x1F,0xE3,0xFC,0x00,0x3F,0xE3,0xF8,0x00,
      0x3F,0xE7,0xC0,0x00,0x3F,0xEF,0x9F,0xF8,
      0x1F,0xCF,0xBF,0xFE,0x0F,0x9F,0xBF,0xFE,
      0x07,0xBF,0xBF,0xFE,0x07,0xBF,0xBF,0xFE,
      0x07,0xBF,0xBF,0xFE,0x07,0x9F,0x38,0x7E,
      0x07,0xCE,0x78,0x7E,0x07,0xE0,0xF8,0x7E,
      0x07,0xE1,0xF8,0x7E,0x07,0xE1,0xFF,0xFE,
      0x07,0xE1,0xFF,0xFE,0x07,0xE1,0xFF,0xFE,
      0x07,0xE1,0xFF,0xFE,0x07,0xE1,0xFF,0xFE,
      0x07,0xE0,0xFF,0xFC,0x00,0x00,0x00,0x00,

"科", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x1F,0xFE,0x01,0xF0,0x3F,0xFE,0x63,0xF8,
      0x3F,0xFC,0xF9,0xF8,0x3F,0xFD,0xFC,0xF8,
      0x3F,0xFD,0xFE,0x78,0x1F,0xF9,0xFF,0x78,
      0x07,0xF1,0xFF,0x78,0x3F,0xFE,0x3E,0x78,
      0x7F,0xFE,0x0C,0xF8,0x7F,0xFD,0xF1,0xF8,
      0x7F,0xFD,0xF9,0xF8,0x7F,0xFB,0xFE,0xF8,
      0x3F,0x81,0xFE,0x78,0x07,0x31,0xFE,0x78,
      0x0E,0xF8,0x7E,0xF8,0x0E,0xFC,0x1C,0xF8,
      0x1E,0xFE,0x01,0xFC,0x3E,0x7E,0x07,0xFE,
      0x7F,0x7E,0xFF,0xFE,0x7F,0xBC,0xFF,0xFE,
      0x7F,0x89,0xFF,0xFE,0x7F,0xE7,0xFF,0xFE,
      0x3F,0xF7,0xFF,0xF8,0x07,0xF3,0x83,0xF8,
      0x07,0xF0,0x03,0xF8,0x07,0xF0,0x03,0xF8,
      0x07,0xF0,0x03,0xF8,0x07,0xF0,0x03,0xF8,
      0x03,0xE0,0x01,0xF8,0x00,0x00,0x00,0x00,

"技", 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
      0x07,0xC0,0x3F,0x00,0x07,0xE0,0x3F,0x00,
      0x07,0xE0,0x3F,0x00,0x07,0xE0,0x7F,0x80,
      0x0F,0xE7,0xFF,0xFC,0x3F,0xEF,0xFF,0xFE,
      0x7F,0xEF,0xFF,0xFE,0x7F,0xEF,0xFF,0xFE,
      0x7F,0xEF,0xFF,0xFC,0x7F,0xF3,0xFF,0xF8,
      0x1F,0xF0,0x3F,0x00,0x07,0xE1,0xFF,0xF0,
      0x07,0xE7,0xFF,0xF8,0x07,0xF7,0xFF,0xFC,
      0x3F,0xF7,0xFF,0xFC,0x7F,0xF7,0xFF,0xFC,
      0x7F,0xF7,0xF1,0xF8,0x7F,0xF3,0xF1,0xF8,
      0x7F,0xF3,0xFF,0xF8,0x3F,0xE1,0xFF,0xF0,
      0x07,0xE1,0xFF,0xE0,0x07,0xE0,0xFF,0xC0,
      0x07,0xE3,0xFF,0xF0,0x3F,0xCF,0xFF,0xFC,
      0x3F,0xDF,0xFF,0xFE,0x7F,0xDF,0xFF,0xFE,
      0x7F,0xDF,0xF3,0xFE,0x7F,0xDF,0xE0,0xFE,
      0x3F,0xCF,0x80,0x7C,0x00,0x00,0x00,0x00,

"單", 0x00,0x00,0x00,0x00,0x00,0x01,0x38,0x00,
      0x00,0x03,0x3C,0x00,0x00,0x3E,0x38,0x00,
      0x00,0x3E,0x70,0x00,0x00,0x3C,0xE0,0x00,
      0x00,0x1C,0xE0,0x00,0x00,0x1D,0xFC,0x00,
      0x00,0x07,0xFE,0x00,0x00,0x0F,0xCF,0x00,
      0x00,0xB3,0x8F,0x00,0x00,0xC3,0xCF,0x00,
      0x00,0xEF,0xFE,0x00,0x00,0x7F,0xDC,0x00,
      0x00,0x7F,0x9C,0x00,0x00,0x63,0xF8,0x00,
      0x00,0x7F,0xF8,0x00,0x00,0x3F,0xF0,0x00,
      0x00,0x1F,0x9F,0xC0,0x00,0x07,0xFF,0xE0,
      0x00,0x3F,0x80,0x60,0x01,0xFB,0x80,0x00,
      0x0F,0xC3,0x80,0x00,0x0F,0x03,0x80,0x00,
      0x0C,0x03,0x80,0x00,0x00,0x03,0x80,0x00,
      0x00,0x03,0x80,0x00,0x00,0x01,0x80,0x00,
      0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,
      0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,

"片", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0xE0,0x00,0x00,0x00,0x78,0x00,
      0x00,0x00,0x38,0x00,0x00,0x20,0x38,0x00,
      0x00,0x38,0x30,0x00,0x00,0x1C,0x30,0x00,
      0x00,0x1C,0x7C,0x00,0x00,0x1C,0x7E,0x00,
      0x00,0x1B,0xFE,0x00,0x00,0x1F,0xF0,0x00,
      0x00,0x19,0xC0,0x00,0x00,0x1A,0x00,0x00,
      0x00,0x18,0x1F,0x80,0x00,0x19,0xFF,0xC0,
      0x00,0x1F,0xD8,0x00,0x00,0x1E,0x18,0x00,
      0x00,0x18,0x18,0x00,0x00,0x38,0x18,0x00,
      0x00,0x30,0x18,0x00,0x00,0x30,0x18,0x00,
      0x00,0x70,0x18,0x00,0x00,0xE0,0x18,0x00,
      0x00,0xC0,0x18,0x00,0x00,0x40,0x18,0x00,
      0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,
      0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"機", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x30,0x00,0x00,0x00,0x18,0x00,0x00,
      0x00,0x18,0x00,0x00,0x00,0x18,0x06,0x00,
      0x00,0x38,0x0F,0x00,0x00,0x3D,0x1F,0x80,
      0x00,0x3E,0xBF,0x00,0x00,0xFC,0xC7,0x00,
      0x01,0xF0,0xC6,0x00,0x2F,0xF0,0xC6,0x00,
      0x1F,0xB4,0xC6,0x00,0x1F,0x34,0x8E,0x00,
      0x06,0x78,0x8C,0x00,0x00,0x70,0x8C,0x40,
      0x00,0xF1,0x8C,0x20,0x03,0xE1,0x8C,0x30,
      0x07,0xE1,0x8C,0x10,0x07,0xE1,0x8C,0x18,
      0x03,0x61,0x0E,0x1C,0x00,0x63,0x07,0xFE,
      0x00,0x62,0x01,0xF8,0x00,0x60,0x00,0x00,
      0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"驅", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x1E,0x03,0xC0,0x00,0xFF,0x1F,0xC0,
      0x00,0x7F,0x0F,0x80,0x00,0x3F,0x10,0x00,
      0x00,0x0E,0x20,0x00,0x00,0x8E,0x31,0xC0,
      0x00,0x8E,0x30,0xE0,0x01,0x8C,0x30,0xE0,
      0x01,0x9C,0x38,0xE0,0x01,0x9C,0x3E,0xC0,
      0x01,0x9C,0x3F,0xC0,0x01,0xFF,0x23,0xE0,
      0x03,0xFF,0xA3,0xE0,0x03,0xC3,0xA7,0xF0,
      0x01,0x83,0xBF,0x70,0x00,0x33,0x6C,0x30,
      0x03,0xE3,0x60,0x00,0x1F,0xC7,0x60,0x70,
      0x1F,0x87,0x7F,0xF8,0x0E,0x8E,0x3F,0xFC,
      0x08,0x7E,0x18,0x00,0x00,0x1C,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"動", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,
      0x00,0x7E,0x07,0x00,0x00,0x7F,0x07,0x00,
      0x00,0x3F,0x0B,0x00,0x00,0x1E,0x0B,0x00,
      0x00,0x38,0x07,0xC0,0x00,0x60,0x1F,0xE0,
      0x01,0xC7,0x3F,0xE0,0x03,0x3F,0xFE,0x60,
      0x04,0xFE,0x4C,0x60,0x0F,0xFC,0xDC,0x60,
      0x0F,0xFC,0x9C,0x60,0x0F,0xFB,0x98,0xC0,
      0x07,0x73,0x98,0xC0,0x00,0xE7,0xB8,0xC0,
      0x01,0xDF,0xB8,0xC0,0x01,0xFD,0xE8,0xC0,
      0x01,0xF0,0x6D,0x80,0x00,0xE0,0x47,0x80,
      0x00,0x40,0xC7,0x80,0x00,0x00,0x87,0x00,
      0x00,0x01,0x02,0x00,0x00,0x02,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"彩", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
      0x00,0x07,0x80,0x00,0x00,0x0F,0x84,0x00,
      0x00,0x3F,0x87,0x00,0x00,0x70,0x07,0xC0,
      0x00,0xC7,0xC3,0xC0,0x00,0x7C,0xC3,0xC0,
      0x01,0x99,0xC7,0x80,0x01,0x8B,0x8E,0x00,
      0x01,0xCF,0x1E,0x00,0x00,0xDF,0x9F,0x80,
      0x00,0x7F,0xA1,0x80,0x01,0xFC,0x21,0xC0,
      0x07,0xEC,0x43,0x80,0x1F,0x8E,0x47,0x00,
      0x7F,0x0C,0x8F,0x00,0x7C,0x1D,0x1F,0xC0,
      0x00,0x3E,0x18,0xE0,0x00,0x7C,0x10,0xE0,
      0x03,0xF8,0x00,0xE0,0x07,0xF8,0x01,0xC0,
      0x07,0x98,0x03,0x80,0x00,0x08,0x07,0x00,
      0x00,0x08,0x0E,0x00,0x00,0x08,0x18,0x00,
      0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"色", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x03,0x00,0x00,0x00,0x03,0x80,0x00,
      0x00,0x07,0x80,0x00,0x00,0x0F,0x80,0x00,
      0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,
      0x00,0x38,0xF0,0x00,0x00,0x31,0xC0,0x00,
      0x00,0x23,0x80,0x00,0x00,0x07,0xF8,0x00,
      0x00,0x0F,0xFC,0x00,0x00,0x3F,0x1E,0x00,
      0x00,0xFF,0x9C,0x00,0x00,0xF3,0x98,0x00,
      0x00,0x63,0x38,0x00,0x00,0x67,0xF0,0x00,
      0x00,0x7F,0xF8,0x00,0x00,0xFC,0x00,0x00,
      0x00,0xF0,0x00,0x20,0x00,0xC0,0x00,0x20,
      0x00,0xC0,0x00,0x20,0x00,0xC0,0x00,0x60,
      0x00,0xC0,0x00,0x60,0x00,0x70,0x03,0xF0,
      0x00,0x3F,0xFF,0xF0,0x00,0x0F,0xFF,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"液", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x01,0xC0,0x00,0x00,0x03,0xF0,0x00,
      0x00,0x83,0xF0,0x00,0x00,0xC2,0xF0,0x00,
      0x00,0xE3,0x90,0x00,0x00,0x76,0x38,0x00,
      0x00,0x71,0xFC,0x00,0x00,0xFF,0xFC,0x00,
      0x00,0x0F,0xF0,0x00,0x08,0x07,0xE0,0x00,
      0x18,0x01,0xFF,0x00,0x18,0x03,0x9F,0x00,
      0x1E,0x0F,0x3B,0x80,0x0F,0x1E,0x33,0x00,
      0x07,0x2E,0x77,0x00,0x07,0x3E,0xFE,0x00,
      0x07,0x3E,0xDC,0x00,0x06,0x77,0x9C,0x00,
      0x06,0xEF,0xF8,0x00,0x07,0x4C,0x78,0x00,
      0x07,0x0C,0x7C,0x00,0x07,0x0C,0x1F,0x00,
      0x07,0x0C,0x0F,0xE0,0x07,0x0C,0x07,0xF8,
      0x02,0x0C,0x01,0xFC,0x00,0x04,0x00,0x1C,
      0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"晶", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,
      0x00,0x07,0xFC,0x00,0x00,0x3F,0x9C,0x00,
      0x00,0x30,0x1C,0x00,0x00,0x18,0x1C,0x00,
      0x00,0x1F,0xD8,0x00,0x00,0x1F,0xD8,0x00,
      0x00,0x1E,0x18,0x00,0x00,0x18,0x18,0x00,
      0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF0,0x00,
      0x00,0x08,0x7F,0x80,0x00,0x00,0x3F,0x80,
      0x00,0x0C,0xF3,0xC0,0x00,0x3E,0xC3,0xC0,
      0x01,0xC6,0xC3,0x80,0x01,0x86,0xFB,0x80,
      0x01,0xFE,0xFF,0x80,0x01,0xF6,0xC3,0x80,
      0x00,0xC6,0xC3,0x80,0x00,0xC6,0xFB,0x80,
      0x00,0xFE,0xFF,0x80,0x00,0xFE,0x43,0x80,
      0x00,0xE6,0x03,0x00,0x00,0x44,0x03,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"屏", 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,
      0x00,0x01,0xFE,0x00,0x00,0x07,0xFE,0x00,
      0x00,0x0B,0xFE,0x00,0x00,0x1C,0x9C,0x00,
      0x00,0x0C,0x38,0x00,0x00,0x1F,0xF8,0x00,
      0x00,0x1F,0xFC,0x00,0x00,0x3F,0x08,0x00,
      0x00,0x34,0x7E,0x00,0x00,0x37,0x8C,0x00,
      0x00,0x67,0x18,0x00,0x00,0x63,0x7C,0x00,
      0x00,0xC3,0xFC,0x00,0x00,0xDF,0xFC,0x00,
      0x01,0x87,0xCC,0x00,0x01,0x87,0x0C,0xC0,
      0x01,0x06,0xFF,0xE0,0x03,0x0F,0xFD,0xF0,
      0x07,0x3F,0x0C,0x00,0x06,0xFE,0x0C,0x00,
      0x0E,0xF6,0x0C,0x00,0x0C,0x06,0x0C,0x00,
      0x18,0x0E,0x0C,0x00,0x30,0x0E,0x0C,0x00,
      0x60,0x0C,0x0C,0x00,0x00,0x08,0x0C,0x00,
      0x00,0x00,0x0C,0x00,0x00,0x00,0x0C,0x00,
      0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,

"極", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
      0x00,0x38,0x00,0x00,0x00,0x1C,0x06,0x00,
      0x00,0x1C,0x0F,0x00,0x00,0x1C,0x3D,0x80,
      0x00,0x3E,0x79,0x80,0x00,0xFE,0xF1,0x80,
      0x01,0xFD,0xF9,0x80,0x27,0xF8,0xF3,0x00,
      0x1F,0xF9,0x73,0x00,0x1F,0xBA,0x67,0x00,
      0x0F,0x3C,0xE3,0x80,0x06,0x38,0xC3,0x80,
      0x00,0x39,0xC0,0xC0,0x00,0x71,0xC0,0xC0,
      0x00,0xFF,0xF0,0xC0,0x01,0xF3,0xFD,0xC0,
      0x03,0xE3,0x1F,0x80,0x03,0xE7,0x0F,0xC0,
      0x01,0xE6,0x0F,0xE0,0x01,0x37,0x3F,0xF0,
      0x00,0x34,0xF8,0xF8,0x00,0x34,0x20,0x3C,
      0x00,0x10,0x00,0x1C,0x00,0x10,0x00,0x04,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"簡", 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,
      0x00,0x00,0x0E,0x00,0x00,0x10,0x0E,0x00,
      0x00,0x18,0x1E,0x00,0x00,0x3C,0xBF,0xC0,
      0x00,0x79,0xBF,0xC0,0x00,0xFF,0x3F,0x80,
      0x01,0xFF,0x16,0x00,0x01,0xF6,0x1C,0x00,
      0x01,0xC0,0x7E,0x00,0x00,0x01,0xFF,0x00,
      0x00,0x07,0xCF,0x00,0x00,0x1C,0x07,0x80,
      0x00,0x18,0x07,0x80,0x00,0x3B,0xC3,0x80,
      0x00,0xA3,0xE3,0x80,0x00,0xCC,0x63,0x80,
      0x00,0xCC,0x63,0x80,0x00,0x8F,0xE3,0x80,
      0x00,0x4F,0x63,0x80,0x00,0x4C,0x67,0x80,
      0x00,0x8F,0xE7,0x80,0x00,0x8F,0xC7,0x80,
      0x00,0x86,0xC7,0x80,0x01,0x80,0x47,0x80,
      0x01,0x80,0x3F,0x80,0x00,0x80,0x1F,0x80,
      0x00,0x00,0x07,0x80,0x00,0x00,0x03,0x00,
      0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,

"方", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x03,0x80,0x00,0x00,0x03,0xE0,0x00,
      0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,
      0x00,0x01,0xF0,0x00,0x00,0x03,0x80,0x00,
      0x00,0x1C,0x3F,0xE0,0x00,0x0F,0xE3,0xF0,
      0x00,0xFF,0xCE,0x00,0x0F,0xF8,0xF0,0x00,
      0x0F,0xE0,0xE0,0x00,0x0F,0x81,0xF8,0x00,
      0x06,0x01,0xFE,0x00,0x00,0x03,0x87,0x00,
      0x00,0x07,0x07,0x00,0x00,0x0E,0x07,0x00,
      0x00,0x1C,0x0E,0x00,0x00,0x3A,0x0E,0x00,
      0x00,0x72,0x1C,0x00,0x00,0xE2,0x38,0x00,
      0x01,0x83,0x78,0x00,0x01,0x03,0xF0,0x00,
      0x00,0x01,0xE0,0x00,0x00,0x01,0xC0,0x00,
      0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

"案", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0xE0,0x00,0x00,0x00,0x60,0x00,
      0x00,0x00,0x7C,0x00,0x00,0x00,0xCF,0x00,
      0x00,0x09,0x8F,0x00,0x00,0x0F,0x9E,0x00,
      0x00,0x1F,0xBC,0x00,0x00,0x3E,0xF8,0x00,
      0x00,0x1D,0x7B,0xE0,0x00,0x19,0xFF,0xF0,
      0x00,0x0F,0x70,0x00,0x01,0xFE,0x70,0x00,
      0x0F,0xCF,0xE0,0x00,0x1F,0x0F,0xF8,0x00,
      0x00,0x03,0xFE,0x00,0x00,0x0F,0x8E,0x00,
      0x00,0xFF,0xE3,0x00,0x00,0x00,0xFF,0x00,
      0x00,0x3F,0xE0,0x00,0x00,0x1C,0x60,0x00,
      0x00,0x00,0x60,0x00,0x00,0x02,0x67,0x00,
      0x00,0x3C,0x63,0x80,0x00,0x38,0xE1,0x80,
      0x00,0x31,0xE0,0x80,0x00,0x20,0xC0,0x00,
      0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};


二、需求全套中文,字數(shù)多必然需要更多存儲空間,那么可以存放到FLASH中。

這里所講的FLASH是與RA8889 / RA8876連接的,一般是用來存放UI所需的圖資,也可以將字庫存放于此,這樣不需要增加成本,但可節(jié)省掉外接字庫芯片的成本!

框架圖:




自建字庫不限套數(shù),單套占用容量不大,比如24x24點是576KB。這里提供的算法是通過RA8889 / RA8876的DMA(Direct Memory Access)功能獲取到字符數(shù)據(jù),再通過BTE(Block Transfer Engine)功能將文字顯示出來。經(jīng)過優(yōu)化,目前顯示速度還算不錯,參考下方展示視頻:




調用代碼范例:

    // 演示自建字庫調用
    BTE_Solid_Fill(display_address, canvas_image_width, 0, 0, 0x01, LCD_width, LCD_height); // 緩存顯示區(qū)域:填充底色0x01;display_address此處自定義為canvas_image_width*LCD_height*24/8
    SPI_NOR_initial_DMA(0, Font_BUS, Font_CS, 1, 0);    //FLASH初始化
    User_Def_Font_Initial();    //顯示自定義文字初始化

    Font_Size_ChromaKey_ForeColor_BackColor(24, 1, color256_red, color256_white);    //字體參數(shù)設定(最多256色)
    Show_User_Def_String("自建漢字庫:宋體16x16演示", songti16, 16, 2, 50, 20);    //顯示字符串
    Show_User_Def_String("自建漢字庫:楷體16x16演示", kaiti16, 16, 2, 50, 45);    //顯示字符串
    Show_User_Def_String("自建漢字庫:黑體16x16演示", heiti16, 16, 2, 50, 70);    //顯示字符串

    Font_Size_ChromaKey_ForeColor_BackColor(24, 1, color256_blue, color256_white);    //字體參數(shù)設定(最多256色)
    Show_User_Def_String("自建漢字庫:宋體24x24演示", songti24, 24, 2, 50, 100);    //顯示字符串
    Show_User_Def_String("自建漢字庫:楷體24x24演示", kaiti24, 24, 2, 50, 125);    //顯示字符串
    Show_User_Def_String("自建漢字庫:黑體24x24演示", heiti24, 24, 2, 50, 150);    //顯示字符串

    Font_Size_ChromaKey_ForeColor_BackColor(32, 0, color256_yellow, color256_black);    //字體參數(shù)設定(最多256色)
    Show_User_Def_String("自建漢字庫:宋體32x32演示", songti32, 32, 0, 50, 200);    //顯示字符串
    Show_User_Def_String("自建漢字庫:楷體32x32演示", kaiti32, 32, 0, 50, 240);    //顯示字符串
    Show_User_Def_String("自建漢字庫:黑體32x32演示", heiti32, 32, 0, 50, 280);    //顯示字符串

 // 圖層S0色深恢復初始化狀態(tài)
 #if defined(MCU_8bit_ColorDepth_8bpp)
  BTE_S0_Color_8bpp();
 #endif
 #if defined(MCU_8bit_ColorDepth_16bpp) || defined(MCU_16bit_ColorDepth_16bpp)
  BTE_S0_Color_16bpp();
 #endif
 #if defined(MCU_8bit_ColorDepth_24bpp) || defined(MCU_16bit_ColorDepth_24bpp_Mode_1) || defined(MCU_16bit_ColorDepth_24bpp_Mode_2)
  BTE_S0_Color_24bpp();
 #endif

    BTE_Memory_Copy_Chroma_key(display_address, canvas_image_width, 0, 0, 0, canvas_image_width, 0, 0, 0x01, LCD_width, LCD_height); // 緩存寫好的文字搬移到顯示層,剔除底色0x01
 


上方代碼顯示實例:


RA8889內建128Mb SDRAM作為顯存,顯存是自由定義的,這里我們設定為畫布寬度(canvas_image_width)為800,測試的屏寬(LCD_width)為800,屏高(LCD_height)為480,將顯存規(guī)劃為主顯示層、緩沖層S0、緩沖層S1…如下圖示:



實際操作分為三步:

  1. DMA(線性):RA8889尋址獲取字符數(shù)據(jù)并通過DMA方式寫入緩存S1;
  2. 轉置:MCU對緩存S1的數(shù)據(jù)轉置后寫入緩存S0,同時給文字加上前景、背景色或者透明色;
  3. BTE剔除底色:RA8889內建BTE功能,可將底色剔除后再復制到主顯示層,因此可以形成文字的透明效果。

附上算法程序供參考:
 

/***************************************************************************************
 * @file RA8889_Show_User_Def_FontLib_bitPic.c
 * @author Weran
 * @version 3.0
 * @date 2023/08/16
 * @brief   顯示用戶自定義字庫或者單色位圖,寬度為8的倍數(shù),字形長寬相等,位圖不限高度
 * @copyright www.m.dahua100.cn
 ****************************************************************************************/
#include "RA8889.h"
#include "RA8889_MCU_IF.h"
#include "RA8889_API.h"
#include "delay.h"
#include "RA8889_Show_User_Def_FontLib_bitPic.h"
#include "string.h"

/*****************************************
// 自建漢字庫初始化
******************************************/
void User_Def_Font_Initial(void)
{
    SPI_Clock_Period(2);
    Select_SFI_Single_Mode_Dummy_8T_0Bh();
    Enable_SFlash_SPI();

    #ifdef Over_128Mb // FLASH大小超過128Mb,切換為32位尋址
        switch_24bits_to_32bits(Font_BUS, Font_CS);
        Select_SFI_32bit_Address();
    #else
        Select_SFI_24bit_Address();
    #endif

    switch (Font_CS) {
        case 0:
            Select_SFI_0();
            break;
        case 1:
            Select_SFI_1();
            break;
        case 2:
            Select_SFI_2();
            break;
        case 3:
            Select_SFI_3();
            break;
    }

    Select_SFI_DMA_Mode();
    SFI_DMA_Destination_Start_Address(cache_address);

    BTE_S0_Memory_Start_Address(cache_address); // 緩存圖層
    BTE_S0_Image_Width(main_image_width);
    BTE_S0_Color_8bpp(); // 緩存色深固定8bit,不可變更

    BTE_Destination_Memory_Start_Address(display_address); // 顯示到目的圖層
    BTE_Destination_Image_Width(main_image_width);

    // 目的窗口色深
    #if defined(MCU_8bit_ColorDepth_8bpp)
        BTE_Destination_Color_8bpp();
    #endif
    #if defined(MCU_8bit_ColorDepth_16bpp) || defined(MCU_16bit_ColorDepth_16bpp)
        BTE_Destination_Color_16bpp();
    #endif
    #if defined(MCU_8bit_ColorDepth_24bpp) || defined(MCU_16bit_ColorDepth_24bpp_Mode_1) || defined(MCU_16bit_ColorDepth_24bpp_Mode_2)
        BTE_Destination_Color_24bpp();
    #endif

    BTE_Window_Size(8, 1); // 每次延展的區(qū)塊大?。?x1
    BTE_ROP_Code(15);
}

/*****************************************
// 字體顯示效果設定函數(shù)
// Font_Size:字型大小
// ChromaKey:0-不透明;1-透明
// Foreground_color:前景色,最多256色
// Foreground_color:背景色,最多256色
******************************************/
void Font_Size_ChromaKey_ForeColor_BackColor(unsigned short Font_Size, unsigned char ChromaKey, unsigned char Foreground_color, unsigned char Background_color)
{
    SFI_DMA_Transfer_Number(Font_Size * Font_Size / 8); // DMA單個漢字字節(jié)數(shù)

    Foreground_color_256(Foreground_color);

    if (ChromaKey == 1 && Foreground_color == Background_color)
        Background_color_256(Background_color >> 1); // 當選擇透明色時前景色與背景色不能一樣,移1位區(qū)別
    else
        Background_color_256(Background_color);

    if (ChromaKey == 0)
        BTE_Operation_Code(14); // 背景非透明
    else if (ChromaKey == 1)
        BTE_Operation_Code(15); // 背景透明
}

/*****************************************************
// 顯示字符串函數(shù)
// str:字符串
// Font_Lib_Offset:漢字庫在FLASH中地址偏移,宏定義預設
// Font_Size:字型大小
// Font_Gap:字符間距
// x & y:字符串顯示坐標
******************************************************/
void Show_User_Def_String(char *str, unsigned int Font_Lib_Offset, unsigned short Font_Size, unsigned char Font_Gap, unsigned short x, unsigned short y)
{
    unsigned char i, len;
    unsigned short hanziIndex;
    const char hanziCode[200];

    strcpy((char *)hanziCode, str);
    len = strlen(&*hanziCode) / 2;

    for (i = 0; i < len; i++) {
        hanziIndex = 94 * (hanziCode[2 * i] - 0xA1) + (hanziCode[2 * i + 1] - 0xA1); // 漢字區(qū)碼、位碼均起始0xA1
        Show_User_Def_Font(hanziIndex, Font_Lib_Offset, Font_Size, x + Font_Size * i + Font_Gap * (i - 1), y);
    }
}

/**********************************************************
// 顯示自定義漢字函數(shù)
// 注意:字寬必須為8的倍數(shù)
// hanziIndex:漢字在國標碼中的位置
// Font_Lib_Offset:漢字庫在FLASH中地址偏移,宏定義預設
// Font_Size:字型大小
// x & y:字符顯示坐標
**********************************************************/
void Show_User_Def_Font(unsigned short hanziIndex, unsigned int Font_Lib_Offset, unsigned short Font_Size, unsigned short x, unsigned short y)
{
    unsigned char i, j;
    unsigned short Width_Byte = Font_Size / 8; // 寬度按字節(jié)數(shù)
    unsigned short Font_Byte  = 0;             // 單個字體字節(jié)計數(shù)

    Memory_Linear_Mode(); // 線性模式
    SFI_DMA_Source_Start_Address(Font_Size * Font_Size / 8 * hanziIndex + Font_Lib_Offset);
    Start_SFI_DMA();
    Check_Busy_SFI_DMA();
    Memory_XY_Mode(); // 區(qū)塊模式

    /*在8bpp模式下先進行轉置并延展,再上色*/
    for (i = 0; i < Font_Size; i++) // 字高,每次處理1bit=1點
    {
        for (j = 0; j < Width_Byte; j++) // 字寬
        {
            BTE_S0_Window_Start_XY(Font_Byte++, 0);            // 每次處理1byte=8點
            BTE_Destination_Window_Start_XY(x + 8 * j, y + i); // 轉置+延展
            BTE_Enable();
            Check_BTE_Busy();
        }
    }
}

/*****************************************
// 單色位圖顯示初始化
// Pic_Width:圖片寬度
// Pic_Height:圖片高度
// ChromaKey:0-不透明;1-透明
// Foreground_color:前景色,最多256色
// Foreground_color:背景色,最多256色
******************************************/
void Bit_Picture_Initial(unsigned short Pic_Width, unsigned short Pic_Height, unsigned char ChromaKey, unsigned char Foreground_color, unsigned char Background_color)
{

    SPI_Clock_Period(2);
    Select_SFI_Single_Mode_Dummy_8T_0Bh();
    Enable_SFlash_SPI();

    #ifdef Over_128Mb // FLASH大小超過128Mb,切換為32位尋址
        switch_24bits_to_32bits(Font_BUS, Font_CS);
        Select_SFI_32bit_Address();
    #else
        Select_SFI_24bit_Address();
    #endif

    switch (Font_CS) {
        case 0:
            Select_SFI_0();
            break;
        case 1:
            Select_SFI_1();
            break;
        case 2:
            Select_SFI_2();
            break;
        case 3:
            Select_SFI_3();
            break;
    }

    Select_SFI_DMA_Mode();
    SFI_DMA_Destination_Start_Address(cache_address);

    BTE_S0_Memory_Start_Address(cache_address); // 緩存圖層
    BTE_S0_Image_Width(main_image_width);
    BTE_S0_Color_8bpp(); // 緩存色深固定8bit,不可變更

    BTE_Destination_Memory_Start_Address(display_address); // 顯示到目的圖層
    BTE_Destination_Image_Width(main_image_width);

    // 目的窗口色深
    #if defined(MCU_8bit_ColorDepth_8bpp)
        BTE_Destination_Color_8bpp();
    #endif
    #if defined(MCU_8bit_ColorDepth_16bpp) || defined(MCU_16bit_ColorDepth_16bpp)
        BTE_Destination_Color_16bpp();
    #endif
    #if defined(MCU_8bit_ColorDepth_24bpp) || defined(MCU_16bit_ColorDepth_24bpp_Mode_1) || defined(MCU_16bit_ColorDepth_24bpp_Mode_2)
        BTE_Destination_Color_24bpp();
    #endif

    BTE_Window_Size(8, 1);                               // 每次延展的區(qū)塊大?。?x1
    SFI_DMA_Transfer_Number(Pic_Width * Pic_Height / 8); // DMA單張圖片字節(jié)字節(jié)數(shù)

    Foreground_color_256(Foreground_color);

    if (ChromaKey == 1 && Foreground_color == Background_color)
        Background_color_256(Background_color >> 1); // 當選擇透明色時前景色與背景色不能一樣,移1位區(qū)別
    else
        Background_color_256(Background_color);

    BTE_ROP_Code(15);
    if (ChromaKey == 0)
        BTE_Operation_Code(14); // 背景非透明
    else if (ChromaKey == 1)
        BTE_Operation_Code(15); // 背景透明
}

/**********************************************************
// 顯示單色位圖函數(shù)
// 注意:圖片寬度必須為8的倍數(shù)
// Pic_Offset:圖片在FLASH中地址偏移
// Pic_Width:圖片寬度(必須為8的倍數(shù))
// Pic_Height:圖片高度
// x & y:圖片顯示坐標
**********************************************************/
void Show_Bit_Picture(unsigned int Pic_Offset, unsigned short Pic_Width, unsigned short Pic_Height, unsigned short x, unsigned short y)
{
    unsigned char i, j;
    unsigned short Pic_Width_Byte = Pic_Width / 8; // 寬度按字節(jié)數(shù)
    unsigned short Pic_Byte       = 0;             // 單張圖片字節(jié)計數(shù)

    Memory_Linear_Mode(); // 線性模式
    SFI_DMA_Source_Start_Address(Pic_Offset);
    Start_SFI_DMA();
    Check_Busy_SFI_DMA();
    Memory_XY_Mode(); // 區(qū)塊模式

    /*在8bpp模式下先進行轉置并延展,再上色*/
    for (i = 0; i < Pic_Height; i++) // 圖片高,每次處理1bit=1點
    {
        for (j = 0; j < Pic_Width_Byte; j++) // 圖片寬度,按字節(jié)數(shù)
        {
            BTE_S0_Window_Start_XY(Pic_Byte++, 0);             // 每次處理1byte=8點
            BTE_Destination_Window_Start_XY(x + 8 * j, y + i); // 轉置+延展
            BTE_Enable();
            Check_BTE_Busy();
        }
    }
}


函數(shù)聲明及宏定義:

/****************************************************************************************
  * @file  RA8889_Show_User_Def_FontLib_bitPic.h
  * @author  Weran
  * @version 3.0
  * @date  2023/08/16
  * @brief   顯示用戶自定義字庫或者單色位圖,寬度為8的倍數(shù),字形長寬相等,位圖不限高度
  * @copyright www.m.dahua100.cn
*****************************************************************************************/
#ifndef __RA8889_SHOW_USER_DEF_FONTLIB_BITPIC_H
#define __RA8889_SHOW_USER_DEF_FONTLIB_BITPIC_H
 
#include "UserDef.h"

#define display_address    canvas_image_width*LCD_height*24/8  //延展后目標顯示地址
#define cache_address    canvas_image_width*LCD_height*24/8*2 //緩存地址 (8bpp),寬x高滿足單字容量即可

#define Font_BUS 1     //自建字庫總線地址
#define Font_CS  2     //自建字庫片選地址
//#define Over_128Mb     //FLASH容量超過128Mb

/*字庫可以多套合并,套數(shù)不限,但字寬必須為8的倍數(shù),bin檔可使用PackagingTool等軟件合并*/
#define heiti16   0x00000000   //黑體16x16起始地址
#define heiti24   0x0003FE40   //黑體24x24起始地址
#define heiti32   0x000CFA50   //黑體32x32起始地址
#define songti16   0x001CF350   //宋體16x16起始地址
#define songti24   0x0020F190   //宋體24x24起始地址
#define songti32   0x0029EDA0   //宋體32x32起始地址
#define kaiti16   0x0039E6A0   //楷體16x16起始地址
#define kaiti24   0x003DE4E0   //楷體24x24起始地址
#define kaiti32   0x0046E0F0   //楷體32x32起始地址
#define pic  0x0056D9F0     //范例圖片起始地址
#define bit_pic  0x00BE35F0   //范例單色位圖起始地址,數(shù)字0~9


void User_Def_Font_Initial(void);
void Font_Size_ChromaKey_ForeColor_BackColor(unsigned short Font_Size,unsigned char ChromaKey,unsigned char Foreground_color,unsigned char Background_color);
void Show_User_Def_String(char *str,unsigned int Font_Lib_Offset,unsigned short Font_Size,unsigned char Font_Gap,unsigned short x,unsigned short y);
void Show_User_Def_Font(unsigned short hanziIndex, unsigned int Font_Lib_Offset, unsigned short Font_Size, unsigned short x, unsigned short y);

void Bit_Picture_Initial(unsigned short Pic_Width, unsigned short Pic_Height, unsigned char ChromaKey,unsigned char Foreground_color,unsigned char Background_color);
void Show_Bit_Picture(unsigned int Pic_Offset, unsigned short Pic_Width, unsigned short Pic_Height, unsigned short x, unsigned short y);

#endif /*__RA8889_SHOW_USER_DEF_FONTLIB_BITPIC_H*/


 


看完了有沒有收獲?滿滿干貨全部奉獻,期待您的點贊、分享、留言!?。?/p>
第七講 THE END


分享到:

相關熱詞搜索:RA8889 RA8876 顯示文字

上一篇:第六講 單片機驅動彩色液晶屏:顯示文字:Part2.外接字庫
下一篇:第八講 單片機驅動彩色液晶屏 控制RA8889軟件:顯示圖片

>>延伸閱讀:0

  • · 如何解決MCU與RA8889等液晶控制芯片的SPI通信問題 [2020-03-04]
  • · RA8889配套上位機使用簡介 [2020-09-01]
  • · 介紹一顆51單片機就可以進行視頻解碼的芯片方案1366x768 [2020-09-07]
  • · RA88xx系列對顯存直接讀寫點的方法 [2020-09-10]
  • · NAND FLASH的調用 [2020-09-14]