LCD12864液晶的使用之字庫型液晶(二)
出處:cheng8760 發(fā)布于:2011-09-16 17:01:12
一、顯示圖片
顯示圖片要用到它的擴充指令,里面有個繪圖開關(guān)G!當我們要顯示圖片時,要打開繪圖開關(guān)G。
還是上次的圖片:取模、生成數(shù)據(jù),顯示效果如下圖所示:

現(xiàn)在來說明一下顯示圖片的函數(shù):
/**********************************************
函數(shù):顯示圖片
說明:要先設(shè)定垂直地址再設(shè)定水平地址(連續(xù)寫入兩
個字節(jié)的資料,來完成垂直于水平的坐標地址)
0x80---0x87:顯示上半部分
0x88---0x8F:顯示下半部分
只需設(shè)定顯示的個位置,指針會自動加1
**********************************************/
void display_BMP(uchar *address)
{
uchar i,j;
for(i=0;i<32;i++)
{
write_LCD_command(0x80+i);//先送垂直地址
write_LCD_command(0x80); //再送水平地址 ----顯示圖片的上半部分
for(j=0;j<16;j++)
{
write_LCD_data(*address);
address++;
}
}
for(i=0;i<32;i++)
{
write_LCD_command(0x80+i);//先送垂直地址
write_LCD_command(0x88);//顯示圖片的下半部分
for(j=0;j<16;j++)
{
write_LCD_data(*address);
address++;//指針地址指向下個位置
}
}
}
還有一點要注意的就是顯示圖片和顯示ASCII碼、漢字的初始化函數(shù)不同,顯示圖片用的是擴展指令:
void init_BMP()
{
write_LCD_command(0x36);//CL=1--8位。擴充指令(RE=1),繪圖打開(G=1)
delay(100);//適當延時
write_LCD_command(0x36);
delay(37);
write_LCD_command(0x3E); //8位(CL=1),擴充指令(RE=1),繪圖打開(G=1)
delay(100);
write_LCD_command(0x01);//清屏指令
delay(100);
}
這一點一定要注意,上面的延時函數(shù)可以不要,大家結(jié)合情況適當添加!顯示圖片的就這么多了,其他部分的代碼和顯示漢字的一樣!這里就不多寫了!
一、顯示動畫
上面也說了,不斷的刷新一張張靜態(tài)圖片就可以顯示動畫了,上面的兩個寫函數(shù):寫數(shù)據(jù)函數(shù)和寫命令函數(shù),EN從1變0延時應(yīng)盡量短些,上面的delay(100);延時過長,大家可以做適當?shù)男薷模?/FONT>
還有一點要說明的是,清屏只是簡單的清屏二不是清除顯示的內(nèi)容,我這么說吧,當你要顯示很多張圖片時,清屏顯示后,只要RAM中的圖片數(shù)據(jù)不變,顯示還是清屏前顯示的圖片,要顯示下一幀圖片時就會變亂,解決辦法是,將0送入顯示的RAM區(qū)(0寫入到顯示圖片函數(shù)中),也就是將一張空白圖片送入到RAM區(qū)顯示。這樣就OK了,其它的步驟我在上面已經(jīng)做了介紹!大家可以試一下!
二、顯示正弦曲線
那么怎么才能顯示一個正弦波形呢?我們可以這樣想,如果我們可以控制128*64液晶上的每個像素的顯示與關(guān)閉,那么就可以根據(jù)曲線的規(guī)律來顯示一個正弦波形了,那么!怎么才能控制一個像素點呢?這就要用到打點函數(shù)了;這個的原理和Proteus中的一樣!

