在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 我的12864學(xué)習(xí)筆記_4---幾點(diǎn)補(bǔ)充詳解

      我的12864學(xué)習(xí)筆記_4---幾點(diǎn)補(bǔ)充詳解

      作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
      我發(fā)現(xiàn)前面幾篇對(duì)圖畫顯示RAM (GDRAM)介紹的不是很詳細(xì),我就在下面再詳細(xì)地介紹一下:

      圖畫顯示RAM(GDRAM)

      本文引用地址:http://www.biyoush.com/article/201611/322842.htm

      提供64*256位元的GDRAM提供64*32個(gè)位元組的記憶空間(由擴(kuò)充指令設(shè)定繪圖RAM地址),最多可以控制256*64點(diǎn)的二維繪圖緩存空間。在更改繪圖RAM時(shí),由擴(kuò)充指令設(shè)定GDRAM地址,先設(shè)垂直地址,再設(shè)水平地址(連續(xù)寫入兩個(gè)位元組的資料來(lái)完成垂直與水平的坐標(biāo)地址)。再寫入兩個(gè)8位元的資料到繪圖RAM,而地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一,整個(gè)寫入繪圖RAM的步驟如下:

      (1),先將垂直的位元組坐標(biāo)(Y)寫入繪圖RAM地址

      (2),再將水平坐標(biāo)(X)寫入繪圖RAM地址

      (3),將D15~D8寫入RAM中(寫入第一個(gè)bytes)。

      (4),將D7~D0寫入到RAM中(寫入第二個(gè)bytes)。

      當(dāng)顯示圖形的時(shí)候,默認(rèn)的將128*64的液晶模塊分成了32*16的16塊,地址分別是80H-8FH,顯示時(shí)候可分為兩個(gè)部分給數(shù)據(jù).這時(shí)就可以看為32*128的兩塊。

      注意圖形顯示時(shí)候的每一個(gè)字節(jié)地址所對(duì)應(yīng)的位置。每行共八個(gè)模塊,共送兩次,開始地址分別為80H和88H。

      也就是顯示的時(shí)候會(huì)只用到GDRAM的前0~31行,共有0~255列,列又分每16列為一個(gè)大列,所以有0~15共16大列。也可以像上面那樣理解為分成了32*16的16個(gè)模塊,地址分別為80H-8FH。

      然后把這16個(gè)模塊分成兩行顯示,所以每一行是8個(gè)32*16模塊,也就是32*128。所以這兩行的起始地址分別為80H和88H。所以在寫入圖形數(shù)據(jù)的時(shí)候會(huì)分兩次寫入,先寫入第一行的8個(gè)32*16模塊,再寫入第二行的8個(gè)32*16模塊。

      在寫入數(shù)據(jù)的時(shí)候要注意,要先輸入垂直地址,再輸入水平地址。

      上面的對(duì)GDRAM進(jìn)行分塊及分行進(jìn)行顯示都是液晶出廠時(shí)默認(rèn)設(shè)定好的,我們用的時(shí)候就直接對(duì)相應(yīng)位置的RAM進(jìn)行寫入數(shù)據(jù)就可以了。

      所以由上面顯示圖片的原理的介紹就可以看出12864液晶只能顯示GDRAM的一半,只用了全部GDRAM的一半。

      清除了上面GDRAM的工作原理,那么GDRAM圖片數(shù)據(jù)的寫入和GDRAM清除程序就不難理解了。程序下面給出,注釋的也很詳細(xì)。

      有了上面的介紹,那么再看下面對(duì)GDRAM的操作(如:清除,數(shù)據(jù)等)就會(huì)明白很多了,下面是對(duì)GDRAM的清除函數(shù),注釋的也比較詳細(xì):

      清除GDRAM的函數(shù)如下:

      voidClear_GDRAM(void)//清除GDRAM中的的隨機(jī)數(shù)據(jù)。因?yàn)樯想姾驡DRAM中的數(shù)據(jù)是隨機(jī)的,如果不清除而直接打開GDRAM顯示時(shí),會(huì)顯示亂碼

      //所以在局部使用GDRAM顯示圖形時(shí),要先清除隨機(jī)數(shù)據(jù)。如果是全局使用GDRAM,即整個(gè)lcd屏全部設(shè)置顯示數(shù)據(jù),則可以

      //不必清除,因?yàn)樾聰?shù)據(jù)會(huì)把隨機(jī)數(shù)據(jù)給覆蓋掉

      {

      uchari,j,k;

      wr_lcd(comm,0x34);//打開擴(kuò)展指令集操作GDRAM是擴(kuò)展指令集

      i=0x80;

      for(j=0;j<32;j++)//寫入第一行的8個(gè)32*16模塊

      {

      wr_lcd(comm,i++);//寫入第一行8個(gè)32*16模塊的垂直起始地址,在寫入地址時(shí),要先輸入垂直地址,再輸入水平地址這是規(guī)定好的

      wr_lcd(comm,0x80);//第一行水平的起始地址為80H

      //以后寫入數(shù)據(jù)后,地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一

      for(k=0;k<16;k++)

      {

      wr_lcd(dat,0x00);//寫入空字符,就相當(dāng)于清零

      //寫入32*16個(gè)圖片數(shù)據(jù)因?yàn)橐粋€(gè)數(shù)據(jù)是8位的,所以這一次就相當(dāng)于寫入了8個(gè)數(shù)據(jù),所以一共為8個(gè)32*16模塊

      }

      }

      i=0x80;

      for(j=0;j<32;j++)//寫入第二行的8個(gè)32*16模塊

      {

      wr_lcd(comm,i++);//寫入第一行8個(gè)32*16模塊的垂直起始地址,在寫入地址時(shí),要先輸入垂直地址,再輸入水平地址這是規(guī)定好的

      wr_lcd(comm,0x88);//第二行的水平起始地址為88H

      //以后寫入數(shù)據(jù)后,地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一

      for(k=0;k<16;k++)

      {

      wr_lcd(dat,0x00);//寫入32*16個(gè)圖片數(shù)據(jù)因?yàn)橐粋€(gè)數(shù)據(jù)是8位的,所以這一次就相當(dāng)于寫入了8個(gè)數(shù)據(jù),所以一共為8個(gè)32*16模塊

      //寫入空字符,就相當(dāng)于清零

      }

      }

      wr_lcd(comm,0x30);//回到基本指令集

      }

      向GDRAM的寫函數(shù)如下:

      voidDraw_PM(constuchar*ptr)//整屏顯示圖形

      {

      uchari,j,k;

      wr_lcd(comm,0x34);//打開擴(kuò)展指令集

      i=0x80;

      for(j=0;j<32;j++)//寫入第一行的8個(gè)32*16模塊

      {

      wr_lcd(comm,i++);//寫入第一行8個(gè)32*16模塊的垂直起始地址,在寫入地址時(shí),要先輸入垂直地址,再輸入水平地址這是規(guī)定好的

      wr_lcd(comm,0x80);//第一行水平的起始地址為80H

      //以后寫入數(shù)據(jù)后,地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一

      for(k=0;k<16;k++)

      {

      wr_lcd(dat,*ptr++);//寫入32*16個(gè)圖片數(shù)據(jù)因?yàn)橐粋€(gè)數(shù)據(jù)是8位的,所以這一次就相當(dāng)于寫入了8個(gè)數(shù)據(jù),所以一共為8個(gè)32*16模塊

      //這些16進(jìn)制數(shù),一共可以控制32*16*8個(gè)像素

      }

      }

      i=0x80;

      for(j=0;j<32;j++)//寫入第二行的8個(gè)32*16模塊

      {

      wr_lcd(comm,i++);//寫入第一行8個(gè)32*16模塊的垂直起始地址,在寫入地址時(shí),要先輸入垂直地址,再輸入水平地址這是規(guī)定好的

      wr_lcd(comm,0x88);//第二行的水平起始地址為88H

      //以后寫入數(shù)據(jù)后,地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一

      for(k=0;k<16;k++)

      {

      wr_lcd(dat,*ptr++);//寫入32*16個(gè)圖片數(shù)據(jù)因?yàn)橐粋€(gè)數(shù)據(jù)是8位的,所以這一次就相當(dāng)于寫入了8個(gè)數(shù)據(jù),所以一共為8個(gè)32*16模塊

      //這些16進(jìn)制數(shù),一共可以控制32*16*8個(gè)像素

      }

      }

      wr_lcd(comm,0x36);//打開繪圖顯示

      wr_lcd(comm,0x30);//回到基本指令集

      }

      最后在說(shuō)一個(gè)簡(jiǎn)單的函數(shù),拿到液晶時(shí),我們希望檢查一下液晶是不是好的,是不是所有的點(diǎn)都是可用的,就要寫一個(gè)檢查液晶的函數(shù)。原理很簡(jiǎn)單,就是把液晶的所有的像素點(diǎn)都點(diǎn)亮,看看有沒(méi)有壞點(diǎn)就可以了,函數(shù),如下,和寫GDRAM,清除GDRAM的函數(shù)基本相同,只不過(guò)向GDRAM中寫入的是全1,點(diǎn)亮所有的像素點(diǎn),函數(shù)如下:

      voidcheck_screen(void)//點(diǎn)亮全屏,檢查壞點(diǎn)

      {

      uchari,j,k;

      wr_lcd(comm,0x34);//打開擴(kuò)展指令集操作GDRAM是擴(kuò)展指令集

      i=0x80;

      for(j=0;j<32;j++)//寫入第一行的8個(gè)32*16模塊

      {

      wr_lcd(comm,i++);//寫入第一行8個(gè)32*16模塊的垂直起始地址,在寫入地址時(shí),要先輸入垂直地址,再輸入水平地址

      wr_lcd(comm,0x80);//第一行水平的起始地址為80H

      //以后寫入數(shù)據(jù)后,地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一

      for(k=0;k<16;k++)

      {

      wr_lcd(dat,0xff);//全部點(diǎn)亮屏幕

      //寫入32*16個(gè)圖片數(shù)據(jù)因?yàn)橐粋€(gè)數(shù)據(jù)是8位的,所以這一次就相當(dāng)于寫入了8個(gè)數(shù)據(jù),所以一共為8個(gè)32*16模塊

      }

      }

      i=0x80;

      for(j=0;j<32;j++)//寫入第二行的8個(gè)32*16模塊

      {

      wr_lcd(comm,i++);//寫入第一行8個(gè)32*16模塊的垂直起始地址,在寫入地址時(shí),要先輸入垂直地址,再輸入水平地址

      wr_lcd(comm,0x88);//第二行的水平起始地址為88H

      //以后寫入數(shù)據(jù)后,地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一

      for(k=0;k<16;k++)

      {

      wr_lcd(dat,0xff);//全部點(diǎn)亮屏幕

      //寫入32*16個(gè)圖片數(shù)據(jù)因?yàn)橐粋€(gè)數(shù)據(jù)是8位的,所以這一次就相當(dāng)于寫入了8個(gè)數(shù)據(jù),所以一共為8個(gè)32*16模塊

      }

      }

      wr_lcd(comm,0x36);//打開繪圖顯示

      wr_lcd(comm,0x30);//回到基本指令集

      }



      評(píng)論


      技術(shù)專區(qū)

      關(guān)閉