娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月31日(星期六)

2019年05月31日 | STM32自帶GB2312字庫顯示漢字

發布者:HeavenlyLove 來源: eefocus關鍵字:STM32  GB2312字庫  顯示漢字 手機看文章 掃描二維碼
隨時隨地手機看文章

??本文介紹如何把字庫文件寫入單片機的flash中,然后無需再提取字模,即可實現單片機顯示中文字符的功能。


下載字庫到單片機flash中的指定位置

??在上一篇博客中,最后留了一個想法,讓單片機自帶字庫?,F在就來實現這個想法。

我把用到的編譯過的字符放在這里

??我們借助J-Flash軟件把bin文件放在單片機flash中的指定位置。

??首先要新建工程,然后根據自己的板子選擇型號

在這里插入圖片描述
在這里插入圖片描述

??然后打開數據文件,找到剛剛下載的bin文件


在這里插入圖片描述
在這里插入圖片描述

??根據自己單片機的flash大小輸入地址,注意這個地址要與代碼中的“基地址”一致

在這里插入圖片描述

??設置好以后按下快捷鍵F7

在這里插入圖片描述

在這里插入圖片描述

??成功燒錄以后,代碼不可以在使用此區域。——一般情況下,你的工程代碼也不會大到可以覆蓋這個區域。


編寫字庫顯示函數

??函數編寫過程就不講述了,原理都在代碼里。有需要的可以自行研究。有一些沒有提到的函數,可以參考上一篇博客。

??這是顯示字符串的函數


/**

  * @brief 輸出12*12的漢字或6*12的字符,函數可以自動識別是中文字符還是ASCII

  * @param 第一個字符的坐標,漢字顏色,背景顏色,需要顯示的字符串。背景顏色為0表示不畫背景

  * @Note  漢字字模來自于字庫,字庫是編譯好的bin文件,在_DEF_FONT_CH字庫的基地址中

  * @retval None

  */

void LCD_DrawFont_GBK12(u16 x, u16 y, u16 fc, u16 bc, char *pStr)

{

unsigned char xNow,temp_width;

const u8 *FontModel;

char ch[2];

xNow = x;

while(*pStr)

{

ch[0] = *pStr;

pStr++;

ch[1] = *pStr;

if(ch[0] == 10)

{

x = xNow;

y += 12;

}

else if(ch[0] < 128)

{

temp_width = Get_Model(ch,&FontModel);

if(x < 128)

DrawFontModel(x,y,temp_width,FontModel,fc,bc);

x += temp_width;//下一個字符的橫坐標

}

else if((ch[0] > 160) && (ch[1] > 160)) //中文

{

ch[1] = *pStr;

temp_width = Get_Model(ch,&FontModel);

if(x < 128)

DrawFontModel(x,y,temp_width,FontModel,fc,bc);

x += temp_width;//下一個字符的橫坐標

pStr++;

}

}

}


??這個函數用于顯示單個字符


/**

  * @brief 根據傳入的參數顯示一個字符,可以自動識別是中文還是英文

  * @param 第一個字符的坐標,字符的寬度(中文12英文6),顏色,背景顏色,需要顯示的字符串。背景顏色為0表示不畫背景

  * @Note  漢字字模來自于字庫,字庫是編譯好的bin文件,在_DEF_FONT_CH字庫的基地址中

  *         返回值并不是字庫的地址,字庫地址是通過指針傳遞的,也就是說,參數FontModel本身也是返回值

  * @retval None

  */

static void DrawFontModel(u8 xNow,u8 yNow,u8 width,const u8 *FontModel,u16 fc, u16 bc )

{

u8 bit = 0;

u8 m = 0xff;

if(FontModel)//字母為空處理

m = *FontModel;

for (u8 y = yNow; y < yNow + 12; y++)//豎著顯示,先判斷y坐標。

{

for(u8 x = xNow; x < xNow + width; x++)//再判斷橫坐標

{

if(x < 128)

{

if((m&0x01) == 0x01)

{

LCD_DrawPoint(x,y,fc);

}

else

{

if ((bc!=0)&&(fc!=bc)) LCD_DrawPoint(x,y,bc);

}

}

bit++;

m >>= 1;//字符循環右移

if(bit == 8)//一個字節顯示完畢,則顯示下一個字節

{

bit = 0;

if(FontModel)//空字模處理

{

FontModel ++;

          m = *FontModel;

}

else

{

m = 0xff;

}

}

}

}

}


??這是根據字符的標號,從flash中找到對應字符數組的 函數


