導航:首頁 > 操作系統 > 單片機LED顯示字型檔

單片機LED顯示字型檔

發布時間:2025-05-10 14:13:53

Ⅰ LCD12864的屏總是在閃,我是用51單片機做的,屏帶字型檔,補充里是整個程序,怎麼解決謝謝

看了你的程序,問題在while裡面。沒必要循環初始化你的LCD,將初始化程序放到主函數中。你的顯示函數中也已經包含了清屏指令,不需要在while裡面再次加入清屏指令。如果一定要用,建議你在所有清屏指令後加入的延時夠大。清屏指令過多,延時太少的話,相當於清屏之後又寫入,再清屏再寫入,你看到的就是閃了。

Ⅱ 【51單片機】LCD12864顯示字元和圖片

本次所使用的顯示屏為AMPIRE 128x64 Graphical LCD with KS0108 controllers。它自身並不帶字型檔,因此,如果想要在顯示屏上顯示字元,必須通過取模軟體自製字型檔。
AMPIRE12864顯示屏由左右兩個半屏組成,分別由兩片控制器控制,控制引腳為CS1和CS2。每個控制器內部有64*64位的RAM緩存區,每個半屏有8頁、64列,每頁包含8行。一個中文字元的顯示需要16*16個點,因此整個顯示屏最多可顯示32個中文字元,每兩頁顯示一行,共可顯示4行。
AMPIRE12864的控制指令包括:
1、顯示開關設置:將D設置為0可以關閉顯示(指令為0x3F);設置D為1則可以開啟顯示(指令為0x3E)。顯示開關不影響顯示存儲器的內容。
2、顯示起始行設置:通過設置L5~L0來指定顯示起始行,可表示1-64行(當L5~L0為0時,指令為0xC0)。執行此命令後,設置的行將顯示在屏幕第一行。顯示起始行存儲在Z地址計數器中,具有循環計數功能,每掃描一行就自動加一。通過定時長、等間距地修改此指令,可使顯示屏內容呈現向上或向下平滑滾動的顯示效果。
3、頁面地址設置:使用P2~P0來指定頁地址,可表示1-8頁(當P2~P0為0時,指令為0xB8)。該指令規定了後續讀寫操作將在哪一頁進行,除非重新設置該地址,否則均在該頁進行。頁地址存儲在X地址計數器中,讀寫數據對頁地址沒有影響。
4、列地址設置:通過設置C5~C0來指定列地址,可表示1-64列(當C5~C0為0時,指令為0x40)。執行該指令後,後續的讀寫操作將在該列進行。列地址存儲在Y地址計數器中,具有自動加一功能,每一次讀寫數據後自動加一。進行連續讀寫時,列地址只需設置一次即可。
5、讀取狀態字:通過檢查BUSY、ON/OFF和RESET來判斷控制器的狀態。BUSY=1表示控制器正在處理指令或數據,不再接受除讀狀態字以外的操作,單片機需要等待;BUSY=0表示控制器准備就緒,可接受指令。ON/OFF=1表示顯示狀態為關狀態;ON/OFF=0表示顯示狀態為開狀態。RESET=1表示顯示屏處於復位狀態;RESET=1表示顯示屏處於正常工作狀態。
6、讀寫數據:寫指令時,將RS設置為0,R/W設置為0,D0~D7為指令碼,E在下降沿時寫入指令。寫數據時,將RS設置為1,R/W設置為0,D0~D7為數據,E在下降沿時寫入數據。讀狀態時,將RS設置為0,R/W設置為1,E在下降沿時讀取顯示屏狀態,D0~D7為狀態碼。
為了在AMPIRE12864上顯示字元和圖片,需要通過取模軟體提取字元和圖片的字模。提取字元和圖片字模的過程如下:
1、首先,將圖片使用Windows自帶的畫圖軟體打開,調整圖片大小(例如64x64像素),並另存為單色點陣圖(bmp格式)。
2、然後,打開取模軟體(如PCtoLCD2002),導入保存的單色點陣圖圖像,設置好字模生成選項後,點擊生成字模即可。
(註:AMPIRE12864的像素點在低電平時顯示藍色,高電平顯示黑色,因此在取模時應選擇陽碼;取模方式可選擇列行式;每行顯示點陣數據根據圖像大小來選擇,這里選擇64。)
對於漢字字模提取,應遵循先左後右、先上後下的順序提取字模。一個漢字需要16*16點,占據2頁、16列,因此應先提取這一頁的16列數據,再提取下一頁的16列數據,形成一個漢字的字模數據,顯示時按照順序寫入對應DDRAM地址即可。
最後,下面是一個簡單的示例代碼,用於說明如何在AMPIRE 128x64 LCD上顯示字元和圖片:
main.c代碼:
LCD12864.c代碼:
LCD12864.h代碼:

