学习液晶感觉还可以,对于不同的液晶片,学会读懂参考手册,才是最重要的。
https://wenku.baidu.com/view/840dcb2a6c85ec3a87c2c561.html
这个对应郭老师的课的总结,里面总结比我个人详细。
第九节、 I602液晶显示原理及实现.... 79
1、1602LCD最简单液晶工作原理、.... 80
1.1、1602LCD主要技术参数:.... 80
1.2、引脚功能说明.... 80
1.3、基本操作时序.... 80
1.4、液晶指令设置和初始化.... 80
1.5、液晶储存器结构.... 80
2、简单设计程序操作液晶.... 80
2.1、程序一.... 80
2.2、程序二.... 80
3、如何开始对一个没有任何概念的芯片开始单片机的操作.... 76
第九节、I602液晶显示原理及实现
1、1602LCD最简单液晶工作原理、
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别
1602字符型液晶也叫1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。字符型液晶,能够同时显示16x02(2行,一行16字符)即32个字符。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
1.1、1602LCD主要技术参数:
1.2、引脚功能说明
1602LC采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明所示:
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。对比度调整端,若仅仅接地,对比度会很高,常常接上一个几K的电位器或可变电阻来调节对比度以实现理想的显示效果。
第4脚:RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW:读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙(一般对于单纯的LCD显示只用到写操作)。
第6脚:E:使能信号,当E端由高电平变为低电平时,液晶模块执行命令。
第7~14脚:D0-D7:8个数据I/O口(双向数据线)。
第15脚: BG_VCC、背光电源正极
第16脚:BG_GND、是背光电源负极。
LCD寄存器的选择 |
|||
E使能 |
R/W读写 |
RS |
功能说明 |
1 |
0 |
0 |
写入命令寄存器 |
1 |
0 |
1 |
写入数据寄存器 |
1 |
1 |
0 |
读写忙碌标志和RAM地址 |
1 |
1 |
1 |
读取RAM数据 |
0 |
X |
|
不动作 |
1.3、基本操作时序
1.4、液晶指令设置和初始化
1.4.1、显示模式设置
指令码(0x38) |
功能 |
|||||||
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
设置16x2显示,5x7点阵,8位数据接口 |
1.4.2、显示开关及光标设置:(初始化)
指令码 |
功能 |
||||||||
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
D=1 开显示 D=0关显示 C=1 显示光标 C=0不显示光标 B=1光标闪烁 B=0不闪烁 |
|
0 |
0 |
0 |
0 |
0 |
1 |
N |
S |
N=1(读或写一个字符后地址指针加1 &光标加1), N=0(读或写一个字符后地址指针减1 &光标减1), S=1 且 N=1 (当写一个字符后,整屏显示左移)(N=0右移)以得到光标不移动而屏幕移动的效果 s=0 当写一个字符后,整屏显示不移动
|
|
1.4.3、数据指针设置
指令码 |
功能 |
80H+地址码(0-27H,,, 40H-67H) |
设置数据地址指针 |
数据首地址为80H,
第一行0-27H,
第二行40H-67H(当第一行装不下时,就需要第二行,但是需要设置数据指针0x80+0x40)
1.4.4、其他设置
指令码 |
功能 |
01H |
显示清屏:1.数据指针清零 2.所有显示清零 |
02H |
显示回车:1.数据指针 |
1.4.5、显示地址
1602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址如下
显示字符 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
第一行 地址 |
00H |
01H |
02H |
03H |
04H |
05H |
06H |
07H |
08H |
09H |
0AH |
0BH |
0CH |
0DH |
0EH |
0FH |
第二行 地址 |
40H |
41H |
42H |
43H |
44H |
45H |
46H |
47H |
48H |
49H |
4AH |
4BH |
4CH |
4DH |
4EH |
4FH |
1.5、液晶储存器结构
2.1、程序一
显示:I like mcu!”; 和www.stu.com”;直接显示液晶上
#include
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P3^4;
sbt lcdrs=P3^5;
sbit dula=P2^7;
uchar code table[]=“I like mcu!”;
uchar code table1[]=“www.stu.com”;
uchar num;
void main()
{
int ()
for(num=0;num<11;num++)//利用循环调用数组显示
{
write_data(table[num]);//显示:I like mcu!
delay(20);
}
write_com(1);//清屏指令,上面的一行会显示出来后立刻消失
write_com(0x80+0x40+0x03);//设置数据指针,显示第二行! +0x03:表示向后移动三字符
for(num=0;num<13;num++)//利用循环调用数组显示
{
write_data(table1[num]);//显示: www.stu.com
delay(20);
}
//write_data(‘1’);//显示:1或者输入按照CGROM中对应的码
//delay(20);
//write_data(‘B’);//显示B
while(1)
}
void write_com(ucahr com)//写命令子函数
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(ucahr data)//写数据子函数
{
lcdrs =1;
P0=data;
delay (5);
lcden =1;
delay (5);
lcden =0;
}
void delay (unit z)//延迟函数
{
unit x, y;
for (x=z; x>0; x++)
for (y=110; y>0; y++)
}
void init ()//初始化函数
{
dula=0;
wela=0
lcden=0;
write_com(0x38);
write_com(.0x0e);
write_com(.0x06);
write_com(.0x01);
write_com(.0x80);
}
2.2、程序二
显示:从右侧平移到液晶上显示出来。
#include
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P3^4;
sbt lcdrs=P3^5;
sbit dula=P2^7;
uchar code table[]=“I like mcu!”;
uchar code table1[]=“www.stu.com”;
uchar num;
void main()
{
int ()
for(num=0;num<11;num++)//利用循环调用数组显示
{
write_data(table[num]);//显示:I like mcu!
delay(20);
}
write_com(0x80+0x53);//设置数据指针,指定写入位置!!!显示第二行! +0x53:第二行从53那个字符开始写入。
for(num=0;num<13;num++)//利用循环调用数组写入字符
{
write_data(table1[num]);//显示: www.stu.com字符
delay(20);
}
for(num=0;num<16;num++)//左移动循环
{
write_com(0x18);//左移指令0x18 0001 1000
delay(200);
}
//write_data(‘1’);//显示:1或者输入按照CGROM中对应的码
//delay(20);
//write_data(‘B’);//显示B
while(1)
}
void write_com(ucahr com)//写命令子函数
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(ucahr data)//写数据子函数
{
lcdrs =1;
P0=data;
delay (5);
lcden =1;
delay (5);
lcden =0;
}
void delay (unit z)//延迟函数
{
unit x, y;
for (x=z; x>0; x++)
for (y=110; y>0; y++)
}
void init ()//初始化函数
{
dula=0;
wela=0
lcden=0;
write_com(0x38);
write_com(.0x0e);
write_com(.0x06);
write_com(.0x01);
write_com(.0x80);
}
1、写命令子函数
2、写数据子函数
3、初始化子函数
4、main第一行,第二行显示,移动