天天看點

實驗6 LCD接口

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]="Hello World!";

uchar code table1[]="I am a boy!";

sbit lcden=P2^7;  //液晶使能端

sbit lcdrs=P2^6;

sbit LCDWR=P2^5;

uchar num;

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

    延時函數

    參數說明:

    z代表要延時z ms

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

void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

       for(y=110;y>0;y--);

}

    寫指令或資料

    isRs=1代表寫資料,isRs=0代表寫指令

void write(uchar mdata, uchar isRs)

    lcdrs=isRs;

    P0=mdata;

    delay(5);

    lcden=1;

    lcden=0;

    寫指令

    data代表要寫的指令

void write_command(uchar com)

    write(com,0);

    寫資料

    data代表要寫的資料

void write_data(uchar mdata)

    write(mdata,1);

void init()

    LCDWR=0;

    write_command(0x38);//設定16X2顯示,5X7點陣,8位資料接口

    write_command(0x0c);//設定開顯示,不顯示光标

    write_command(0x06);//寫一個字元後位址指針加1

    write_command(0x01);//顯示清零,資料指針清零

void main()

    init();

    write_command(0x80+0x10);

    for(num=0;num<15;num++)

    {

       write_data(table[num]);

       delay(5);

    }

    write_command(0x80+0x50);

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

       write_data(table1[num]);

       write_command(0x18);

       delay(200);

    while(1);

向CGRAM寫入資料的步驟:

1.建立一個字元數組

Uchar LCD_Data1[]={0x01,0x03,0x1D,0x11,0x1D,0x03,0x01,0x00};

2.設定CGRAM位址,寫指令.

Write_cmd(0x40);

3.把資料送入CGRAM位址内.

for(i=0;i<i;i++) //在8個位元組的CGRAM中寫入要顯示的漢字字模

{            write_cmd(0x40+i);

              write_date(table[i]);

              delay(5);

4.寫需要顯示的位置指令. Write_cmd(0x80);

5.把CGRAM的0位的資料送向LCD1602,顯示資料存儲的資料. for(i=0;i<8;i++)      //顯示自定義字元

       {

              write_date(i);  //顯示第i個字元

       }

sbit lcdrs=P2^6;  //資料或指令控制(0代表指令,1代表資料)  

sbit LCDWR=P2^5;  //讀寫控制(0代表寫,1代表讀)

uchar code table_HanZi[]={

0x04,0x04,0x1F,0x15,0x15,0x1F,0x04,0x04,//中

0x0A,0x1B,0x0E,0x0B,0x04,0x1F,0x04,0x04,//華

0x00,0x04,0x04,0x04,0x0A,0x11,0x00,0x00,//人

0x1F,0x11,0x1F,0x18,0x16,0x16,0x11,0x18,//民

0x0A,0x1F,0x0A,0x1F,0x00,0x0A,0x11,0x11,//共

0x04,0x08,0x18,0x1F,0x0D,0x1F,0x1C,0x08,//和

0x1F,0x11,0x1F,0x15,0x1F,0x17,0x1F,0x1F,//國

};

uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};  //自定義字元資料位址

    delay(1);

    uchar i;

    while(1)

       write_command(0x40);    //開始寫入要顯示的自定義字元、漢字代碼

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

           write_data(table_HanZi[i]);

           delay(5);

       write_command(0x80);    //從第一行第一列開始顯示

       for(i=0;i<8;i++)  //顯示自定義字元

           write_data(table1[i]);  

本文轉自陳哈哈部落格園部落格,原文連結<b>http://www.cnblogs.com/kissazi2/p/3174460.html如需轉載請自行聯系原作者</b>

<b></b>

<b>kissazi2</b>