新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 帶字庫型12864液晶的簡單使用

        帶字庫型12864液晶的簡單使用

        作者: 時間:2012-08-04 來源:網絡 收藏

        這是演示效果,第一行“請您欣賞”上自定義的仿宋字體,下面三行是字庫中自帶的漢字(手機拍攝的效果不太好)。

        點擊瀏覽下一頁

        下面是我寫的源程序,(由于水平有限,程序寫法可能不是最優的方式,希望高手批評指正):

        /*********************************************************
        程序:LCD12864自定義顯示字符(最多顯示4個)
        內容:ASCII碼顯示、自帶字庫顯示(8192個)、自定義顯示字符(4個請您欣賞)。
        軟件:keil uVision4
        液晶:QYLCD12864HZ1(帶字庫)
        學習板:HOT-51學習板
        作者:張家越
        整理日期:2011-04-09 17:00

        *************************************************************/
        #includeAT89X52.h>
        #define uchar unsigned char
        #define uint unsigned int//定義一下,方便使用
        #include"word1.h"

        sbit RS=P2^5;
        sbit RW=P2^6;
        sbit EN=P2^7;//液晶的三個控制端

        //sbit PSB=P2^4;//1---8位或4位并口方式;0---串口方式。單片機上電高電平,選擇的是并口方式

        uchar code tab1[]=" LCD12864 ";
        uchar code tab2[]="湖北第二師范學院";
        uchar code tab3[]="電子愛好者張家越";
        unsigned char code table1[][32] =
        {
        /*-- 文字: 請 --*/
        /*-- 仿宋_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
        {
        0x00,0x40,0x20,0x70,0x13,0xC0,0x10,0x70,0x01,0xC0,0x00,0x7C,0x77,0x80,0x10,0x70,
        0x13,0x90,0x12,0x70,0x13,0x90,0x1A,0x70,0x13,0x90,0x02,0x30,0x02,0x10,0x00,0x00,
        },
        /*-- 文字: 您 --*/
        /*-- 仿宋_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
        {
        0x01,0x00,0x09,0x00,0x09,0x38,0x13,0xC8,0x34,0x50,0x51,0x40,0x12,0x50,0x14,0xC8,
        0x10,0x40,0x02,0x00,0x21,0x10,0x29,0x08,0x24,0x08,0x42,0x20,0x01,0xE0,0x00,0x00,
        },
        /*-- 文字: 欣 --*/
        /*-- 仿宋_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
        {
        0x00,0x40,0x06,0x40,0x38,0x40,0x20,0x40,0x20,0x7C,0x26,0x88,0x3C,0x80,0x25,0x40,
        0x24,0x40,0x24,0x40,0x24,0x40,0x24,0xA0,0x44,0xA0,0x45,0x10,0x82,0x1C,0x00,0x00,
        },
        /*-- 文字: 賞 --*/
        /*-- 仿宋_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
        {
        0x01,0x10,0x09,0x20,0x05,0xFC,0x3E,0x08,0x21,0xC0,0x0E,0x40,0x09,0xC0,0x0E,0x00,
        0x00,0xE0,0x0F,0x20,0x09,0x20,0x09,0x20,0x0A,0x20,0x04,0xC0,0x18,0x30,0x00,0x00,
        },


        } ;

        // 漢字表:
        // 天道酬勤

        void delay(uint i)//延時函數
        {
        while(--i);
        }

        void read_busy()//讀忙標志 最高位為1則busy,不能進行讀寫操作
        {
        RS=0;
        RW=1;
        EN=1;//看時序
        while(P0 0x80);
        EN=0;
        }

        void write_LCD_command(uchar value) //寫命令函數
        {
        read_busy();//每次讀寫都要進行讀忙標志
        RS=0;
        RW=0;
        delay(200);
        EN=1;//EN從1--0鎖存數據
        P0=value;
        delay(200);
        EN=0;
        }

        void write_LCD_data(uchar value)//寫數據函數
        {
        read_busy();
        RS=1;
        RW=0;
        delay(200);
        EN=1;//EN從1--0鎖存數據
        P0=value;
        delay(200);
        EN=0;
        }

        void init_LCD()//8位并口方式LCD1864初始化函數
        {
        delay(4000);//等待時間>40ms
        write_LCD_command(0x30);//功能設定:8位數據、基本指令操作
        delay(100);//等待時間>100us
        write_LCD_command(0x30);//功能設定:8位數據、基本指令操作
        delay(37);//等待時間>37us
        write_LCD_command(0x0C);//顯示設定:整體顯示、游標關、不反白
        delay(100);// 等待時間>100us
        write_LCD_command(0x01);//清屏指令
        delay(10000);//等待時間>10ms
        write_LCD_command(0x06);//進入點設定:地址指針加1
        }

        /*=============================================
        自定義漢字函數:CGRAM自定義顯示字符
        地址顯示編碼
        0x400x0000
        0x500x0002
        0x600x0004
        0x700x0006
        共可顯示四個自定義字符!
        顯示自定義字符前,先要設定顯示的位置,否則會亂碼
        ==============================================*/
        void CGRAM()
        {
        uchar i;
        write_LCD_command(0x30);//基本指令操作
        write_LCD_command(0x40);//設定CGRAM字符的位置
        for(i=0;i16;i++)
        {
        write_LCD_data(table1[0][i*2]);
        write_LCD_data(table1[0][i*2+1]);//送顯示數據到CGRAM區中
        }
        write_LCD_command(0x50);
        for(i=0;i16;i++)
        {
        write_LCD_data(table1[1][i*2]);
        write_LCD_data(table1[1][i*2+1]);
        }
        write_LCD_command(0x60);
        for(i=0;i16;i++)
        {
        write_LCD_data(table1[2][i*2]);
        write_LCD_data(table1[2][i*2+1]);
        }

        write_LCD_command(0x70);
        for(i=0;i16;i++)
        {
        write_LCD_data(table1[3][i*2]);
        write_LCD_data(table1[3][i*2+1]);
        }


        }

        void main()
        {
        //uchar num;
        uchar i;
        init_LCD();
        write_LCD_command(0x01);

        CGRAM();
        write_LCD_command(0x82);
        write_LCD_data(0x00);
        write_LCD_data(0x00);//第一個自定義顯示字符編碼為:0x0000

        write_LCD_command(0x83);
        write_LCD_data(0x00);
        write_LCD_data(0x02);//第一個自定義顯示字符編碼為:0x0002

        write_LCD_command(0x84);
        write_LCD_data(0x00);
        write_LCD_data(0x04);//第一個自定義顯示字符編碼為:0x0004

        write_LCD_command(0x85);
        write_LCD_data(0x00);
        write_LCD_data(0x06);//第一個自定義顯示字符編碼為:0x0006
        delay(5000);

        write_LCD_command(0x90);

        //write_LCD_command(0x00);
        for(i=0;i16;i++)
        {
        write_LCD_data(tab1[i]);
        delay(5000);
        }
        write_LCD_command(0x88);
        //write_LCD_command(0x00);
        for(i=0;i16;i++)
        {
        write_LCD_data(tab2[i]);
        delay(5000);
        }
        write_LCD_command(0x98);
        //write_LCD_command(0x00);
        for(i=0;i16;i++)
        {
        write_LCD_data(tab3[i]);
        delay(5000);
        }
        while(1);

        }

        如果覺得我空間里面不夠詳細可以參看大海橡樹的空間:http://hi.baidu.com/echoas(里面寫的比較好)

        12864圖片顯示我將在“12864使用方法(二)”中給出.。

        感謝大家閱讀指教。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东兴市| 荥阳市| 灵台县| 清远市| 通城县| 长治市| 密山市| 聊城市| 玉环县| 彰化市| 东阳市| 旬邑县| 甘洛县| 佛学| 奉化市| 成武县| 兖州市| 德庆县| 无为县| 博客| 银川市| 辰溪县| 黎川县| 武宁县| 永济市| 龙川县| 临颍县| 富锦市| 民乐县| 呈贡县| 昌图县| 清镇市| 怀安县| 怀远县| 甘孜县| 紫阳县| 手机| 赞皇县| 仙居县| 夏津县| 胶州市|