日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字库芯片介绍与使用(附STM32程序~~~)

發布時間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字库芯片介绍与使用(附STM32程序~~~) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不知道大家是否了解字庫芯片(網上這方面的資料好像挺少的),今天給大家簡單介紹一下字庫芯片。

先舉個例子,如果我們想在點陣屏或液晶屏上面顯示一個88的正方形,我們該怎么做。
很簡單,假設屏上面“1”為點亮,“0”為熄滅,我們只需要按順序,將這64個點寫入“1”,其他地方寫入“0”就好了。

具體做法可以這樣,一個字節有8位,我們寫入一個0xFF,就可以一次點亮8個點,若點亮64個點,大家只需要換行再次寫入0xFF,循環幾次,累計寫好8個0xFF,就完成點亮一個88的正方形了。或者定義一個點陣數組,點陣數組里面是8個0xFF,將數組數據依次寫入屏中,是不是很簡單!

也可以稍微增加一下難度,如果想在8*8區域內,顯示一個直角邊長為8的等腰直角三角形怎么做?
聰明的你類比一下正方形,肯定一下子就想到了。
點亮第一行第一列的燈,
再點亮第二行第一列+第二列的燈,
再點亮第三行第一列+第二列的燈+第三列的燈。。。。。
用程序來描述,就是點陣數組中數據為0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF。

看來大家已經入門了,那如果要顯示一個中文或者英文字母等字符呢?

大家是不是犯難了,前面的正方形,三角形,我們都好計算,但是字符,我們是不是不太好計算在哪個位置點亮哪個點,怎么辦呢?
不要慌,字庫芯片作用就在這,它可以直接告訴你在哪個位置點亮哪個點。

在此之前,開發者通常是使用文字取模軟件進行取模,然后存儲在程序數組里,再拿去顯示,當只顯示一些特定的字符或文字時,這是一個不錯的方式,但是當需要顯示的字符比較多時,這種方法就不太適合了,這時候字庫芯片的作用就體現出來了。

字庫芯片廠家有提供對應的.lib靜態庫文件,這種靜態庫文件, 是由c源文件經過與開發者相似的環境進行編譯得到的,使用方式和c文件一致,把lib文件和對應的h頭文件添加到開發者的開發項目工程里即可,根據頭文件定義的函數接口,進行調用。

開發者只需要輸入所需文字的對應字符編碼(比如GB18030編碼),文字寬度,文字高度,文字粗細這幾個參數,就可以獲取該文字的點陣數組,再將點陣數組數據傳遞顯示函數中,就可以將文字顯示出來了,非常簡單。
字庫芯片原理圖可以參照下面設計

芯片采用SPI的通訊方式。
具體引腳功能為:

  • 串行數據輸出(SO):該引腳用來把數據從芯片串行輸出,數據在時鐘的下降沿移出。
  • 串行數據輸入(SI):該引腳用來把數據從串行輸入芯片,數據在時鐘的上升沿移入。
  • 串行時鐘輸入(SCLK):數據在時鐘上升沿移入,在下降沿移出。
  • 片選輸入(CS#):所有串行數據傳輸開始于CS#下降沿,CS#在傳輸期間必須保持為低電平,在兩條指令之間保持為高電平。
  • 總線掛起輸入(HOLD#):該信號用于片選信號有效期間暫停數據傳輸,在總線掛起期間,串行數據輸出信號處于高阻態,芯片不對串行數據輸入信號和串行時鐘信號進行響應。
    當HOLD#信號變為低并且串行時鐘信號(SCLK)處于低電平時,進入總線掛起狀態。
    當HOLD#信號變為高并時串行時鐘信號(SCLK)處于低電平時,結束總線掛起狀態。

字庫芯片的使用也比較方便,比如我想顯示中文“三明治開發社區”怎么辦?
總共7個中文,以“三”字為例。
我們只需要調用這個函數

unsigned int get_font(unsigned char *pBits,unsigned char sty,unsigned long fontCode,unsigned char width,unsigned char height, unsigned char thick);

這個就是文字讀取函數,參數如下

  • pBits 為上面提到的顯示數組指針,里面就是我們想獲取的顯示數據。
  • sty 為文字字體選擇,我們可以選擇宋體,仿宋,黑體,楷體,ASCII碼等多種字體,具體看對于字庫芯片手冊
  • fontCode 為字符編碼,中文支持GB18030 , ASCII/外文支持unicode
  • width 為文字寬度
  • height 為文字高度
  • thick 為文字粗細

以中文“三”為例,可以查詢到它的GB18030編碼為 0xC8FD。
那么代碼可以這樣

get_font(pBits,VEC_SONG_STY,0xC8FD,48,48,48);

即獲取到的顯示數組指針為pBits,字體選擇VEC_SONG_STY(宋體),字符編碼為0xC8FD(中文“三”),文字寬度為48,文字高度為48,文字粗細為 48。
我們再用同樣方法,獲取另外幾個字的數組,整體顯示效果如下

怎么樣,是不是很簡單,完全不需要我們計算什么,如有疑問可以下發評論留言
這里再給大家一些spi操作的程序

/*******************************************************************************/ // Send data sub-pro (STM8,STM32等雙向口) SPI發送地址的時序算法 / /*******************************************************************************/void Send_Byte(unsigned char out) { unsigned char i=0;for(i=0;i<8;i++){Rom_sckL; //字庫芯片時鐘置低if(((out<<i)&0x80)==0)MOSIL; elseMOSIH;Rom_sckH;} } /*******************************************************************************/ // Get data sub-pro (STM8,STM32等雙向口) SPI接收點陣數據的算法 / /*******************************************************************************/ unsigned char Get_Byte(void) {unsigned char i;unsigned char read_dat;Rom_sckH;for(i=0;i<8;i++){Rom_sckL;read_dat=read_dat<<1;if(MISO) read_dat|=0x01;elseread_dat&=0xfe;Rom_sckH;}return(read_dat); } /*******************************************************************************/ // Send address sub-pro (STM8,STM32,51) / /*******************************************************************************/ void SPI_Address(unsigned char AddH,unsigned char AddM,unsigned char AddL) {Send_Byte(AddH);Send_Byte(AddM);Send_Byte(AddL); } /*******************************************************************************/ // Get N bytes sub-pro (STM8,STM32,51) // /*******************************************************************************/ //從address地址讀取len個字節的數據并存入到DZ_Data數組當中 unsigned char r_dat_bat(unsigned long address,unsigned long DataLen,unsigned char *pBuff) {unsigned long i;unsigned char addrHigh;unsigned char addrMid;unsigned char addrLow;addrHigh=address>>16;addrMid=address>>8;addrLow=(unsigned char)address;Rom_csL; //片選選中字庫芯片Send_Byte(0x03); //普通讀取首先送0X03,然后發送地址高八位addrHigh,中八位addrMid,低八位addrLow。SPI_Address(addrHigh,addrMid,addrLow); for(i=0;i<DataLen;i++)*(pBuff+i)=Get_Byte();Rom_csH;return 0; } //從address地址讀取一個字節的數據并返回該數據 unsigned char r_dat(uint32_t address){unsigned char buff;unsigned char addrHigh;unsigned char addrMid;unsigned char addrLow;addrHigh=address>>16;addrMid=address>>8;addrLow=(unsigned char)address;Rom_csL;Send_Byte(0x03);SPI_Address(addrHigh,addrMid,addrLow);buff = Get_Byte();Rom_csH;return buff; }

總結

以上是生活随笔為你收集整理的字库芯片介绍与使用(附STM32程序~~~)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。