刚开始接触1602的时候,感觉其初始化步骤很麻烦,而且单片机每次给1602写完要显示的数据都要适当延时一下,不然就可能产生乱码。但是对于初学者来说,可以提高一下看时序图的能力。下面简单关于1602的引脚资料以及说明都是从网上copy的。程序是自己写的。希望能帮助比我还新的新手。 1602LCD引脚资料 编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极 表10-13:引脚接口说明表 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。
指令表: 读状态 写指令 读数据 写数据
1602LCD的一般初始化(复位)过程 写指令38H(不检测忙信号)
输入 输入 输入 输入 RS=L,R/W=H,E=H RS=L,R/W=L,D0—D7=指令码,E=高脉冲 RS=H,R/W=H,E=H RS=H,R/W=L,D0—D7=数据,E=高脉冲 输出 输出 输出 输出 D0—D7=状态字 无 D0—D7=数据 无 延时5mS ,我试过1ms,也可以 写指令38H(不检测忙信号) 延时5mS ,我试过1ms,也可以 写指令38H(不检测忙信号) 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置
废话不多说了,对照程序,再看看初始化过程 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2;
void delay(int ms) //延时1毫秒 { int i;
for(;ms>0;ms--) for(i=0;i<110;i++); }
void writecomand(uchar pp) { }
void writedata(uchar dd) { }
void init() {
writecomand(0X38); writecomand(0X38); writecomand(0X08); writecomand(0X01); //////显示设置
//////显示关闭,写08H //////显示清屏,写01H
writecomand(0X38);
delay(5); //第二次等待5ms delay(15); writecomand(0X38);
delay(5); //第一次等待5ms RS=1; RW=0; E=0; P3=dd; delay(1); E=1; delay(1); E=0; RS=0; RW=0; E=0; P3=pp; delay(1); E=1; delay(1); E=0;
//////显示光标移动设置,写06H }
writecomand(0X06); writecomand(0X0c); //////显示开及光标设置,写0cH
因篇幅问题不能全部显示,请点此查看更多更全内容