南京曉莊學院電子信息工程學院 蘇海洋 謝 軍 徐凱琳
基于51單片機外置存儲器字庫系統的設計
南京曉莊學院電子信息工程學院 蘇海洋 謝 軍 徐凱琳
以STC15單片機為核心、W25Q64為存儲芯片的字庫系統。在電腦上制作任意字體的字庫文件放入SD卡,通過單片機讀取SD卡中數據,存入至存儲芯片W25Q64中。單片機可調用存儲芯片中的字模,實現在液晶顯示屏顯示任意GBK字符。該系統可以減輕單片機Flash的占用,以及減少單片機編程頻繁取摸的麻煩。
字庫;單片機;W25Q64;存儲器;LCD顯示
目前,單片機芯片性能飛速發展。但某些單片機芯片受制于價格的原因,內部Flash存儲器容量并未有大的飛躍。而中文常用字庫有6000之多,加之繁體及不常用字庫有上萬個。而在做漢字顯示時,就無法將所有字模放入單片機中。通常的做法是,采用帶有字庫芯片的顯示屏。或者放棄部分不需要使用的字的字模,只取需要顯示的字模放入單片機內部。這兩種方法均可以實現漢字顯示,但第一種方法缺乏個性化,無法通過單片機靈活操作顯示屏顯示點、圓、線等特殊圖案。第二種方法雖說可以實現靈活顯示漢字和特殊圖案,但取模工作量大,且無法實現所有漢字的顯示。因此,設計一款外置存儲字庫的芯片將完全解決上述的問題。
1.1 系統組成
系統組成框圖如圖1所示:

圖1 系統組成框圖
1.2 系統工作原理
本系統使用STC15W4K58單片機作為微處理器。根據液晶顯示方式,使用取模軟件獲取GBK字符集的所有漢字的字模,并通過軟件將取模文件生成二進制文件(.bin文件)。使用單片機讀取SD卡中的bin文件,并將bin文件中的所有數據依次存放至W25Q64存儲芯片中。當需要顯示某個漢字時,直接使用函數調用顯示函數。顯示函數會根據函數實參傳遞過來的漢字內碼到W25Q64地址內尋找該字的字模。從而實現漢字顯示的直接函數調用,方便編程。
2.1 主控電路設計
系統使用51內核的單片機。該單片機為初學者常使用單片機。使用該單片機可以更好的體現字庫的重要性。同時更加容易融合在日后的設計當中。該單片機擁有高達36MHz的內部時鐘電路,支持單時鐘周期,速度比傳統8051快8~12倍。并且支持2.4V~5.5V寬電壓。并支持四個完全獨立的高速異步串行通訊端口等。對于本設計性能完全滿足要求。
STC15單片機如圖2所示:

圖2 STC15單片機電路原理圖
2.2 SD模塊的設計
該電路采用SD卡座,并將所有引腳引出至單片機IO口。使用10k電阻對信號進行上拉,提高信號的可靠性能。并且為了SD卡更穩定的工作,該模塊采用獨立供電,將電源模塊供的5V電源使用ASM1117-3.3芯片進行二次穩壓。以此確保SD卡供電的穩定。

圖3 字庫存儲模塊電路原理圖
2.3 字庫存儲模塊
W25Q64是一個64M-bit的串行Flash存儲器。該芯片采用STO-8封裝,相比一般存儲器占用PCB面積更小,使用更加靈活。該芯片支持的工作電壓2.7V~3.6V,工作電流小于5mA,睡眠電流1uA。可見功耗非常低。

圖4 字庫存儲模塊電路原理圖
系統采用DC5V供電,但存儲芯片的工作電壓最高為3.6V。因此,在字庫存儲模塊中,仍然采用ASM1117-3.3V芯片作為二級穩壓,在芯片電源兩端并入0.1uF瓷片電容,濾出電源高頻信號,并起到去耦電容的效果。對W25Q64信號控制引腳使用10k電阻進行上拉(圖中R1~R5),以此保障W25Q64的穩定工作。
2.4 LCD顯示模塊
該系統使用市場上最常見的帶字庫LCD液晶顯示屏128*64,但在程序中屏蔽了LCD液晶顯示屏本身自帶的字庫,使用LCD液晶顯示屏的畫圖功能來實現顯示漢字。該方法和使用無字庫LCD液晶顯示屏效果一樣。
/**子函數形參說明
-----Row 漢字需要顯示的開始行
-----col 漢字需要顯示的開始行
----*pstr 需要顯示的的內容
**/
void word_disp(uchar row,col,char *pstr,)
{ uchar i=0,j,index = 0,k;
for(;*pstr;pstr+=2,col+=16){
for(k=0;k<100;k++)
if(*(int*)pstr==hzindex[k]) break;
index=0;
for (j = 0; j <16; j++) {
wr_i_lcd(0x34);
if(row==0){
wr_i_lcd(0x80+j);
wr_i_lcd(0x80+col+i);}
else if(row==1){
wr_i_lcd(0x90+j);
wr_i_lcd(0x80+col+i);}
else if(row==2) {
wr_i_lcd(0x80+j);
wr_i_lcd(0x88+col+i);}
else {
wr_i_lcd(0x90+j);
wr_i_lcd(0x98+col+i);}
wr_i_lcd(0x30);
wr_d_lcd(word[k*32+index++]);
wr_d_lcd(word[k*32+index++]);}
i++;}
i=0;
wr_i_lcd(0x36); //打開繪圖顯示
}
程序2.4 LCD顯示子函數
將以上電路模塊連接起來后,通過編寫程序控制各個模塊運作。實現以下功能。
開機自動將SD卡中的字庫下載至W25Q64;
(2)可通過LCD顯示存儲器內部的漢字;
可通過程序調用任意漢字,無需再次取摸;
)斷電后,重新上電.W25Q64字庫信息仍然存在。
3.1 主程序流程圖
主程序流程圖如圖5所示:

