仿真软件proteus构建LCD1602四线驱动实验
Posted luffy5459
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仿真软件proteus构建LCD1602四线驱动实验相关的知识,希望对你有一定的参考价值。
默认的LCD1602都是8线驱动,数据口D0~D7都要接线,这种方式对于写数据而言,很方便,不需要考虑太多。但是因为要的数据线过多,在实际布线过程中,可能会考虑使用四线驱动。
因为少了4根线,原来的11根线,现在只需要7根就可以了。
proteus电路设计与实验效果:
源代码:
#include <reg52.h>
#include <stdio.h>
#include <string.h>
unsigned char code table1[] = "hello,world.";
unsigned char code table2[] = "0123456789";
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
void delay(unsigned int n)
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=0;j<110;j++);
void writecmd(unsigned char command)
RS = 0;
RW = 0;
P3 = command;
EN = 1;
delay(2);
EN = 0;
RS = 0;
RW = 0;
P3 = command << 4;
EN = 1;
delay(2);
EN = 0;
void writedata(unsigned char dat)
RS = 1;
RW = 0;
P3 = dat;
EN = 1;
delay(2);
EN = 0;
RS = 1;
RW = 0;
P3 = dat << 4;
EN = 1;
delay(2);
EN = 0;
void display(unsigned int len,unsigned char *s)
unsigned int i;
for(i=0;i<len;i++)
writedata(s[i]);
void init_1602(void)
delay(50);
writecmd(0x33);//原来1602初始化成4位数据线之前必需先初始化成8位(此时命令发送方式是8位格式,但数据线只需接4位)
writecmd(0x32);//然后再改到4位线宽,这样初始化才稳定
writecmd(0x28);//四线模式设置
writecmd(0x0c);//显示开--对应开关显示控制指令
writecmd(0x01);
delay(30);
void main(void)
init_1602();
writecmd(0x80);
display(strlen(table1),table1);
writecmd(0xc0);
display(strlen(table2),table2);
while(1);
需要注意的是,四线接法,虽然代码上与八线接法很多雷同的地方,但是仍然需要注意,这里四线接法在初始化的时候:
writecmd(0x33);
writecmd(0x32);
writecmd(0x28);
这几个很关键,尤其是0x28是设置四线模式,但是前面几项0x33,0x32是先设置八线模式,然后切换到四线模式,这一步最最关键,往往很多资料上都没有提,我经过很多次试验,发现这两句代码太关键了。
四线模式写指令和数据的时候,需要先写高四位,再写低四位,所以代码上有这样的地方:
P3 = command;
...
P3 = command << 4;
注意了这两块,四线模式就很容易了。
在很多地方提到,四线模式,需要RW接地,其实从代码和试验结果来看,并不是一定要RW接地。
///
按照四线驱动的仿真实验理论,我通过自己的普中-2单片机成功接线并让LCD1602显示了结果。实验现象如下所示:
唯一的缺点就是,显示屏不太亮,我根据仿真实验接线,VDD接到了开发板上的5v电源,效果就这样,但是可以大概看出来,字母和数字显示没问题。
这个接线完全按照仿真实验接线,包括VSS,VDD,VO 都需要接线,VSS,VO需要接地。VDD接电源。
以上是关于仿真软件proteus构建LCD1602四线驱动实验的主要内容,如果未能解决你的问题,请参考以下文章
Proteus仿真51单片机+LCD1602驱动显示模板程序
Proteus仿真51单片机+LCD1602+74HC164驱动显示