单片机怎样驱动LCD呢,具体程序好,奖励大快急用
发布网友
发布时间:2022-12-26 18:29
我来回答
共3个回答
热心网友
时间:2023-10-16 18:03
/*
必要操作:正确连接1602
*/
#include<reg51.h>
#define uint unsigned int //定义常用数据类型替代码
#define uchar unsigned char
#define dat P0 //定义LCD1602的数据口为P0
sbit rs=P1^0; //定义RS口为P10
sbit rw=P1^1; //定义RW口为P11
sbit e=P1^2; //定义E口为P12
uchar busy; //1602判忙标志
void delay_1ms(void); //延时程序
void display(void); //显示程序
void busy_1602(void); //液晶查忙程序
void shj_1602(uchar a); //液晶写数据程序
void int_1602(void); //液晶初始化
void zhl_1602(uchar a); //液晶写指令程序
void main(void) //主程序开始
{
for(;;)
{
display(); //在大循环内调用显示函数,一直显示
}
}
void delay_1ms(void) //延时程序
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<20;j++);
}
void display(void) //液晶显示程序
{
uchar i; //定义计数值
uchar table0[16]={"Hello bin MCU! "}; //定义LCD1602显示2行的字符
uchar table1[16]={"--chen qi bin "};
int_1602(); //初始化1602
zhl_1602(0x80); //写指令
for(i=0;i<16;i++) //发送数据第一行
{
shj_1602(table0[i]);
}
zhl_1602(0xc0);
for(i=0;i<16;i++) //发送数据第二行
{
shj_1602(table1[i]);
}
}
void busy_1602(void) //查询忙碌标志信号程序
{
do
{
e=0;
rw=1;//高电平读操作
rs=0;//指令
e=1;
busy=dat;
e=0;
delay_1ms();
} while(busy&&0x10==1); //忙就一直读,此读忙是读的DB7 do while 用法是当while里面成立时就一直do
}
void zhl_1602(uchar a) //写指令到LCM程序 写数据写指令前都需要查忙
{
busy_1602();
e=0;
rw=0;
rs=0;
e=1;
dat=a; //e=1变为e=0下降沿写入
e=0;
}
void shj_1602(uchar a) //写数据到LCM程序 LCM为液晶显示模块
{
busy_1602();
e=0;
rw=0;//低电平写操作
rs=1;//数据
e=1;
dat=a;
e=0;
}
void int_1602(void) //启动LCM程序 初始化LCD
{
zhl_1602(0x38); //显示模式设置
zhl_1602(0x0c); //显示开关光标设置
zhl_1602(0x06);
}
热心网友
时间:2023-10-16 18:04
这是一个仿真实例,供参考,里面还有一个简单的 LCD1602 显示的仿真实例。
热心网友
时间:2023-10-16 18:04
不知道你想驱动什么lcd这里是1602的驱动!
你看看是不是你需要的!