最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

LCD12864液晶的使用之字庫型液晶(二)

出處:cheng8760 發(fā)布于:2011-09-16 17:01:12

  一、顯示圖片

  顯示圖片要用到它的擴(kuò)充指令,里面有個(gè)繪圖開關(guān)G!當(dāng)我們要顯示圖片時(shí),要打開繪圖開關(guān)G。

  還是上次的圖片:取模、生成數(shù)據(jù),顯示效果如下圖所示:

  現(xiàn)在來說明一下顯示圖片的函數(shù):

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

  函數(shù):顯示圖片

  說明:要先設(shè)定垂直地址再設(shè)定水平地址(連續(xù)寫入兩

  個(gè)字節(jié)的資料,來完成垂直于水平的坐標(biāo)地址)

  0x80---0x87:顯示上半部分

  0x88---0x8F:顯示下半部分

  只需設(shè)定顯示的個(gè)位置,指針會自動加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++;//指針地址指向下個(gè)位置

  }

  }

  }

  還有一點(diǎn)要注意的就是顯示圖片和顯示ASCII碼、漢字的初始化函數(shù)不同,顯示圖片用的是擴(kuò)展指令:

  void init_BMP()

  {

  write_LCD_command(0x36);//CL=1--8位。擴(kuò)充指令(RE=1),繪圖打開(G=1)

  delay(100);//適當(dāng)延時(shí)

  write_LCD_command(0x36);

  delay(37);

  write_LCD_command(0x3E); //8位(CL=1),擴(kuò)充指令(RE=1),繪圖打開(G=1)

  delay(100);

  write_LCD_command(0x01);//清屏指令

  delay(100);

  }

  這一點(diǎn)一定要注意,上面的延時(shí)函數(shù)可以不要,大家結(jié)合情況適當(dāng)添加!顯示圖片的就這么多了,其他部分的代碼和顯示漢字的一樣!這里就不多寫了!

  一、顯示動畫

  上面也說了,不斷的刷新一張張靜態(tài)圖片就可以顯示動畫了,上面的兩個(gè)寫函數(shù):寫數(shù)據(jù)函數(shù)和寫命令函數(shù),EN從1變0延時(shí)應(yīng)盡量短些,上面的delay(100);延時(shí)過長,大家可以做適當(dāng)?shù)男薷模?/FONT>

  還有一點(diǎn)要說明的是,清屏只是簡單的清屏二不是清除顯示的內(nèi)容,我這么說吧,當(dāng)你要顯示很多張圖片時(shí),清屏顯示后,只要RAM中的圖片數(shù)據(jù)不變,顯示還是清屏前顯示的圖片,要顯示下一幀圖片時(shí)就會變亂,解決辦法是,將0送入顯示的RAM區(qū)(0寫入到顯示圖片函數(shù)中),也就是將一張空白圖片送入到RAM區(qū)顯示。這樣就OK了,其它的步驟我在上面已經(jīng)做了介紹!大家可以試一下!

  二、顯示正弦曲線

  那么怎么才能顯示一個(gè)正弦波形呢?我們可以這樣想,如果我們可以控制128*64液晶上的每個(gè)像素的顯示與關(guān)閉,那么就可以根據(jù)曲線的規(guī)律來顯示一個(gè)正弦波形了,那么!怎么才能控制一個(gè)像素點(diǎn)呢?這就要用到打點(diǎn)函數(shù)了;這個(gè)的原理和Proteus中的一樣!

  其GDRAM對應(yīng)的顯示關(guān)系如上圖所示;首先我們要在液晶上打號坐標(biāo),根據(jù)xy坐標(biāo)來確定像素點(diǎn)的具體位置,首先要確定列,也就是Y的大小,然后確定它的行,就是哪個(gè)字節(jié)的哪個(gè)位,也就X的大小了,點(diǎn)亮一個(gè)像素點(diǎn)就送1,否則送0,這個(gè)大家都應(yīng)該知道吧,其他不畫點(diǎn)的地方就送0就行了,可是按照我們的這個(gè)思路寫下去,似乎不對,點(diǎn)亮的點(diǎn)數(shù)不止我們要求的一個(gè)!是什么原因呢?原來是對不點(diǎn)亮的點(diǎn)做填0操作了,造成對原來數(shù)據(jù)的破壞,解決的辦法是先讀出一個(gè)字節(jié)的數(shù)據(jù),然后點(diǎn)亮我們要求的那個(gè)像素點(diǎn),再將其余不做操作的像素點(diǎn)的數(shù)據(jù)送入到原理的位置,經(jīng)過這樣一整合,就可以只改變我們要求的那個(gè)像素點(diǎn),而其余的點(diǎn)不發(fā)生變化!在根據(jù)正弦函數(shù)sin(x)的對應(yīng)關(guān)系就可以顯示正弦曲線了!思路就是這個(gè)樣子的。下面就是那個(gè)畫點(diǎn)函數(shù)的代碼:

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

  畫點(diǎn)函數(shù)說明:增加LCD讀函數(shù),目的是使不打點(diǎn)的地方數(shù)據(jù)保持

  不變:方法是先讀出不打點(diǎn)位置的數(shù)據(jù),打完點(diǎn)后將讀到的數(shù)據(jù)寫

  入原來的位置,只有這樣才會顯示打點(diǎn)的曲線。

  坐標(biāo)原點(diǎn):屏的左上角(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);//擴(kuò)充指令

  write_LCD_command(0x36);//打開繪圖指令

  xlabel=x》4;//取16*16首地址

  xlabel_bit=x & 0x0F;//計(jì)算該點(diǎn)在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();//讀取當(dāng)前GDRAM數(shù)據(jù)前腰進(jìn)行空讀,接下來就可以讀出數(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í)寫這個(gè)函數(shù),主要還是思路,思路對了些代碼就簡單了!里面的正弦函數(shù)顯示,可以包含math.h這個(gè)頭文件中的正弦函數(shù)即可!

  下面是我寫個(gè)一個(gè)顯示正弦函數(shù)的效果,通過按鍵可以調(diào)節(jié)幅度和頻率!

  下面這個(gè)顯示溫度曲線:

關(guān)鍵詞:LCD12864液晶的使用之字庫型液晶(二)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!