導航:首頁 > 操作系統 > 單片機讀漢字

單片機讀漢字

發布時間:2022-08-23 07:47:09

單片機顯示漢字

編碼說白了就是索引,就是通過一定的計算公式能找到字元所在數據塊所在的地址,比如12X12的漢字就佔用18BYTE。

編碼有這幾種GB2313,GBK,Unicode等,相同的字的數據是一樣的,唯獨就是在標准字型檔的的地址不一樣。

字型檔里的數據有橫向縱向,高位在前低位在前等等不同方式。

㈡ 單片機如何顯示漢字論文

LED顯示屏控制系統的系統分析
根據LED顯示屏控制系統的應用,本章設計了LED圖文顯示屏的體系結構和工作流程。其中軟體系統與無線傳輸控制硬體主系統之間採用串列通訊方式完成程序下載,實現文本信息的傳輸。

2.1 整體分析
LED顯示屏系統組成
LED圖文顯示屏系統由軟體控制系統、無線傳輸系統、設備主控制器、LED顯示點陣、電源等部分組成。基本結構如下圖:
圖4-1 LED顯示屏總體框架
系統工作過程:
軟體控制系統主要完成的任務為圖文編輯、字模提取與保存、圖像預覽與文件傳輸;無線傳輸系統主要完成文件信息由PC機傳輸至LED顯示器,硬體控制系統中LED點陣主要任務是通過電流控制完成信息顯示,通過單片機的掃描驅動方式的控制對LED點陣行列驅動,實現設備的驅動並最終實現接收的圖文顯示功能。

2.2 計算機軟體模塊分析與設計
軟體模塊分為編輯部分和控制通訊部分,編輯部分實現圖文文件的編輯功能,通訊部分通過RS-232C串口通訊完成文件到單片機存儲模塊的傳輸。通訊部分將在第三章做詳細的介紹。
系統設計採用Windows操作系統下,開啟文本編輯窗口,客戶區內像素點採用與實際LED點陣顯示屏像素點相同,功能類似Word文檔編輯工具,包括編輯模塊、繪圖模塊、文字編輯模塊、顏色控制模塊、顯示效果載入模塊、預覽模塊、信息下載模塊。
1、編輯模塊
1)除Windows自生成的剪貼、復制、粘貼功能,系統加入了撤消、重復功能。
(1)選中撤消功能可以實現之前編輯工作的一步步取消功能。
(2)選中重復功能可以實現之前編輯工作的最近的一條操作命令
2)繪圖:包括直線、矩形、橢圓、圓等在內的圖形繪制功能。
3)文字編輯:包括各種字體、字形、字型大小、效果、顏色的文字的編輯,並且根據應用的特殊用途,加入指定位置文字的編輯。
(1)選中文字功能,彈出字體選擇框體,可以選擇各種字體的文字進行編輯
(2)調出具體文字位置編輯對話框,輸入文字和要求顯示位置的橫坐標和縱坐標。
4)顏色控制模塊:由於應用領域的具體特點,主要採用了紅、綠、黃三種顏色,可以實現顏色控制。
2、增添效果模塊:通過增添顯示效果和傳輸通訊中多屏文件單屏傳送,完善了控制系統的功能。
1)普通效果,靜態的顯示屏幕上的信息
2)滾動效果,可以實現從左向右的信息滾動顯示,可以與靜態信息穿插顯示。
3)單屏信息傳輸,實現編輯待傳輸信息的保存。
4)多屏信息傳輸,實現編輯保存好的單屏信息合並保存成一個文件,大大減少傳輸文件時的煩瑣。
3、圖像預覽模塊:在文件傳輸之前實現字模信息的預覽功能,可以實現預覽傳輸前所保存的任何形式的字模信息,並且直接集成到工具欄文件打開功能鍵按鈕。
1)顯示效果,通過文件傳輸前的預覽,可以調整靜態與滾動顯示效果的排列順序。
2)顯示時間,顯示不同屏幕顯示信息之間的時間間隔。
軟體模塊結構圖如下:

