LCD1602


LCD1602(16*2)

一.原理部分

1.引脚

显示容量:16*2个字符

VO(对比度):值太小显示会很浅,看不清值太大每个像素都显示出来,无法辨别哪些是我们想要的,我们用R1来调节

D1~D7:并行传送模式,最好接在一组io口上,D0—P0_1,D7—P0_7(高位对高位,低位对低位)

RS(在哪写)&RW(写什么)&E:控制引脚,控制D1~D7

E:上升沿的时候把数据传到D1~D7,下降沿的时候执行命令

2.内部结构

C(character)G(generater)字符生成

CGRAM是可写的,是自定义存储数据

CGROM不可写,早已规定,相当于字典

字模库就是段码表

D(data)D(display)数据显示

DDRAM,用户可写,对应到屏幕的话只会显示前16列(前16列映射到屏幕上),从第17列开始可以写,因为屏幕不够大所以显示不了(问题不大)

3.段码表

我们先要有一个段码表,然后找索引对应屏幕里的

可写的只有八个,在0001 0000-0001 0111

不可写e.g.比如A,对应0100 0001—转16进制—>0x41

4.时序图

最高位为1位置不同可以区分不同的指令

  • 特别是在DB7置1绝对是要操作DDRAM

5.设置光标位置DDRAM(数据显示)

第一行:1000 0000 —>0x80

第二行:1100 0000 —>0xC0

两串的第一个1都代表要进入DDRAM这个指令

因为第一行的地址是00所以后接000 0000,第二行的地址是40所以后接100(二转十就是4) 0000

二.代码部分

1.子函数

①LCD_WriteCommand

void LCD_WriteCommand(unsigned char Command)
{
	LCD_RS=0;		//0为指令
	LCD_RW=0;		//0为输入
	LCD_DataPort=Command;
	LCD_E=1;
	LCD_Delay();	//延缓快速上下拉
	LCD_E=0;
	LCD_Delay();	//延缓快速上下拉
}

②LCD_DataCommand

void LCD_WriteData(unsigned char Data)
{
	LCD_RS=1;		//0为数据
	LCD_RW=0;		//0为输入
	LCD_DataPort=Data;
	LCD_E=1;
	LCD_Delay();	//延缓快速上下拉
	LCD_E=0;
	LCD_Delay();	//延缓快速上下拉
}

③LCD_Init

void LCD_Init(void)
{
	LCD_WriteCommand(0x38); //八位数据接口,两行显示,5x7点阵屏
	LCD_WriteCommand(0x0C); //显示开,光标关,闪烁关
	LCD_WriteCommand(0x06); //数据读写操作后,光标自动加一,画面不动
	LCD_WriteCommand(0x01); //清屏
}

④.LCD_ShowChar

LCD_WriteCommand(0x80|Column-1);

👆理解:Column是列。列-1再并上0x80才转换为对应的地址

  • e.g. 当选择(1,2)时,由DDRAM的表格我们得知该位置的地址是01H
  • 此时传参到Column的是2,2-1=1,1—10进制转2进制—>0001
  • 1000 0000|0000 0001=1000 0001
  • 1 000 0001分成两个模块
  • 1是指进入DDRAM模式
  • 000 0001对应01H,写入到(1,2)位上

文章作者: WB
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WB !
  目录