圖5 系統主程序流程圖
3.2 主要程序說明
程序一:讀取SD卡中字模信息并寫入W25Q64內。
W25X_ChipErase();//格式化W25Q64
clear_screen(); //清除液晶屏
do
{
SD_Read_Sector(520+j,date);//讀取SD卡第520扇區 一次讀512個數據
SPI_Flash_Write_NoCheck(date,512*j,512);//將讀到的數據寫入W25Q64內,從0x000000地址開始寫 每一次加512
delaynms(100);//延時100ms給器件反應時間,以免出錯。
}while(date[511]!=0xff); //判斷讀到的數據是否為“空”,為“空”停止操作,否則繼續循環。
clear_screen(); //清除液晶屏
程序3-2-1 寫入字模
程序二:字模的調用
void display_GBK(uchar *deat,uchar *dz_data)
{
uchar dat_H,dat_L,i,j;
unsigned long offset;
for(i=0;i<16;i++)
{
dat_H =*(deat+i*2);
dat_L =*(deat+i*2+1);
if(dat_H>0XFE||dat_H<0X81)return;dat_H -=0x81;
dat_L -=0x40;
offset=((unsigned long)192* dat_H+GBKL)*32;
SPI_Flash_Read(dz_data+32*i,offset,32);
}
return;
}
程序3-2-1 字模的調用
程序三:顯示漢字程序
display_GBK(”這是范例程序”,word); //獲取“這是范例程序”的字模,并放入word數組內
HZ_display(0,0,word);//將word數組的數據放入到顯示程序內通過以上程序,可以顯示任意漢字。因為每個漢字有一個內碼,所以在寫入程序實參時只需要將漢字加引號即可轉化成漢字的編碼。然后根據漢字的編碼至存儲器里尋找對應的字模。
通過一段時間的設計和研究,完成了以51內核單片機為核心的漢字字庫制作。實現了將GBK字符集兩萬多個漢字的字模放入存儲器中,并且通過單片機的讀取,可以實現對任意漢字的顯示工作。該系統可以采用模塊化設計。可以很好地與各類系統結合,大大減少日后對類似功能的開發。目前系統僅僅實驗了一種字體,在接下來的時間里,將繼續對該系統進行優化,從而實現多種字體的任意調用,這樣液晶的顯示就會更加個性化。
[1]譚浩強.C程序設計(第三版)[M].清華大學出版社,2005,07.
[2]楊西明.單片機編程與應用入門[M].機械工業出版社,2005.
[3]丁鎮生.傳感器及傳感技術應用[M].北京:電子工業出版社,1998:59-72.
[4]劉永強.8098單片機和控制的帶字庫漢字顯示系統[J].電子技術用,1996(01).
[5]徐卓農,張永忠.單片機系統中的漢字顯示[J].單片機與嵌入式系統用,2001(07).
[6]王海欣,黃海宏.液晶顯示器的漢字顯示方法[J].液晶與顯示,2005(02).
Based on 51 single chip microcomputer external memory word stock system design
Su Haiyang1,Xie Jun1,Xu Kailin1
(1.NanJing Xiao Zhuang University,Nanjing 211100,China)
STC15 single-chip microcomputer as the core,W25Q64 word stock system for memory chips.Make any font fle on the computer in the SD card,through the microcontroller reads the data in SD card,deposit to the memory chip W25Q64.MCU can call type of memory chips,implementation in the LCD screen display any GBK character.The system can reduce microcontroller Flash,and reduce the microcontroller programming frequently take a touch of trouble.
LCD Display;MCU;W25Q64;Word Stock
蘇海洋(1995—),男,大學本科,主要研究方向:電路與系統。
謝軍(1978—),男,碩士研究生,講師,主要研究方向:電路與系統。
徐凱琳(1994—),女,大學本科,主要研究方向:電路與系統。