圖3-2軟體模塊結構圖
軟體控制系統的設計與實現
在LED顯示屏的軟體控制系統中,文本信息的編輯、字模信息的保存、顯示效果的處理、圖像預覽以及設備通訊是設計的核心上作。下面就這四個核心功能做詳細的研究與設計。

4.1 編輯功能設計與實現
在LED顯示屏上展現所要顯示的內容以及效果,編輯工作是最重要的環節之一。本系統在設計時採用VC 6. 0開發工具,用VC++完成整個設計工作。
基於MFC AppWizard建立工程,以單文檔View的形式開啟文本區。下面對工程進行分析和設計:
1、文本區的開啟:
由於所應用的LED顯示屏的像素點數量已定,而計算機屏幕的解析度顯然遠遠高於顯示屏,這樣造成邏輯坐標的不同,即而顯示的圖像會有扭曲、拉長甚至失真情況。所以可以通過選擇開啟窗口的計算機屏幕像素點與顯示屏像素數之間恰當的比例來減小誤差。
現在用來解決此問題的方法很多。例如點陣數據的壓縮方法,由於在Windows環境下,系統默認的每個漢字為4000多點,而16×16點陣一個字的大屏幕,每個漢字為256點,所以根據計算,可以採用間隔取點的方式,在橫向和縱向每隔12個點取一個點,每個漢字256個點組成的原理來壓縮數據。
但為了圖像不失真,本系統採用所開啟文本區與顯示屏像素數完全相同的方式,從而避免了圓變橢圓,正方形變矩形,甚至連劃斜線時的斜率也不會變。
CMainFrame::PreCreateWindow函數用來設置整個窗口的大小,但是窗口外框還包括菜單,工具欄,狀態欄與客戶區。而系統定義的文本區要求精確的client area,用於字模信息保存。所以表示客戶區大小的縱坐標要加上狀態欄與工具欄的高度,甚至菜單與窗口外框的邊緣也要扣除[1]。
SetClientSize() //設置客戶區大小的函數
{CRect rect;
CSize winSize;
int cx, cy = 0;
CControlBar* pBar;
pBar = GetControlBar(AFX_IDW_STATUS_BAR);

if((pBar ! =NULL) && (pBar -> IsWindowVisible())){
pBar ->GetWindowRect (rect);
winSize = rect. Size ();
cy+=(winSize. cy);}
pBar=GetControlBar(AFX_IDW_ TOOLBAR);
if((pBar!=NULL)&&(pBar ->IsWindowVisible())){
pBar -> GetWindowRect(rect);
winSize = rect.Size ();
cy+=(winSize. Cy*2);}
cx = 384+(384-m_clientSize. cx);
cy += (192+(192-m_clientSize. cy));
GetWindowRect(rect);
SetWindowPos(this,rect. left,rect.top, cx, cy, SWP_ NOZORDER);}
OnViewStatusBar(){
CFrameWnd::OnBarCheck(ID_VIEW_STATUS_BAR);
SetClientSize();}
通過對客戶區的精確控制,可以真正的使文本區的像素點數與顯示屏的平面發光點數對應,而且為了編輯操作過程中不至於因為失誤造成文本區內的象素改變,所以系統限制了窗體最大化控制[3] [9]。
cs. style& = ~WS_MAXIMIZEBOX; //取消最大化使窗體大小固定。
2、編輯功能設計:
在控制系統中,把文字與圖形的輸入通通想像成是圖像的編輯,這樣就像在畫板上一樣,隨心所欲的完成編輯工作。
MFC的繪圖都是通過Device Context(它是設備與數據之間的媒介,可以縮寫為DC)來將繪圖輸出到一個設備上。DC中存儲設備的屬性與輸出繪圖的數據。在MFC中要輸出繪圖數據至一個設備上,必須准備一個針對此設備的DC對象,它是繼承於CDC的類的對象。這個DC對象可以使用CDC類的一些繪圖函數(如畫線、圓、方形等)。每個DC必須附著一些所謂的GDI object (GD工對象,如常見的畫筆、畫刷、字形、點陣圖等畫圖上具)以配合DC的繪圖函數。
系統通過編寫Line()函數畫直線、Rectangle()函數畫矩形、Ellipse ()函數畫橢圓、Circle ()函數完成圖形的編輯[2] [3]。
需要指出的是將newPen析構:調用newPen. DeleteObject)方法。GDI對象的析構很重要,特別是自己創建的對象,一定要在適當的時機(GDI對象已經不在附著在DC時)去掉。解除附著的方法只有以SelectObject函數選擇別的新的對象(舊的對象會自動被消除)。可以選擇MFC預存的對象來解除對象的依附關系,因為MFC預存的對象會在不用的時候自動析構。DeleteObject是CGdiObject類公開的成員函數,所以它的子類都可以使用。
文字的輸入:通過CFontDialog類生成一個選擇字體類型(font)的對話框。
CDC* pDC=GetDC();
LOGFONT m _lFont;
COLORREF m_cTextColor;
CFont myFont;
CFont* pOldFont;
CFontDialog FontDlg;
FontDlg. m_cf. lpLogFont=&m_lFont;
FontDlg.m_cf.rgbColors=m_cTextColor;
FontDlg. m_cf. Flags!=CF_INITTOLOGFONTSTRUCT;

