首先打开proteus如图导入元器件并连线。
接下来编写c程序
#include"reg51.h"
sbit RS = P3^0; // lcd的RS连接的是P3.0口
sbit RW = P3^1; // lcd的RW连接的是P3.1口
sbit E = P3^2; // lcd的E连接的是P3.2口
unsigned char str[]={"Hello Word!"}; // 要显示的字符串
//延时子函数
void delay_ms(unsigned int t){
unsigned int i=0, j=0;
for(i=0; i<t; i++){
for(j=0; j<120; j++);
}
}
// 写数据子函数
void writedat(unsigned char dat){
RS = 1; // 写时序图中的第一行RS为高电平写数据
RW = 0; // 写时序图中的第二行RW
E = 0; // 写时序图中的第三行E
P2 = dat; // 看时序图中E为0的时候就把数据放到接口里面了(这里我们定的接口是P2)
delay_ms(5); // 这个延时很重要,没有显示不了
E = 1; // 写时序图中的第三行E,写数据时拉高电平。
E = 0; // 写时序图中的第三行E,写完数据拉低电平。
}
// 写命令子函数
void writecom(unsigned char com){
RS = 0; // 写时序图中的第一行RS为低电平写命令
RW = 0; // 写时序图中的第二行RW
E = 0; // 写时序图中的第三行E
P2 = com; // 看时序图中E为0的时候就把数据放到接口里面了(这里我们定的接口是P2)
delay_ms(5); // 这个延时很重要,没有显示不了
E = 1; // 写时序图中的第三行E,写命令时拉高电平。
E = 0; // 写时序图中的第三行E,写完命令拉低电平。
}
// 初始化lcd子函数
void initlcd(){
writecom(0x38); // 设置16X2显示,5X7点阵, 8位数据接口
writecom(0x0c); // 设置开显示,不显示光标
writecom(0x06); // 写一个字符后地址指针加1
writecom(0x01); // 显示清0, 数据指针清0.
}
// lcd的显示子函数
void display(){
unsigned int i=0; // 定义无符号整型i=0,给后面的循环用
writecom(0x80); // 调用写命令子函数, 从第一行第一位开始写
delay_ms(10); // 等待5ms
// writedat('A');
// delay_ms(10);
// writedat('X');
// delay_ms(5);
// writedat(0x31); // 写入1的ASCII码,也是可以的。
// delay_ms(5);
while(str[i]!='\0'){ // 判断是不是字符串的最后一位,是的话就结束循环了
writedat(str[i]); // 写入字符串的第i位
i++; // i自加1
delay_ms(5); // 延时5ms
}
}
void main(){
initlcd();
while(1){
display();
}
}
这里把写数据的过程通过时序图的方式展示一下
然后编译成hex文件,导入proteus中,LCD1602就显示了我们要显示的字符串了。