新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 12864液晶深入學習筆記_1

        12864液晶深入學習筆記_1

        作者: 時間:2016-11-28 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201611/322839.htm

        voidDraw_TX(ucharYaddr,ucharXaddr,constuchar*dp)

        {

        ucharj;

        uchark=0;

        //wr_lcd(comm,0x01);//清屏,只能清除DDRAM

        wr_lcd(comm,0x34);//使用擴展指令集,關閉繪圖顯示打開擴展指令集

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

        {

        wr_lcd(comm,Yaddr++);//Y地址

        wr_lcd(comm,Xaddr);//X地址

        wr_lcd(dat,dp[k++]);//寫入數據

        wr_lcd(dat,dp[k++]);

        }

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

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

        }

        5,向液晶全屏寫圖像的函數如下:

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

        {

        uchari,j,k;

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

        i=0x80;

        for(j=0;j<32;j++)

        {

        wr_lcd(comm,i++);

        wr_lcd(comm,0x80);

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

        {

        wr_lcd(dat,*ptr++);//先寫入32*16個數據

        }

        }

        i=0x80;

        for(j=0;j<32;j++)

        {

        wr_lcd(comm,i++);

        wr_lcd(comm,0x88);

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

        {

        wr_lcd(dat,*ptr++);//再寫入32*16個數據

        }

        }

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

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

        }

        6,下面我就貼上一個對液晶功能測試的函數,其中用到了液晶的很多功能,可以有實現現象觀察得到,注釋的也較詳細,代碼如下:

        #include"msp430g2553.h"

        #include"ser_12864.h"

        voidmain(void)

        {

        uinti;

        ucharlaba[]=//16*16大小圖形數據

        {0x00,0x00,0x00,0xC0,0x01,0x48,0x02,0x44,0x04,0x52,0xF8,0x49,0x88,0x49,0x88,0x49,

        0x88,0x49,0x88,0x49,0xF8,0x49,0x04,0x52,0x02,0x44,0x01,0x48,0x00,0xC0,0x00,0x00};

        WDTCTL=WDTPW+WDTHOLD;//關狗

        BCSCTL1=CALBC1_12MHZ;//設定cpu時鐘DCO頻率為12MHz

        DCOCTL=CALDCO_12MHZ;

        P2DIR|=BIT5+BIT4;//液晶的兩條線

        init_lcd();//初始化液晶

        //下面是顯示液晶字符表中的字符

        wr_lcd(comm,0x80);//寫第一行的顯示地址寫命令0x80

        for(i=0;i<16;i++)//每一行可以顯示16個字符

        wr_lcd(dat,0x00+i);//顯示0x00~0x0f對應的字符寫數據

        wr_lcd(comm,0x90);//寫第二行的顯示地址因為12864的13行和24行分別由控制器ST7920的兩行切割來的,為了看起來方便

        //這里要手動把地址切換到第二行。要不然的話,顯示完了第一行,液晶會自動切換顯示到第三行上去

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

        wr_lcd(dat,0x10+i);//顯示0x10~0x1f對應的字符

        wr_lcd(comm,0x88);//寫第三行的顯示地址

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

        wr_lcd(dat,0x20+i);//顯示0x20~0x2f對應的字符

        wr_lcd(comm,0x98);//寫第四行的顯示地址

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

        wr_lcd(dat,0x30+i);//顯示0x30~0x3f對應的字符

        //delay_ms(1000);//延遲1s,觀察效果

        //調試時,可以在此處設置斷點,單步執行下面的指令,觀察結果

        //在顯示時DDAM和GDRAM是同時顯示的,也就是它們的顯示結果是疊加在一起的

        //1.設定DDRAM地址命令

        wr_lcd(comm,0x90);//設定DDRAM地址,因為此時DDRAM地址已經溢出

        //2.顯示狀態命令

        wr_lcd(comm,0x08);//整體顯示關,游標關,游標位置關

        wr_lcd(comm,0x0c);//整體顯示開,游標關,游標位置關

        wr_lcd(comm,0x0e);//整體顯示開,游標開,游標位置關

        wr_lcd(comm,0x0f);//整體顯示開,游標開,游標位置開游標閃爍

        //3.位址歸位

        wr_lcd(comm,0x02);//位址歸位,游標回到原點

        wr_lcd(comm,0x84);//將DDRAM地址設為0x88,游標在此閃爍

        //4.點設定指令

        //(以下四個命令是控制寫入字符以后光標及整屏顯示的移動)

        wr_lcd(comm,0x07);//光標右移整體顯示左移

        wr_lcd(comm,0x20);//寫入兩個空格

        wr_lcd(dat,0x20);

        wr_lcd(comm,0x05);//光標左移整體顯示右移

        wr_lcd(dat,0x20);//寫入兩個空格

        wr_lcd(dat,0x20);

        wr_lcd(comm,0x06);//光標右移整體顯示不移動

        wr_lcd(dat,0x20);//寫入兩個空格

        wr_lcd(dat,0x20);

        wr_lcd(comm,0x04);//光標左移整體顯示不移動

        wr_lcd(dat,0x20);//寫入兩個空格

        wr_lcd(dat,0x20);

        //5.游標和顯示移位控制

        //(以下四個命令無需寫入顯示數據,直接控制光標和整屏顯示的移動,上面執行的命令是寫入空格實現光標移動和整屏的移動)

        wr_lcd(comm,0x10);//光標左移

        wr_lcd(comm,0x14);//光標右移

        wr_lcd(comm,0x18);//整體顯示左移,光標跟隨

        wr_lcd(comm,0x1c);//整體顯示右移,光標跟隨

        wr_lcd(comm,0x0c);//關閉光標

        //6.進入擴展功能模式命令

        wr_lcd(comm,0x34);//打開擴展功能模式,繪圖顯示關閉

        //7.反白命令

        wr_lcd(comm,0x04);//同時反白1、3行

        wr_lcd(comm,0x04);//再次反白1、3行,相當于關閉1、3行反白

        wr_lcd(comm,0x05);//同時反白2、4行

        wr_lcd(comm,0x05);//再次反白2、4行,相當于關閉2、4行反白

        //8.睡眠模式命令

        wr_lcd(comm,0x08);//進入睡眠模式液晶的控制器ST7920關閉,降低功耗。但是背光還是亮的

        wr_lcd(comm,0x0c);//退出睡眠模式繼續顯示

        //9.待命模式命令

        wr_lcd(comm,0x01);//進入待命模式也是不顯示內容的,液晶已經準備好接受數據或命令了

        //10.打開GDRAM顯示//這樣打開GDRAM顯示,液晶的GDRAM和DDRAM會同時控制液晶的顯示

        wr_lcd(comm,0x36);//打開擴展功能模式,打開繪圖顯示由于上電后GDRAM中的數據是隨機的,所以如果在顯示之前不清除的話,會顯示亂碼

        Draw_TX(0x80,0x84,laba);//顯示16*16大小圖形顯示上面定義的圖像,是一個小喇叭

        Clear_GDRAM();//清除上電復位后GDRAM中的隨機數值,此時GDRAM顯示空字符,但是DDRAM中還是有數據,所以此時會顯示DDRAM中的數據

        Draw_TX(0x80,0x84,laba);//重新顯示設置16*16大小圖形

        //11.關閉GDRAM顯示

        wr_lcd(comm,0x34);//打開擴展功能模式,關閉繪圖顯示顯示DDRAM中的數據

        //12.設定基本指令集

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

        //13.清除顯示命令

        wr_lcd(comm,0x01);//清屏只能清除DDRAM此時液晶就什么都不顯示了

        //下面是顯示液晶字符表中的字符

        wr_lcd(comm,0x80);//寫第一行的顯示地址

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

        wr_lcd(dat,0x40+i);//顯示0x40~0x4f對應的字符

        wr_lcd(comm,0x90);//寫第二行的顯示地址

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

        wr_lcd(dat,0x50+i);//顯示0x50~0x5f對應的字符

        wr_lcd(comm,0x88);//寫第三行的顯示地址

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

        wr_lcd(dat,0x60+i);//顯示0x60~0x6f對應的字符

        wr_lcd(comm,0x98);//寫第二行的顯示地址

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

        wr_lcd(dat,0x70+i);//顯示0x70~0x7f對應的字符

        LPM4;

        }


        上一頁 1 2 下一頁

        關鍵詞: 12864液晶學習筆

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 屯留县| 哈巴河县| 依兰县| 正安县| 亚东县| 那曲县| 永州市| 东光县| 拉萨市| 大姚县| 南部县| 武隆县| 永川市| 同仁县| 墨脱县| 昌乐县| 鞍山市| 盘山县| 屏东市| 靖西县| 沁阳市| 高青县| 泉州市| 保德县| 离岛区| 黎川县| 丰台区| 乐业县| 禄劝| 南漳县| 芮城县| 蒙自县| 鄂托克旗| 清苑县| 桓台县| 肇庆市| 普安县| 库车县| 辉南县| 普兰店市| 邵阳市|