LCD1602编程思维
1、1602是干什么的?
显示用的要显示什么?
这时候你就得将定义一个数组,将想显示的东西放上去,那么到底是用双引号还是用{}呢?
这里用uchar code dis1[]="I LOVE ZERO";如果这个不懂是时候该去补补C语言了
也可以用uchar code dis1[]={I LOVE ZERO};
2、已经有数组了,那么如何送入LCD显示?
在main()里写
for(i=0;i<11;i++) //有x个字符 i就<x ,不然会乱码
{
//你要将这个数据显示到LCD1602的第几行呢?所以前面得加wcmd(0x80);
wdat(dis1[i]);
}
上面有个将数据送入1602
也就是写数据到LCD1602,如果这里不会的话?那也就是LCD1602写数据时序没看懂,这时候就得去寻找资料,这时候你需要写个写数据的子程序了
void wdat(uchar dat)
{ //对应这时序图写,如果看不懂时序图就需要去深入了解根据时序图写程序了
rs=1;
rw=0;
ep=0;
P0=dat; //将LCD的D0-D7与P0相接
ms(1);
ep=1;
ep=0;
ms(6); //不加延时, 字符显示过快 无法看见光标闪烁等。。。。
}这里补出程序
但是为什么要这样写呢?就算看了时序图也不懂如何转化为程序?说明你理解的不够透。
在上面用了rs,rw,ep 那就需要写
sbit rs = P2^6; //复位端
sbit rw = P2^5; //写数据端 rw可以硬件置0
sbit ep = P2^7; //使能端
也用了局部变量i 和j uchar i,j;
这里用了uchar
就要定义#define uchar unsigned char
3、这样是否就可以用了么?你看写数据都弄好了!
不行,因为单片机不知道你将数据送到哪,也就是你得让单片机知道你用1602
也就是LCD初始化
wcmd(0x01); //清屏 16*2显示,5*7点阵,8位数据
wcmd(0x06); //光标右滚动
wcmd(0x0c);
wcmd(0x38); //数据8位 双行显示 5*10点
wcmd(0x0f); //显示光标,字符闪烁 0x0e显示关标,字符不闪烁 ox08都不显示
这里不会,你就得看指令表了
这时候你需要写个写命令的子程序了
void wcmd(uchar cmd)
{
rs=0;
rw=0;
ep=0;
P0 = cmd;
ep=1;
ep=0;
ms(10);
}
4、现在一切都好了?不 你看 还漏了什么 ms();也就是延时函数
也就是需要延时函数的子程序