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

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

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)

  {

      ;

  }

}

你可能感兴趣的:(51单片机)