/**

  * @brief 獲取字模數組的 地址

  * @param 第一個字符的坐標,字符的寬度(中文12英文6),顏色,背景顏色,需要顯示的字符串。背景顏色為0表示不畫背景

  * @Note  漢字字模來自于字庫,字庫是編譯好的bin文件,在_DEF_FONT_CH字庫的基地址中

  * @retval 字模的寬度

  */

static char Get_Model(const char *ch,const u8 **FontModel)

{

if((ch[0] > 0xA0) && (ch[1] > 0xA0))//中文

{

*FontModel = _DEF_FONT_CH + 18 * ((ch[0] - 161) * 94 + ch[1] - 161);//獲取此字模的地址

return 12;

}

if(*ch >= 0x20)//英文

{

*FontModel = _DEF_FONT_EN + 9 * (ch[0] - 0x20);

return 6;

}

*FontModel = _DEF_FONT_EN;//無法匹配,顯示空白

return 0;

}


??GB2312的字符計算是怎么算的?GB2312的編號可以幫助我們找到字符,簡單來說,就是GB2312規定對收錄的每個字符采用兩個字節表示,第一個字節為“高字節”,對應94個區;第二個字節為“低字節”,對應94個位。所以它的區位碼范圍是:0101-9494。區號和位號分別加上0xA0就是GB2312編碼。例如最后一個碼位是9494,區號和位號分別轉換成十六進制是5E5E,0x5E+0xA0=0xFE,所以該碼位的GB2312編碼是FEFE。

??這也就是為什么我們的代碼中要乘以94了。

??關于GB2312的詳細資料可以參考這篇博客

??在主函數中我調用了顯示函數:


ST7735S_CPT144_Initial();

LCD_BG_Color(GREEN);


LCD_DrawFont_GBK12(0,0,BLACK,GREEN,"來自geekYatao的博客");

LCD_DrawFont_GBK12(0,12,BLACK,GREEN,"ABCabc123,.?《》");

LCD_DrawFont_GBK12(0,24,BLACK,GREEN,"犇鱻羴顯示不出來");


??另外我還定義了漢字字符的基地址,與英文字符的數組


extern const u8 _FontLibEn612[];

#define _DEF_FONT_CH     (const u8*)(0x080DC000)  //字庫的基地址

#define _DEF_FONT_EN            _FontLibEn612