if ( FontDlg. DoModal() = =IDOK)
{
FontDlg.GetCurrentFont(&m_1Font);
m_cTextColor = FontDlg.GetColor();
}
調用系統自帶的輸入法,包括文字的字體、字形、顏色、效果等。
系統載入TextDialog對話框,以文本編輯區左上頂點為坐標原點,向右為X軸正方向,向下為Y軸正方向建立邏輯坐標系,實現文字指定位置的編輯:
CString str;
CTextDlg TextDlg;
//CRect rect (TextDlg. m_ctrEdit. GetClientRect());

if ( TextDlg. DoModal)==IDOK )
{
CRect rect (TextDlg. m_iPosX, TextDlg. m_iPosY,
TextDlg.m_iPosX+1000, TextDlg.m_iPosY+1000);
Str=TextDlg. m_sText;
myFont.CreateFontIndirect (&m lFont);
pOldFont=pDC->SelectObject(&myFont);
pDC->SetTextColor(m_cTextColor);
pDC->DrawText (str, rect, 0);
pDC->SelectObject(pOldFont);
SaveInStack();}
在OnFont()函數中嵌入TextDialog()函數,
DDX_ Text(pDX,IDC_ POS-X, m_iPosX); //文本區內文字輸入X軸
DDX_ Text(pDX,IDC_ POS_ Y, m_iPosY); //文本區內文字輸入Y軸
顏色的控制:
在Windows系統中,色彩是以ture color來定義的,即COLORREF它是一個四位元組字,其中的3個位元組分別代表紅,綠,藍三種基本單色,也就是每一個基本單色由一個位元組來表示,亦即每一個基本單色有256種色階。所以True color有16777216種色彩變化。雖然計算機內定義了這么多顏色,但是對於應用與現實生活中的LED顯示屏來說無須也無法達到。因為人眼對不同顏色光線的敏感程度不同,並且紅、綠和黃三種顏色是人眼視覺細胞最敏感的,所以這三種顏色成為基色,通過其不同比例的混合就能實現從白到黑的各種顏色。所以也正是應用於交通警視最為普遍的顏色。
LED顯示屏應用於交通指揮大廳的法律宣傳,為公眾傳輸信息以及服務,基於特殊的應用領域,圖文顯示屏都只有三種顏色的變化。所以控制系統在上具欄內只添加了以上三種顏色滿足今後擴展的要求。