其GDRAM對應(yīng)的顯示關(guān)系如上圖所示;首先我們要在液晶上打號坐標,根據(jù)xy坐標來確定像素點的具體位置,首先要確定列,也就是Y的大小,然后確定它的行,就是哪個字節(jié)的哪個位,也就X的大小了,點亮一個像素點就送1,否則送0,這個大家都應(yīng)該知道吧,其他不畫點的地方就送0就行了,可是按照我們的這個思路寫下去,似乎不對,點亮的點數(shù)不止我們要求的一個!是什么原因呢?原來是對不點亮的點做填0操作了,造成對原來數(shù)據(jù)的破壞,解決的辦法是先讀出一個字節(jié)的數(shù)據(jù),然后點亮我們要求的那個像素點,再將其余不做操作的像素點的數(shù)據(jù)送入到原理的位置,經(jīng)過這樣一整合,就可以只改變我們要求的那個像素點,而其余的點不發(fā)生變化!在根據(jù)正弦函數(shù)sin(x)的對應(yīng)關(guān)系就可以顯示正弦曲線了!思路就是這個樣子的。下面就是那個畫點函數(shù)的代碼:
/********************************************************
畫點函數(shù)說明:增加LCD讀函數(shù),目的是使不打點的地方數(shù)據(jù)保持
不變:方法是先讀出不打點位置的數(shù)據(jù),打完點后將讀到的數(shù)據(jù)寫
入原來的位置,只有這樣才會顯示打點的曲線。
坐標原點:屏的左上角(0,0);到右下端(127,63);
*********************************************************/
void Draw_dots(uchar x,uchar y,uchar color)
{
uchar ROW,xlabel,xlabel_bit;
uchar Read_H,Read_L; //讀LCD中的數(shù)據(jù)
write_LCD_command(0x34);//擴充指令
write_LCD_command(0x36);//打開繪圖指令
xlabel=x》4;//取16*16首地址
xlabel_bit=x & 0x0F;//計算該點在16位數(shù)據(jù)的第幾位
if(y<32)//如果是上半屏,上下半屏y都是0--31
{
ROW=y;
}
else//顯示的是下半屏
{
ROW=y-32;
xlabel+=8; //規(guī)定顯示在下半屏
}
write_LCD_command(ROW+0x80); //送入垂直地址
write_LCD_command(xlabel+0x80);//再送入水平地址
ReadByte();//讀取當前GDRAM數(shù)據(jù)前腰進行空讀,接下來就可以讀出數(shù)據(jù)了
Read_H=ReadByte(); //讀高8位
Read_L=ReadByte(); //讀低8位
write_LCD_command(ROW+0x80); //送入垂直地址
write_LCD_command(xlabel+0x80);//再送入水平地址
if(xlabel_bit<8)
{
switch(color)
{
case 0:Read_H &= (~(0x01《(7-xlabel_bit)));//若變白
break;
case 1:Read_H |= (0x01《(7-xlabel_bit));//若涂黑
break;
case 2:Read_H ^= (0x01《(7-xlabel_bit));//若反轉(zhuǎn)
break;
default:break;
}
write_LCD_data(Read_H);//將數(shù)據(jù)寫入GDRAM
write_LCD_data(Read_L);//先寫高位,再寫低位(地址指針順序)
}
else
{
switch(color)//color設(shè)置
{
case 0: Read_L &= (~(0x01《(15-xlabel_bit)));//若變白
break;
case 1: Read_L |= (0x01《(15-xlabel_bit));//若涂黑
break;
case 2: Read_L ^= (0x01《(15-xlabel_bit));//若反轉(zhuǎn)
break;
default:break;
}
write_LCD_data(Read_H);
write_LCD_data(Read_L);//寫入數(shù)據(jù)
}
write_LCD_command(0x30);//回到普通模式
}
其實寫這個函數(shù),主要還是思路,思路對了些代碼就簡單了!里面的正弦函數(shù)顯示,可以包含math.h這個頭文件中的正弦函數(shù)即可!
下面是我寫個一個顯示正弦函數(shù)的效果,通過按鍵可以調(diào)節(jié)幅度和頻率!

下面這個顯示溫度曲線:

版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- LED照明技術(shù)特性與選型運維指南2026/1/5 10:26:27
- 工業(yè)觸摸屏選型與現(xiàn)場應(yīng)用技術(shù)指南2025/12/22 11:44:57
- 顯示器色深 6Bit、8Bit、10Bit 與 6 抖 8、8 抖 10、FRC2025/8/28 15:29:32
- Micro-LED技術(shù)解析2025/8/26 17:21:56
- LED顯示屏標清、高清、超清、1080P與4K的解析2025/8/8 17:05:00









