总结资料1602显示方法Word格式.docx
《总结资料1602显示方法Word格式.docx》由会员分享,可在线阅读,更多相关《总结资料1602显示方法Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
/*程序中没有用到忙检测,而是用的是延时函数来替代忙检测*/
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]="
LCD1602A"
;
//要显示的内容1放入table
ucharcodetable1[]="
zhengzhibin"
//要显示的内容放入table1
sbitrs=P0^7;
//数据、指令选择控制线
sbitrw=P0^6;
//读写信号控制线
sbiten=P0^5;
//使能信号端
voiddelay(uinta)//延时函数
{
ucharb;
while(a--)
{
for(b=5000;
b>
0;
b--);
}
}
voidlcd_wcom(ucharcom)//写指令函数
rs=0;
//选择指令寄存器
rw=0;
//选择写操作
P2=com;
//把指令送入P2口
delay(100);
//延时一小会,让1602准备接受数据
en=1;
//使用端电平变化,把指令送入1602
en=0;
voidlcd_wdat(uchardat)//写数据函数
rs=1;
//选择数据寄存器
P2=dat;
//把要显示的数据送入P2口
//使用端电平变化,把数据送入1602
voidlcd_init()//1602初始化
lcd_wcom(0x38);
//选择8位数据总线,双列显示,5*7字形
lcd_wcom(0x0c);
//开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06);
//显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01);
//清屏
voidmain()//主函数
ucharn,m;
lcd_init();
//初始化
lcd_wcom(0x80+0x04);
//显示地址设为84H,上排第4位
for(n=0;
n<
9;
n++)//将table[]中的数据依次写入1602显示
lcd_wdat(table[n]);
delay(100);
lcd_wcom(0x80+0x42);
//重新设定显示地址为0xc4,即下排第3位
for(m=0;
m<
12;
m++)//将table1[]中的数据依次写入1602显示
lcd_wdat(table1[m]);
while
(1);
二.滚动的显示方法:
之前设定步骤一样,只是在某些指令做更改,如果要使字符向右或向左滚动的话,在初始化中的第三指令(进入模式设置指令)要根据实际情况做更改调整。
然后在完整的程序后添加一个指令函数,就是添加(设定显示屏或光标移动方向指令)使产生滚动效果。
添加指令为:
设定显示屏或光标移动方向指令
1.如果要显现显示屏整体右移就是滚动效果,如果没把初始化函数中的第三条(进入模式设置指令)指令做更改调整,显示效果会变成开始没滚动效果,等所有字符都显示出来后,才整体的向右移,产生滚动效果。
就是把第三指令改为(写入新数据后显示屏整体右移1个字)。
然后在完整的程序中主函数中最后面添加一个(设定显示屏或光标移动方向指令)指令,就可以显示向右滚动的效果了。
2.如果要显示向左滚动的效果,在之前初始化函数中的第三条(进入模式设置指令)指令中选择(写入新数据后显示屏不移动)指令,然后在完整的程序中主函数中最后面添加一个(设定显示屏或光标移动方向指令)指令,就可以显示向右滚动的效果了。
向右滚动程序:
ucharb,c;
b--)
for(c=5000;
c>
c--);
delay
(1);
lcd_wcom(0x07);
//光标右移,显示屏整体右移
ucharn,m,d;
while
(1)
lcd_wcom(0x80);
delay
(1);
lcd_wcom(0x80+0x40);
}
for(d=0;
d<
37;
d++)(添加滚动的指令)
lcd_wcom(0x1c);
//显示器上字符全部右移一格,但光标不动
delay(50);
向左滚动的程序:
lcd_wcom(0x04);
//光标左移,显示屏不移动
lcd_wcom(0x80+0x0f);
lcd_wcom(0x80+0x4f);
d++)(添加滚动的指令)
lcd_wcom(0x18);
//显示器上字符全部左移一格,但光标不动
三.任意字符显示:
1602中内部有个存储器CGROM;
CGRAM中有一个可以供用户自义定的CGRAM,我们从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。
它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零。
因此CGRAM的字符码只有最后三位能用也就是8个字节了。
等效为0000X111,X为无效位,最后三位为000-111共8个。
就可以显示这8个用户自定义的字符了。
可以显示任意字符图案。
(其实1602每个显示格是由5*7或5*10的点阵显示的,所以可以自己定义什么图案或者字符,然后依次写出显示图案或字符的代码,就可以显示了)。
具体方法就是在程序主函数中初始化LCD后写个写个设定CGRAM的地址的指令,然后利用(CGRAM或DDRAM读出数据的指令)指令在将代码写入CGRAM中,在设定显示位置,然后显示,就可以了。
指令:
显示任意字符程序:
(在0x4f的地方显示字母C)
从这个指令可以看出指令数据的高2位已固定是01,只有后面的6位是地址数据,而这6位中的高3位就表示这八个自定义字符,最后的3位就是字模数据的八个地址了。
例如第一个自定义字符的字模地址为01000000-01000111八个地址。
我们向这8个字节写入字模数据,让它能显示出“℃”
ucharcodetable[]=
0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00//字符C字
};
for(b=500;
for(c=500;
lcd_wcom(0x40);
//设定CGRAM地址(地址从指令表中看出(CGRAM或DDRAM读出数据的指令))
8;
n++)//将C字代码写入CGRAM中
//设置C字的位置
1;
m++)
lcd_wdat(m);
多个自定义字符的写法:
利用CGRAM内置8个寄存器
CGRAM地址:
01000000 0x40
首地址,代表字模数据从第一行开放入
01000001 0x41 从第二行开始,上一行空出来
01000010 0x42
01000011
0x43
01000100 0x44
01000101
0x45
01000110 0x4601000111 0x47
lcd_wcom(0x80);
//设置字符显示位置
第一行第一个位置
③设置显示地址,然后发送数据
lcd_wdat(0x00);
//给1602发送字符数据
显示℃
lcd_wcom(0x81);
lcd_wdat(0x01);
//
显示"
一"
lcd_wcom(0x82);
lcd_wdat(0x02);
//显示"
二"
四.显示CGROM寄存器中的字符:
CGROM寄存器表中的每个字符都有着自己的地址
显示出字符的方法就是在程序里主函数里,LCD初始化后,写显示位置指令,然后直接在数据函数中写字符地址就可以了。
显示CGROM寄存器中的字符程序:
ucharn;
n++)
lcd_wdat(0x41);
//在CGROM寄存器中41H是A的代码