Ⅲ 關於單片機液晶屏LCD12864的程序

/*****************************************************************

*程序名稱:帶漢字型檔的12864液晶顯示模塊驅動

*程序功能:顯示字元 、漢字和圖片

*開發工具:Kile

* MCU型號:AT89S52-24PU

*時鍾頻率:11.0592MHZ

*程序作者:yuan

*版權說明:yuan

*****************************************************************/
#include<reg52.h>
#include "lcd.h"
#include "util.h"

sbit E=P1^5;//脈沖使能
sbit RW=P1^6;//讀寫選擇
sbit RS=P1^7;//數據命令選擇
sbit rst=P3^6;//12864復位

// 延時ms函數:

// 12864檢查狀態函數:
void Check12864State(void)
{

P0=0xff;
E=0;//讀狀態前三控制線的狀態
RS=0;
RW=1;
E=1;//拉高,讀狀態
while((P0&0x80)==0x80);//等待空閑
E=0;//寫命令後三控制線的狀態
RS=1;
RW=0;

}

// 12864寫命令函數:
void Write12864Command( unsigned char com)
{

Check12864State();//檢查狀態
P0=com;//賦值
E=0;//寫命令前三控制線的狀態
RS=0;
RW=0;
E=1;//拉高,寫命令
E=0;//寫命令後三控制線的狀態
RS=1;
RW=1;

}

//12864寫數據函數:
void Write12864Data( unsigned char dat)
{

Check12864State();//檢查狀態
P0=dat;//賦值
E=0;//寫數據前三控制線的狀態
RS=1;
RW=0;
E=1;//拉高,寫數據
E=0;//寫數據後三控制線的狀態
RS=0;
RW=1;

}

//在指定的位置顯示字元串(漢字和ASCII碼字元)函數:
void LCD12864DisplayString( unsigned char y,unsigned char x, unsigned char *pstr)
//y-行數值0-3,x-列數值0-7,pstr-字元串指針
//12864可以顯示32個漢字(四行每行8個),一個地址對應一個漢字
//可以顯示64個ASCII碼字元(四行每行16個),一個地址對應兩個字元
//為了實現自動換行功能,這個函數比較繁瑣
{

unsigned char row,n=0;
Write12864Command(0x30);//基本指令
Write12864Command(0x06);//地址計數器自動加以,游標右移
switch(y)//根據行號選擇行地址
{

case 0:row=0x80;break;//第一行首地址
case 1:row=0x90;break;//第二行首地址
case 2:row=0x88;break;//第三行首地址
case 3:row=0x98;break;//第四行首地址
default:;

}

Write12864Command(row+x);//寫地址
while(*pstr!='\0')
{

Write12864Data(*pstr);//寫字元
pstr++;
n++;//計數
if((n+x*2)==16)//如果一行寫完 ,繼續寫第二行
{
if(y==0) Write12864Command(0x90);//寫下一行地址
else if(y==1) Write12864Command(0x88);//寫下一行地址
else if(y==2) Write12864Command(0x98);//寫下一行地址
else ;

}
else if((n+x*2)==32)//如果第二行寫完 ,繼續寫第三行
{

if(y==0) Write12864Command(0x88);//寫下一行地址
else if(y==1) Write12864Command(0x98);//寫下一行地址
else ;
}

else if((n+x*2)==48)//如果第三行寫完 ,繼續寫第四行
{
if(y==0) Write12864Command(0x98);//寫下一行地址
else ;
}
else ;
}

}

