首先,给出1602的Proteus中的连线图,如下:
说明:
1.Proteus里面的1602液晶显示的元件名是:LM016L(在元件查找里面可以找到)这个元件不要进行什么设置,只要按要求连线
2.数据端口D0-D7我是与51单片机I/O口中4个中的一个连接(这里我是和P0口连接的),为了看起来很清晰,我使用了公共端连线方式,连在一起的线,公共端同名(在线上右键选Place Wire lable放置公共端名)。
3.RS是 数据和命令的选择 端,RW我直接接地了,我不进行数据的读取,我只进行写数据(通过用延时函数来跳过读写检查)。
显示初始化函数init()
1.液晶显示使能端E清零(因为上电默认是高电平,所以开始要清零)
1.显示模式设置:com(0x38);38是以2行16字的5*7的点阵方式显示
2.显示开关:com(0x0f);0f是开显示,且开光标闪烁
0e开显示,且开光标,光标不闪烁
0c只是开显示
3.显示模式设置:com(0x06);06屏幕不移动显示(静态屏幕显示)
05整屏右移(效果我没用出来)
07整屏左移(效果我没用出来)
4.清屏:com(0x01);01显示清屏,数据指针也清屏
void
init()
{
en=0;
write_com(0x38);//显示设置
write_com(0x0f);//显示开关
write_com(0x06);//屏幕不移动
write_com(0x01);//清屏
}
写数据子函数date()
void date(uchar
dat)
{
rs=1;
delay(1);
P0=dat;
delay(1);
en=1;
delay(1);
en=0;
delay(1);
}
写命令自函数com()
void com(uchar
com)
{
rs=0;
delay(1);
P0=com;
delay(1);
en=1;
delay(1);
en=0;
delay(1);
}
主函数
void main()
{
init();
com(要输入的命令的16进制码);
date('要输入的字符')
}
常见问题:
1.实物的1602液晶显示和Proteus的LM016L有什么区别:
答:LM016L液晶显示的主控芯片是HD44780,如果实物1602芯片的主控芯片也是HD44780或HD44780芯片兼容的1602液晶显示,那么可以说基本上LM016L等价于1602了,但是细微的具体命令控制上可能有细微差别。
就我目前发现了一个差别,就是屏幕移动的问题
命令代码 1602 LM016L
0x18 字符逐列左移字符逐列右移
0x1c 字符逐列右移 字符逐列左移
使用方法:
for(i=0;i<16;i++)把列
逐个的往左或右移动了16次
{
com(0x1c);在实物1602右移,在Proteus是左移
delay(20);
}
参考完整代码下载地址(代码是实现了2行i like MCU的左移,可在Proteus下仿真)
CSDN:http://download.csdn.net/source/1948231
1602/LM016L液晶显示的使用手册(一篇中文,一篇英文)
CSDN下载地址: http://download.csdn.net/source/1948273
上一篇:51单片机中XTYBE的使用及外围设备扩展地址编址的方法
下一篇:Proteus通过虚拟串口程序仿真51单片机串口的实现
推荐阅读最新更新时间:2024-03-16 15:32