4.2 字模提取
4.2.1字模簡介
文字的字模是一組數字,但它的意義卻與數字的意義有著根本的變化,它是用數字的各位信息來記載英文或漢字的形狀[1]。
在電腦硬體中,根本沒有漢字這個概念,也沒有英文的概念,其認識的概念只有——內碼(將ASCII表的高128個很少用到的數值以兩個為一組來表示漢字,即漢字的內碼。而剩下的低128位則留給英文字元使用,即英文的內碼)。如果你用啟動盤啟動系統後用DIR命令可能得到一串串莫名其妙的字元,但那確確實實是漢字,如果你啟動UCDOS或其他的漢字系統後,就會看到那是一個個熟悉的漢字。在硬體系統內,英文的字模信息一般固化在ROM里,即使在沒有進入系統的CMOS里,也可以讓你看到英文字元。而在DOS下,中文的字模信息一般記錄在漢字型檔文件里(將製作好的字模放到一個個標準的庫中,這就是點陣字型檔文件)。
4.2.2 LED顯示屏領域字模實現技術
在通過軟體實現的技術中,目前有許多字模生成軟體,軟體打開後輸入漢字,點「檢取」,十六進制數據的漢字代碼即可自動生成,把我們所需要的豎排數據復制到我們的程序中即可。在通過硬體實現字模提取的技術中,有在單片機系統中增加硬漢字型檔的方法,主控器發送的漢字是其機內碼,用兩個位元組來表示一個漢字。根據機內碼,顯示單元控制模塊從漢字型檔中查取顯示字模,實現漢字顯示。由於帶有硬漢字型檔,進行動態文字顯示時,通用智能顯示單元僅接受漢字的機內碼即可,這樣數據通訊量大大減少。因此,「動態文字顯示速度快」。
4.2.3軟體控制系統字模提取的分析與設計
而在LED顯示屏控制系統具體應用的Windows操作系統下如何提取字模信息是設計的核心。軟體控制系統在實際編輯過程中,要求各種字體、字型大小的文字都能被編輯、保存。所以系統在設計時,把文本區理解為由眾多的象素點構成,而把不同字體、字型大小的文字理解為一幅圖像。因為所開啟的文本區大小與LED顯示屏的大小對應,所以採用16×16點陣為單位,把文本區內的每個像素點都看成一個二維數組,由於系統中各種顏色都有對應的值,賦予每個不同顏色的像素點不同的對應值,再把每個點賦予一個int型的值,這樣保存下來的信息就是二進制數據。通過這樣的設計,我們不僅可以把任何字型,任何大小的文字保存下來,還可以顯示以256個像素點陣為單位的任何圖形。在軟體控制系統中實現字模的提取,也就避免了在單片機中載入硬漢字型檔模塊,從而簡化了硬體模塊的設計。
以下以單色屏為例,介紹系統採用字模保存的演算法設計:
定義COLORREF zimo_ color為像素點的顏色,判斷某個點的顏色值。如果值為Oxffffff,說明此點為白色,賦予此點值0。由於單色屏只有紅色和不顯色兩種,所以可以簡單賦值為除白色外其餘點賦值為1。
CClientDC dc(this);
CFile myfile;
unsigned int zimo[192] [384]={0};
unsigned char zimo_data[192][48]={0};
COLORREF zimo_color;
int row, col ;
this ->HideCaret();
for (row=0;row<192;row++){
for (col=0;col<384;col++){
zimo_color=do.GetPixel (col, row);
if (zimo color = =Oxffffff)
{zimo [row] [col]=0;}else
{zimo [row] [col]=1;}}}
定義unsigned int zimo[192][384]={0};//文本區像素點
以8位為一位元組(因為在隨後的串列通訊中,傳輸的數據是8位的二進制數據)
定義 unsigned char zimo_data[192][48]={0};
this->ShowCaret();
int i,j,k;
for(i=0;i<192;i++){
for(j=0;j<48;j++){
for (k=0;k<8;k++){
zimo_data[i] [j]+=zimo[i] [8=}j+k]*((int) pow (2, (7-k)));}}}