//圖片模式清屏函數:
void Clear12864Screen()
{

unsigned char i,j;
Write12864Command(0x34);//功能設定:8位控制方式,使用擴充指令
Write12864Command(0x36);//使用擴充指令,繪圖顯示控制
for(i=0;i<32;i++)

//ST7920可控制256*32點陣(32行256列),而12864液晶實際的行地址只有0-31行,

//12864液晶的32-63行的行是0-31行地址從第128列劃分一半出來的,所以分為上下兩半屏,

//也就是說第0行和第32行同屬一行,行地址相同;第1行和第33行同屬一行,以此類推

{

Write12864Command(0x80|i);//寫行地址(垂直地址)
Write12864Command(0x80);//寫列地址(水平地址)
for(j=0;j<32;j++)
Write12864Data(0x00);//清屏

}

}

//在任意位置顯示任意大小的圖片函數:

void LCD12864DisplayPictrue(unsigned char y,unsigned char x,

unsigned char px,unsigned char py, unsigned char *pp)

//y-起始行(數值0-63),x-起始列(16位寬,數值0-7),

//px-圖片寬度,py-圖片高度,pp-指針指向圖片數組

//因為上下屏的地址不連續,要在任意位置顯示完整的圖像,處理起來比較繁瑣

{

unsigned char i,j,k;
Clear12864Screen();//清屏
if(y<32)//如果起始行在上半屏
{

k=32-y;//算出上半屏的行數
for(i=0;i<k;i++,y++)//上半屏行數
{
Write12864Command(0x80|y);//寫行地址(垂直地址)
Write12864Command(0x80|x);//寫列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//寫圖片數據

}

y=0;//下半屏起始行,接上半屏繼續寫數據
for(;i<py;i++,y++)//下半屏剩下的行數
{

Write12864Command(0x80|y);//寫行地址(垂直地址)
Write12864Command(0x80|(8+x));//寫列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//寫圖片數據

}

}

else //如果起始行在下半屏

{

for(i=0;i<py;i++,y++)//行數
{
Write12864Command(0x80|(y-32));//寫行地址(垂直地址)
Write12864Command(0x80|(8+x));//寫列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//寫圖片數據

}

}

}

void Clear12864Text()
{
Write12864Command(0x34);//清屏
DelayMs(5);
Write12864Command(0x30);//清屏
DelayMs(5);
Write12864Command(0x01);//清屏
DelayMs(5);
}

//12864初始化函數:
void Initialize12864()
{

rst=0;//復位12864
DelayMs(30);
rst=1;
DelayMs(20);
Write12864Command(0x30);//功能設定:8位控制方式,使用基本指令
Write12864Command(0x08);//顯示關
Write12864Command(0x01);//清屏
Write12864Command(0x06);//地址計數器加一、游標右移
Write12864Command(0x0c);//顯示開

}

帶字型檔的驅動

Ⅳ 單片機控制的16*16點陣顯示漢字,為什麼出現的字體是鏡像的怎麼改正

單片機控制的16*16點陣顯示漢字,出現字體是鏡像的現象是由於取點陣時掃描方向搞反了。改正方法是逆序讀點陣數組數據,即原來從數組0下標開始讀改為從下標15開始倒著讀,寫的順序不變,就矯正了。

Ⅳ 單片機,字型檔文件是怎麼調用的

字型檔文件必須嵌入到程序裡面才能使用,一般而言,要製作小字型檔,以節約代碼空間。單片機程序空間是比較緊張的,所以不能使用整個字型檔(比如漢字型檔),只取有用字的字模。

Ⅵ 單片機12864液晶屏帶字型檔和不帶字型檔是什麼意思

就是顯示漢字的問題。
顯示一個漢字,是需要顯示好多小點的。
這就是漢字點陣。

如果不帶字型檔,為了顯示一個漢字,就需要傳送一大批點陣數據。

如果帶字型檔,顯示一個漢字,僅僅需要傳送兩個位元組漢字內碼。
這種情況下,速度就很快。

Ⅶ 求51單片機怎麼顯示漢字,能不能給我發個現成的程序

在51單片機上顯示漢字,首先需要考慮的是所使用的液晶顯示屏是否內置了字型檔。如果有字型檔,那麼只需發送相應的兩位元組漢字代碼就能直接顯示漢字。例如,發送"娟字"的編碼即可。但如果沒有內置字型檔,就需要通過漢字取模軟體提取點陣數據。點陣數據的大小會根據取模軟體的設置有所不同,常見的有16X16點陣和32X32點陣兩種,對應的點陣數據大小也不同。