extern const u8 _FontLibEn612[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 0x20  

                        0x0,0x40,0x10,0x4,0x41,0x10,0x0,0x1,0x0, // 0x21 !

                        0x0,0xA5,0x28,0x0,0x0,0x0,0x0,0x0,0x0, // 0x22 "

                        0x0,0x40,0x51,0x3F,0xA5,0xFC,0x8A,0x2,0x0, // 0x23 #

                        0x0,0xE1,0x55,0x85,0xC1,0x50,0xD5,0x43,0x0, // 0x24 $

                        0x0,0x20,0x55,0x8D,0x42,0xB1,0xAA,0x4,0x0, // 0x25 %

                        0x0,0x40,0x28,0x8A,0x57,0x55,0x89,0xD,0x0, // 0x26 &

                        0x80,0x20,0x4,0x0,0x0,0x0,0x0,0x0,0x0, // 0x27 '

                        0x0,0x8,0x21,0x8,0x82,0x20,0x8,0x4,0x2, // 0x28 (

                        0x80,0x40,0x20,0x8,0x82,0x20,0x8,0x21,0x0, // 0x29 )

                        0x0,0x0,0x10,0x95,0xE3,0x54,0x4,0x0,0x0, // 0x2A *

                        0x0,0x40,0x10,0xC4,0x47,0x10,0x4,0x0,0x0, // 0x2B +

                        0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x20,0x4, // 0x2C ,

                        0x0,0x0,0x0,0xC0,0x7,0x0,0x0,0x0,0x0, // 0x2D -

                        0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0, // 0x2E .

                        0x0,0x84,0x20,0x8,0x41,0x8,0x82,0x10,0x0, // 0x2F /

                        0x0,0xE0,0x44,0x51,0x14,0x45,0x91,0x3,0x0, // 0x30 0

                        0x0,0x40,0x18,0x4,0x41,0x10,0x84,0x3,0x0, // 0x31 1

                        0x0,0xE0,0x44,0x11,0x42,0x8,0xC1,0x7,0x0, // 0x32 2

                        0x0,0xE0,0x44,0x10,0x3,0x41,0x91,0x3,0x0, // 0x33 3

                        0x0,0x80,0x30,0x8A,0x92,0x78,0x8,0x6,0x0, // 0x34 4

                        0x0,0xF0,0x5,0xC1,0x3,0x41,0x91,0x3,0x0, // 0x35 5

                        0x0,0xE0,0x24,0xC1,0x13,0x45,0x91,0x3,0x0, // 0x36 6

                        0x0,0xF0,0x25,0x8,0x41,0x10,0x4,0x1,0x0, // 0x37 7

                        0x0,0xE0,0x44,0x91,0x13,0x45,0x91,0x3,0x0, // 0x38 8

                        0x0,0xE0,0x44,0x51,0xE4,0x41,0x92,0x3,0x0, // 0x39 9

                        0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0, // 0x3A :

                        0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x41,0x0, // 0x3B ;

                        0x0,0x8,0x21,0x84,0x40,0x20,0x10,0x8,0x0, // 0x3C <

                        0x0,0x0,0x0,0x1F,0x0,0x7C,0x0,0x0,0x0, // 0x3D =

                        0x80,0x40,0x20,0x10,0x8,0x21,0x84,0x0,0x0, // 0x3E >

                        0x0,0xE0,0x44,0x11,0x42,0x10,0x0,0x1,0x0, // 0x3F ?

                        0x0,0xE0,0x44,0x59,0x55,0x75,0x81,0x7,0x0, // 0x40 @

                        0x0,0x40,0x10,0x8C,0xA2,0x78,0xD2,0xC,0x0, // 0x41 A

                        0x0,0xF0,0x48,0x92,0x23,0x49,0xD2,0x3,0x0, // 0x42 B

                        0x0,0xE0,0x45,0x41,0x10,0x4,0x91,0x3,0x0, // 0x43 C

                        0x0,0xF0,0x48,0x92,0x24,0x49,0xD2,0x3,0x0, // 0x44 D

                        0x0,0xF0,0x49,0x8A,0xA3,0x8,0xD2,0x7,0x0, // 0x45 E

                        0x0,0xF0,0x49,0x8A,0xA3,0x8,0xC2,0x1,0x0, // 0x46 F

                        0x0,0xC0,0x49,0x41,0x90,0x47,0x12,0x3,0x0, // 0x47 G

                        0x0,0x30,0x4B,0x92,0x27,0x49,0xD2,0xC,0x0, // 0x48 H

                        0x0,0xF0,0x11,0x4,0x41,0x10,0xC4,0x7,0x0, // 0x49 I

                        0x0,0xE0,0x23,0x8,0x82,0x20,0x48,0x72,0x0, // 0x4A J

                        0x0,0x70,0x4B,0x8A,0xA1,0x28,0xD2,0xD,0x0, // 0x4B K

                        0x0,0x70,0x8,0x82,0x20,0x8,0xE2,0xF,0x0, // 0x4C L

                        0x0,0xB0,0x6D,0xDB,0x56,0x55,0x55,0x5,0x0, // 0x4D M

                        0x0,0xB0,0x4B,0x96,0xA5,0x69,0xD2,0x5,0x0, // 0x4E N

                        0x0,0xE0,0x44,0x51,0x14,0x45,0x91,0x3,0x0, // 0x4F O

                        0x0,0xF0,0x48,0x92,0x23,0x8,0xC2,0x1,0x0, // 0x50 P

[1] [2]
關鍵字:STM32  GB2312字庫  顯示漢字 引用地址:STM32自帶GB2312字庫顯示漢字

上一篇:STM32HAL庫定時器中斷關閉的方法
下一篇:STM32HAL庫使用SPI驅動1.44寸TFTLCD

推薦閱讀

  小米即將于 5 月 31 日在深圳召開發布會,可能將發布包括硬件、系統和芯片在內的一系列新品。下面就隨手機便攜小編一起來了解一下相關內容吧。  雷軍近日在微博上確認稱,小米將在發布會上發布小米?8、小米手環 3、MIUI 10,另外還將有其他新品。臨近發布會,我們來盤點一下可能會在小米 8 發布會上亮相的新品?! ⌒掠布 ⌒∶?8  ...
綜合外電報導,據消息人士表示,賽普拉斯半導體傳出現潛在買家,報導指出,該公司已經找來顧問合作,但目前尚未做出最終決定,賽普拉斯仍有可能選擇維持獨立經營。公司將出售的消息一出,賽普拉斯股價應聲大漲,周三一度跳漲至14.6 %。據根據彭博社編制的數據,分析師平均預測,今年賽普拉斯銷售增長預計收縮約11%,如今賽普拉斯半導體在接受到收購意向...
協作機器人夾爪制造商OnRobot推出2.5D視覺系統Eyes,適用于各家先進機器手臂,提供外加的深度感知和零件辨識功能。 據報導,機器手臂經常遇到的難題,就是無法拾放大小、形狀或擺放方向不一的物品,通常需要外加夾具、送料盤等其它硬件協助作業,但也因此增加作業成本和復雜度,局限了設備的應用范圍。 OnRobot新推出的2.5D視覺系統Eyes,只要照一張...
今日,數碼博主 @手機晶片達人爆料稱,雖然榮耀已獨立出來,但其實到現在為止還沒拿到谷歌的Android授權,海外市場將受到影響,因此有意調降今年的銷量。針對上述傳聞,榮耀方面回應稱,榮耀沒有安卓授權是假消息。據了解,Android開源項目(AOSP)是Android硬件和軟件開發者的完整解決方案,目前國內廠商手機大都采用深度定制的 AOSP ROM,而經過谷歌...

史海拾趣

問答坊 | AI 解惑

《電信法》與電信網互聯互通

《電信法》與電信網互聯互通 2006-7-17     電信業打破壟斷、引入競爭以來,互聯互通問題備受關注,眾多國家將其視為規范規制、建設一個公平競爭電信市場的切入點。能否與主導電信運營商之間進行有效的互聯互通不僅關系到新興運營 ...…

查看全部問答∨

漏電保護開關的正確選用與運行維護

漏電保護開關的正確選用與運行維護 http://www.iacmall.com/news-4-2622.html 或下載附件…

查看全部問答∨

為什么藍牙模塊對HCI命令沒反應啊?

我最近在做一塊ARM板上的藍牙底層初始化驅動,環境如下 板子:ARM11板 Linux內核版本:2.6.18 藍牙模塊:采用CSR的Bluecore5核心,和CPU通過UART相連 藍牙驅動:1.自己根據藍牙的datasheet在系統啟動時給藍牙模塊發送了一條Reset信號,并初始化 ...…

查看全部問答∨

求購或訂做windows CE下智能輸入法

求購windows CE下智能輸入法,最好是T9輸入法,至少含拼音和筆畫,windows CE操作系統,鍵盤4X5。有意聯系xiao615@126.com.…

查看全部問答∨

卡車也要有能“耐”我來曬曬中國勒芒輕卡耐力賽PP

早晨起來,一看上海天馬上賽車場已經裝扮一新,賽道內有專門的維修通道,與正式的F1比賽管理別無二致,已悄然感受到大戰的氣息。在賽事現場,熱辣的美女、轟鳴的馬達、絢麗的奧鈴CTX賽車、激情吶喊的觀眾,這就是2010(第二屆)福田奧鈴CTX中國勒芒 ...…

查看全部問答∨

【MSP430共享】最全電子書收集

請大家更貼完善 [ 本帖最后由 fengzhang2002 于 2011-9-7 12:13 編輯 ]…

查看全部問答∨

定時中斷 ad采樣問題

寫了一個定時中斷函數,將AD采樣寫在定時中斷中,結果不能得到正確的AD值,定時時間為0.1ms, 采用dsp2806,系統時鐘為50MHz,外部引腳ADCIN已經連接到1.6V直流電壓,為什么我的AD值卻總是零呢? 請高手幫幫忙??! void ADC_Init(void)  {&nb ...…

查看全部問答∨

AM335x ADC Driver's Guide ADC驅動中文手冊改1

AM335x ADC Driver\'s Guide ADC驅動中文手冊改1…

查看全部問答∨

28335的AD采樣?

在做AD采樣時,初始化AD時,如果沒有這段代碼,發現采樣結果不對,加上后,檢測結果正常:         AdcRegs.ADCTRL1.bit.RESET=1; //復位整個ADC模塊         DSP28x_usDelay(1);      ...…

查看全部問答∨

通過手機App給SensorTag OAD升級固件

不知道有多少朋友已經拿到SensorTag了? 今天來說一下SensorTag的OAD(Over the Air Download) 無線下載升級固件功能 大家都知道 單片機開發測試一般需要用JTAG下載器燒寫固件,但如果是開發產品都會面臨一個比較頭疼的問題,如果產品已經投放市場 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广水市| 恩施市| 本溪市| 龙川县| 萝北县| 兴海县| 绵阳市| 孟津县| 靖边县| 大庆市| 调兵山市| 天水市| 成武县| 天峻县| 东光县| 松溪县| 兰考县| 潍坊市| 雅安市| 临夏市| 海晏县| 武冈市| 通山县| 正宁县| 航空| 福鼎市| 堆龙德庆县| 额尔古纳市| 西乌| 毕节市| 大关县| 河池市| 县级市| 临邑县| 广丰县| 新田县| 白朗县| 无锡市| 彭阳县| 甘孜县| 安阳市|