×
单片机 > 单片机程序设计 > 详情

Proteus中1602液晶显示的仿真实例

发布时间:2020-06-03 发布时间:
|

 首先,给出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液晶显示的使用手册(一篇中文,一篇英文)




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法