對於16X16點陣的漢字,通常需要32個位元組來存儲一個漢字的點陣信息。而32X32點陣的漢字則需要128個位元組。因此,在發送點陣數據之前,需要先確定液晶屏支持哪種點陣格式。這可以通過查閱液晶屏的數據手冊來實現。

具體步驟如下:首先,使用漢字取模軟體將漢字「娟」提取成16X16點陣數據或32X32點陣數據。然後,將生成的點陣數據通過單片機發送給液晶屏,使其顯示相應的漢字。在發送點陣數據時,需要注意點陣數據的格式和傳輸方式,以確保數據能夠被液晶屏正確解析並顯示。

值得注意的是,不同的取模軟體和液晶屏可能有不同的點陣數據格式,因此在實際操作中需要根據具體情況來調整。此外,如果需要顯示更多漢字,可以使用循環或其他方法,將點陣數據逐一發送給液晶屏。

總之,在51單片機上顯示漢字的關鍵在於是否有內置字型檔或是否能正確提取和發送點陣數據。通過這些步驟,可以實現漢字的顯示。

Ⅷ 如何用單片機讓數碼管顯字

LED靜態顯示介面
數碼管工作在靜態顯示方式時,共陰極(共陽極)的公共端COM連接在一起接地(電源)。每位的段選線與一個8位並行口相連。只要在該位的段選線上保持段選碼電平,該位就能保持相應的顯示字元。這里的8位並行口可以直接採用並行I/O介面片(例如80C51的P1埠、8155和8255的I/O埠等),也可以採用串列輸入/並行輸出的移位寄存器。考慮到若採用並行I/O介面,佔用I/O資源較多,因而靜態顯示方式常採用串列介面方式,外接8位移位寄存器74HCl64構成顯示電路,圖2是通過串列口擴展8位LED顯示器靜態驅動電路,在TXD(P3.1)運行時鍾信號,將顯示數據由RXD(P3.0)口串列輸出,串列口工作在移位寄存器方式(方式0)。

圖2中使用的是共陰極數碼管,因而各數碼管的公共極COM端接地,要顯示某欄位,則相應的移位寄存器74HC164的輸出線必須是高電平。 顯然,要顯示某字元,首先要把這個字元轉換成相應的字形碼,然後再通過串列口發送到74HC164。74HC164把串列口收到的數變為並行輸出加到數碼管上。先建立一個字形碼表,以十六進制數的次序存放它們的相應字形碼,共陰極字形碼表如表1所示。
考慮到本設計成本問題,靜態電路需要對應於每一個數碼管LED接一個移位寄存器74HC164晶元。而且TXD、RXD埠在上位機通信中要用到,而如果界別的埠,編碼就變得比較復雜了,所以靜態顯示就放棄了。

如要顯示字元6,查表可知6的字形碼為0x7d,把0x7d送到8位移位寄存器74HC164即可。顯然,要顯示字元0~9、A~F,其高4位為全0,而低4位為十六進制數。如果要顯示的數高半位元組不是0,則要通過程序加以變換。這種靜態LED顯示法有著顯示亮度大,軟體較為簡單的特點,但硬體上使用晶元多,每個LED顯示器需要一個驅動電路。

閱讀全文

與單片機LED顯示字型檔相關的資料

熱點內容
魅族怎麼關閉app的通知 瀏覽:841
數控宏程序編程方法技巧與實例 瀏覽:352
新買路由器怎麼設置加密 瀏覽:100
linuxping命令詳解 瀏覽:724
訓練集幾個文件夾 瀏覽:99
java獲取項目根目錄 瀏覽:205
mk編譯成共享庫 瀏覽:645
c語言編譯led顯示國旗代碼 瀏覽:293
我的世界本地伺服器默認地址 瀏覽:131
我的世設置命令方塊會閃退 瀏覽:968
加密媒體怎麼輸密碼 瀏覽:161
方舟如何刪除伺服器數據 瀏覽:600
用閱讀app怎麼看18 瀏覽:690
gn文件編譯 瀏覽:783
酷閃加密系統 瀏覽:820
區塊鏈數據加密 瀏覽:389
3d命令集 瀏覽:290
單片機的智能產品工廠里有 瀏覽:300
事業單位程序員有必要去嗎 瀏覽:583
人工智慧訓練小鳥python 瀏覽:133