1. 程式人生 > >LCD1602液晶顯示

LCD1602液晶顯示

各種液晶屏裡出現的 CGROM CGRAM DDRA

CGROM(中文字型檔)HCGROM(ASCII碼字型檔)

字模儲存用空間。你要顯示某個ascii字元時,要顯示字元的字模就存在這裡。(儲存字模的方式,請開啟windows的畫筆,在裡面寫個   A   字,然後放大8倍,你就知道了)  

CGRAM(自定義字形)

使用者自建字模區,有時ascii碼錶不能滿足個人對字元的要求,則需要在這裡寫入字模。字模的方式和CGROM中的一樣。  

一般寫入到這裡的字模,其索引值為(0x00   ~   0x07),建立好字模後,往DDRAM中寫索引0x00,新建的字元就會顯示出來。

顯示資料RAM(DDRAM)、字元顯示RAM緩衝區(DDRAM)

在1602中:顯示用ram,直接和螢幕上的點相對應.螢幕上的一個點和ddram中的一個位對應,字元屏的ddram和圖形屏的ddram有一點點區別。

對於圖形屏,往ddram裡寫什麼樣的資料,螢幕上就會顯示什麼樣的點,比如你寫0x38,   則顯示00111000。圖形屏的ddram一般都會比螢幕顯示大個2倍以上,為的是簡化翻屏,以及實現其他特殊顯示效果 。

程式設計步驟:

1、寫操作(寫指令(RS=0)、寫資料(RS=1))

1.1寫指令函式 write_command(UINT8 command);

1.2寫資料指令 write_data(UINT8 data);

2、初始化液晶

2.1歸位 write_command(0x02);

2.2設定輸入方式 write_command(0x06);

2.3 控制顯示開關 write_command(0x0c);

2.4功能設定 write_command(0x38);

2.5清屏 write_command(0x01);

3、寫顯示的資料

   write_command(0x80);

   write_data(‘1’);

程式程式碼(一):

#include<reg52.h>

typedefunsigned char UINT8;

typedefunsigned int UINT16;

/**********埠定義********/

#defineDATA P0

sbitRS=P2^4;

sbitRW=P2^5;

sbitEN=P2^6;

/*********延時函式********/

voiddelayms(UINT16 ms)

{

   UINT16 x,y;

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

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

}

/***********寫指令函式***********/

voidwrite_command(UINT8 command)

{

  DATA=command;

  RS=0;

  RW=0;

  delayms(5);

  EN=1;

  delayms(5);

  EN=0;

}

/***************寫資料函式***********/

voidwrite_data(UINT8 dat)

{

  DATA=dat;

  RS=1;

  RW=0;

  delayms(5);

  EN=1;

  delayms(5);

  EN=0;

}

/***********LCD1602的初始化************/

voidLCD1602_Init(void)

{

  write_command(0x01);//清除螢幕顯示

  write_command(0x02);//游標歸位指令

  write_command(0x06);//設定輸入方式,增量不移位

  write_command(0x0c);//整體顯示,關游標,不閃爍

  write_command(0x38);//8位格式,2行,5X7

}

/************顯示函式************/

voiddisplay(UINT8 x,UINT8 y,UINT8 dat)

{

  UINT8 adderss;

  if(y==1)

    adderss=0x80+x;

  else

    adderss=0xc0+x;

  write_command(adderss);

  write_data(dat);

}

/**************主函式*****************/

intmain(void)

{

  RS=0;

  RW=0;

  EN=0;

  LCD1602_Init();

  display(2,2,'A');

  while(1);

}

程式程式碼(二):

#include<reg52.h>

typedefunsigned char UINT8;

typedefunsigned int UINT16;

/************埠定義*********/

#defineDATA P0

sbit RS=P2^4;

sbitRW=P2^5;

sbitEN=P2^6;

/********延時函式**********/

voiddelayms(UINT16 ms)

{

    UINT16 x,y;

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

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

                ;

}

/***********寫命令函式**********/

voidwrite_command(UINT8 command)

{

   RS=0;

   RW=0;

   DATA=command;

   delayms(5);

   EN=1;

   delayms(5);

   EN=0;

}

/***********寫資料函式**************/

voidwrite_data(UINT8 dat)

{

     RS=1;

     RW=0;

     DATA=dat;

     delayms(5);

     EN=1;

     delayms(5);

     EN=0;

}

/************LCD1602的初始化**********/

voidlcd_init(void)

{

     write_command(0x01);//清屏顯示

     write_command(0x02);//游標的返回

     write_command(0x06);//游標右移,文字不移動

     write_command(0x0f);//顯示開啟,游標開啟,游標閃爍

     write_command(0x38);//8位匯流排,單行顯示,5X7點陣

}

/***********主函式***************/

intmain(void)

{

  RS=0;

  RW=0;

  EN=0;

  lcd_init();

  write_command(0x80);

  write_data('1');

  write_data('1');

  write_data('1');

  write_data('1');

  while(1)

  {

      ;

  }

}