4.3 效果添加與預覽功能的設計與實現
在當今高度信息化的社會,圖形圖像等形象性信息所佔比例日益提高,計算機在各種信息處理中正發揮著重要作用。由於數字化技術、計算機技術的介入,傳統的模擬圖像為主的電視界已開始全面進入數字化的數字廣播時代。從電子顯微鏡下的微觀世界,到衛星圖像所拍廣闊領域,圖像處理在實際生活中廣泛應用:把文檔、圖形等圖像化的辦公圖像處理;醫用X射線CT (Computer Tomography,計算機斷層攝影)機為代表的醫用圖像處理;用於人造衛星拍攝的遙感圖像處理以及廣播電視、電影界中的圖像處理等。
為了增強顯示效果,LED顯示屏也可以有多種顯示模式。
1、硬體模塊處理顯示模式技術
LED圖文顯示屏可以增添多種顯示模式,從而增強顯示效果。產生不同顯示模式的方法,主要是隨時間變化不斷控制刷新顯示數據。但對於顯示數據的刷新,並不意味著一定要重新編寫顯示數據,可以通過一定的演算法從原來的顯示數據直接生成。可以按順序調整行號,使顯示圖文產生上下平移;而順序調整列顯示數據的位置,就可以達到左右平移的目的;同時調整行列順序,就能得到對角線平移的效果。
2、軟體模塊直接載入效果技術
如果對於信息數據的刷新演算法過於復雜,可以考慮直接生成帶有顯示模式的數據。經過系統的分析與設計,採用在文本區內,完成對文字及圖形的編輯工作,完成字模的提取與保存後,通過演算法設計,增添滾動顯示模式。
1)滾動顯示模式的設計與實現
屏幕顯示滾動效果在PreviewDialog內,加入button選項,即實現多屏信息保存時,根據需要普通效果與滾動效果穿插選擇達到最終保存的目的:
for (unsigned char i=0;i<file_number;i++)
CString tempFieldl,tempField2, tempField3;
unsigned char file_length, file_ distype,file_ distime;
tempFieldl = m_listCtrl.GetItemText(i,0);
tempField2 = m_listCtrl.GetItemText(i,1);
tempField3 = m_listCtrl.GetItemText(i,2);
file_length=(unsigned char)tempFieldl.GetLength();
myfile. Write (&file_length, 1); //存儲文件名長度
myfile. Write (&file_distype, 1); //存儲文件顯示方式
myfile.Write(&file_ distime, 1);//存儲文件顯示時間}
2)圖像預覽功能設計與實現
控制系統完成編輯工作後,保存的是字模信息,增加圖像預覽功能主要用來預覽要傳輸的字模保存文件,由於加入了多屏傳輸、滾動顯示效果,而且傳輸到大屏的待顯示的信息需要預先保存,所以對保存的信息預覽有利於准確、高效的完成編輯到傳輸的工作。
研究與設計:
定義unsigned char dis_type_pre = 0;//表示普通方式
定義unsigned char dis_type_pre = 1;//表示滾動方式
當設置方式為滾動時:
if (roll_number! = 399){
for (row=0;row<192;row++){
for (col=0;col<=roll number;col++){
if (zimo [row] [383-roll_number+col」= = 1){
dc. SetPixel (col,row, 0);
}}}
else{
dis_type_pre=0;
roll_number=-1;
KillTimer (1);
for (row=0;row<192;row++){
for(col=0;col<383;col++){
if (zimo [row] [col]==1){
dc. SetPixel (col,row, 0);
}}}

㈢ 如何用單片機C51讀取16*16點陣里的漢字

首先ROM裡面每一個漢字都會對應一個地址,應該是有一張地址碼的。假設「我」字的地址是0xFF,一般來說,你要將此地址送到ROM的地址線,然後讀數據線,就能取出這個字的點陣編碼了。

也就是說,你要先有一張地址表,每一個地址對應一個漢字,需要哪個漢字,便取相應的地址碼。說得很粗略,不知道有沒有看明白?具體你可以上網找一些實例來看。

回答你的補充:

你輸入的按鍵組合其實就是一個編碼啊。一個編碼對應一個漢字就可以了。如果一個編碼對應有多個漢字,可以把相同的都列出來備選就可以了。

㈣ 51單片機點陣顯示一個漢字

8x8的點陣太小,很難正常顯示一個漢字,通常,會使用4個8x8的點陣即16x16的點陣來顯示一個漢字。

單片機在通過點陣顯示漢字的時候,需要用到如下技術手段:

1、漢字取模

漢字取模,即把漢字對應16x16點陣的圖形用16進制數來描述,形成可以用於驅動顯示的數據。

例如下圖,的漢字「中」

該字的16x16點陣圖形中,每行有16個像素,可以編碼為2個位元組,每8個像素,對應一個位元組的高低位,則該字編碼的前2個位元組為0x01,0x80……,如此,可用32個位元組描述漢字的點陣圖形。

關於漢字取模有很多開源的軟體,你可以搜索下載並使用,將你的程序中所需要使用的漢字,全部處理成字模,再定義到程序中即可。(也可以使用漢字字型檔晶元,這里就不討論了)

2、掃描顯示

通常,驅動點陣設備時,為了節約單片機的管腳資源,會使用鎖存器一類的期間,即鎖存器輸出端與點陣連接,而輸入段由單片機控制,採用行、場掃描或分塊行、場掃描的方式驅動,具體你可以搜尋相關資料。

㈤ 怎麼讓單片機閱讀文字信息或者自動翻譯圖片上的文字

可以實現,
第一:你需要一個掃描器(千萬別指望單片機內部來完成),最好這個掃描器能自動識出文字(有嗎?我不知道,如果有也應該是掃描模塊)。然後把這個掃描器連接到單片機上(如何連接,取決於掃描模塊的介面,如I2C、PCI等);
第二:你需要外接一個語音合成晶元(別指望單片機來實現這個功能),將轉換的文字信息交給語音晶元來合成;
第三:你需要外接一個揚聲器,以便於發聲。
呵呵!這樣看來單片機只起到一個指揮的功能。
至於你說的用電腦來翻譯,只是把我說的第一步由電腦來完成,另外兩部分還是需要實現。至於讓單片機來閱讀你從電腦發送的(可通過串口或USB來實現)信息,還是別指望單片機來實現。
對了,由於信息量非常大,你可能需要擴展數據存儲器,不夠用。

㈥ 怎麼在stm32f429 單片機顯示中文文字

不管何種 單片機顯示中文文字,首先要看液晶屏是否自帶字型檔
如果帶字型檔只管送中文文字的Uinicode編碼就行(編譯軟體會自選查找)
如果不帶字型檔,就要製作或復制字模(庫)文件,顯示時計算好要顯示的漢字在字型檔中的位置,讀出該字字模後,逐位判斷是1還是0,從而決定是畫黑點還是白點(當然彩屏還可以是多種顏色)這些在野火和正點原子的STM32教程中都有

㈦ 單片機怎樣通過語音模塊讀出顯示屏上的漢字謝謝各位啦~

需要實現錄制每個漢字的發音,並建立一個地址映射關系,根據漢字編碼,獲取聲音數據

㈧ 如何在單片機中調用hzk漢字型檔

這個需要用專用軟體從「hzk漢字型檔」提取字模,然後以數組的形式,存在單片機中,這樣就可以在代碼中通過對數組的讀取調用漢字型檔了

㈨ 求一個完整的單片機顯示漢字程序

是用點陣式LED還是用LCD的?

這是液晶12864的顯示程序
#include <reg51.h>

sbit RS=P2^2; // 數據\指令 選擇
sbit RW=P2^1; // 讀\寫 選擇
sbit E=P2^0; // 讀\寫使能
sbit CS1=P2^4; // 片選1
sbit CS2=P2^3; // 片選2

unsigned int number=0,mstcnt=0; //number 控制顯示的字元個數,mstcnt用於延時控制

unsigned char code ziku[]=

{
/* 此方法顯示的漢字為下半列排,即先分為上下兩半,然後先取上半部分的點陣數據,且點陣對應的數為從下看到上 D7~D0
/*-- 文字: 我 -- 採用下半列排的方式,送數的方式:它是顯8*16後接著換下一頁顯下半8*16
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/

/*-- 文字: 歡 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,

/*-- 文字: 迎 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,

/*-- 文字: 大 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,

/*-- 文字: 家 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x18,0x04,0x14,0x94,0x94,0xD5,0xB6,0x14,0x14,0x94,0x04,0x14,0x0C,0x04,0x00,
0x00,0x29,0x29,0x15,0x14,0x4A,0x89,0x44,0x3F,0x06,0x09,0x09,0x10,0x30,0x10,0x00,

/*-- 文字: 點 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00,
0x00,0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00,

/*-- 文字: 擊 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x80,0x88,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0xC0,0x80,0x00,
0x00,0x00,0x00,0x7E,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x7E,0x00,0x00,0x00,

/*-- 文字: 我 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x20,0x20,0x22,0x22,0xFE,0x21,0x21,0x20,0x20,0xFF,0x20,0x22,0xAC,0x20,0x20,0x00,
0x04,0x04,0x42,0x82,0x7F,0x01,0x01,0x10,0x10,0x08,0x07,0x1A,0x21,0x40,0xF0,0x00,

/*-- 文字: 的 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00,

/*-- 文字: 博 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x20,0x20,0xFF,0x20,0x20,0x04,0xF4,0x54,0x54,0xFF,0x54,0x55,0xF6,0x04,0x00,0x00,
0x00,0x00,0xFF,0x00,0x04,0x04,0x0F,0x35,0x15,0x47,0x85,0x7F,0x07,0x04,0x04,0x00,

/*-- 文字: 客 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x18,0x04,0x84,0x44,0x7C,0xA5,0x26,0x24,0xA4,0x64,0x24,0x14,0x0C,0x04,0x00,
0x08,0x08,0x05,0x04,0xFC,0x46,0x46,0x45,0x45,0x46,0x46,0xFE,0x04,0x0C,0x04,0x00,

/*-- 文字: 謝 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x40,0x42,0xCC,0x04,0x00,0xFC,0x56,0x55,0xFC,0x50,0x90,0x10,0xFF,0x10,0x10,0x00,
0x00,0x00,0x3F,0x50,0x29,0x11,0x4D,0x83,0x7F,0x00,0x41,0x80,0x7F,0x00,0x00,0x00,

/*-- 文字: 謝 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x40,0x42,0xCC,0x04,0x00,0xFC,0x56,0x55,0xFC,0x50,0x90,0x10,0xFF,0x10,0x10,0x00,
0x00,0x00,0x3F,0x50,0x29,0x11,0x4D,0x83,0x7F,0x00,0x41,0x80,0x7F,0x00,0x00,0x00,

/*-- 文字: 使 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,

/*-- 文字: 用 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,

};

checkstate() //狀態檢測(檢查Busy)
{
unsigned char dat;
RS=0; //表示DB7~DBO為顯示指令數據
RW=1; //數據被讀到DB7~DBO
do
{
P1=0x00;
E=1; //E信號下降沿鎖存DB7~DBO
dat=P1; //讀入P1的值
E=0; //鎖存
dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)為0時不忙
//BUSY:1內部在工作,0正常狀態
}while(!(dat==0x00));
}
void writecommand(unsigned char command) //寫命令
{
checkstate(); //檢查Busy
RW=0;
P1=command;
E=1;
E=0;
}
void writedate(unsigned char date) //寫數據
{
checkstate();
RS=1;
RW=0;
P1=date;
E=1;
E=0;
}
void cleanscreen() //清屏
{
unsigned char page,i;
for(page=0xb8;page<0xc0;page++) //共八頁
{
writecommand(page); ///思路基本一樣,從第一頁寫到最後一頁
writecommand(0x40); ///數據指針 第一列開始
for(i=0;i<64;i++) ///0~63列
writedate(0x00);
}
}
void choosescreen(unsigned char NO) //選擇屏幕 兩屏
{
switch (NO)
{
case 0:
CS1=0;
CS2=0;
break; //不選,不顯示
case 1:
CS1=0;
CS2=1;
break;
case 2:
CS1=1;
CS2=0;
break;
default:
break;
}
}

void lce_init(void)//初始化
{
writecommand(0xc0); //設置顯示起始行
writecommand(0x3f);//顯示開關控制
}

void display(unsigned char count) //顯示
{
unsigned int i,m,page=0xb8; //0xb8設置設置頁地址為第0頁
choosescreen(1);
writecommand(0xb8);選擇頁面
writecommand(0x40);起始列
for(i=0;i<count*16;i++)
{
if(i!=0&&i%16==0)
m++;
switch (i) //控制顯示的頁指針與列指針
{
case 64: //顯示的列累計求和 得所有左右屏四列的開始為 0.64 128.192 256.320 384.448
choosescreen(2); //右屏
writecommand(page); //字的上半部分 此顯示方法與直接控制頁顯示類似,不過改進之處在於可逐字顯示
writecommand(0x40); //設置起始列
break;
case 128:
choosescreen(1); //左屏
writecommand(page+2);
writecommand(0x40);
break;
case 192:
choosescreen(2);
writecommand(page+2);
writecommand(0x40);
break;
case 256:
choosescreen(1);
writecommand(page+4);
writecommand(0x40);
break;
case 320:
choosescreen(2);
writecommand(page+4);
writecommand(0x40);
break;
case 384:
choosescreen(1);
writecommand(page+6);
writecommand(0x40);
break;
case 448:
choosescreen(2);
writecommand(page+6);
writecommand(0x40);
break;
default:
break;
}
writedate(*(ziku+i+m*16));
}
choosescreen(1);
page=0xb9;
writecommand(page);
writecommand(0x40);
m=0;

/*
writecmd1(m); //上下循環顯示
if(m==0xff)
{
m=0xc0;
}
m++;
writecmd2(n);
if(n==0xff)
{
n=0xc0;
}
n++;
*/

for(i=0;i<count*16;i++)
{
if(i!=0&&i%16==0)
m++;
switch (i) //控制顯示的頁指針與列指針
{
case 64: //顯示的列累計求和
choosescreen(2); //右屏
writecommand(page); //字的下半部分
writecommand(0x40);
break;
case 128:
choosescreen(1); //左屏
writecommand(page+2);
writecommand(0x40);
break;

case 192:
choosescreen(2);
writecommand(page+2);
writecommand(0x40);
break;
case 256:
choosescreen(1);
writecommand(page+4);
writecommand(0x40);
break;
case 320:
choosescreen(2);
writecommand(page+4);
writecommand(0x40);
break;
case 384:
choosescreen(1);
writecommand(page+6);
writecommand(0x40);
break;
case 448:
choosescreen(2);
writecommand(page+6);
writecommand(0x40);
break;
default:
break;
}
writedate(*(ziku+i+m*16+16));
}
m=0;
}
void t0(void) interrupt 1 using 0
{
mstcnt++;
if(mstcnt==2000)
{
mstcnt=0;
number++;
}
}
main()
{
TMOD=0x02;
TH0=0x06; //// 6650us定時中斷
TL0=0x06;
TR0=1;
ET0=1;
EA=1;

E=1;

choosescreen(0);

cleanscreen();

lce_init();

while(1)
{
display(number);
if(number==33)
{
number=0;
choosescreen(0);
cleanscreen();
}
}

}

閱讀全文

與單片機讀漢字相關的資料

熱點內容
乳山迷霧txt全文閱讀全文小說 瀏覽:885
vm同步命令 瀏覽:14
安卓轉移到ios王者榮耀怎麼登 瀏覽:955
工業壓縮機品牌 瀏覽:182
蘋果系統怎麼更改app的圖標 瀏覽:668
泰劇女同電影 瀏覽:435
人造變異女的電影 瀏覽:237
懷舊經典老錄像片 瀏覽:593
和利時功能塊怎麼加密 瀏覽:30
宣萱電影好看 瀏覽:568
韓國純真時代動態圖 瀏覽:100
關於男主有個能操控別人 瀏覽:303
怎麼測試doh加密 瀏覽:210
歐美 小說 圖片 瀏覽:908
西安程序員未來的發展趨勢 瀏覽:173
叫阿能的電影 瀏覽:261
客車購票小程序源碼 瀏覽:645
程序員用數據表白靈魂伴侶 瀏覽:485
spin命令行 瀏覽:376
百合txt下載 瀏覽:61