//单片机驱动1602液晶显示的的仿真,可以参考一下。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit E=P3^2;
sbit RW=P3^3;
sbit RS=P3^4;
void delay() //延时函数
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
bit Busy(void)
{
bit busy_flag = 0;
RS = 0;
RW = 1;
E = 1;
delay();
busy_flag = (bit)(P1 & 0x80);
E = 0;
return busy_flag;
}
void wcmd(uchar del)
{
while(Busy());
RS = 0;
RW = 0;
E = 0;
delay();
P1 = del;
delay();
E = 1;
delay();
E = 0;
}
void wdata(uchar del)
{
while(Busy());
RS = 1;
RW = 0;
E = 0;
delay();
P1 = del;
delay();
E = 1;
delay();
E = 0;
}
void L1602_init(void)
{
wcmd(0x38);//设置16*2显示,5*7点阵,8位数据口
wcmd(0x0c);
wcmd(0x06);
wcmd(0x01);
}
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
wcmd(a);
wdata(sign);
}
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a,b=0;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
while(1)
{
wcmd(a++);
b++;
if((*p == '\0')||(b==16)) break;
wdata(*p);
p++;
}
}
void Main()
{
L1602_init();
L1602_string(1,1,"0123456789 ");
L1602_string(2,1," ABCDEFGHIJ ");
L1602_char(2,15,'O');
L1602_char(2,16,'K');
while(1);
}
你所说的屏幕亮应该是屏幕的上一行显示全黑方块。如果是这样的话,证明你的LCD驱动程序有问题或是初始化不对。能看到黑快证明对比度电压正常。
屏幕亮只是打开了背光灯,也就是开了显示而已,能否显示信息,还要看你具体的控制程序。从接线来说,如果E有效,就会点亮LCD,RS、RW如果接线有错,照样显示不出来东西的。另外对比度如果调整不好,也无法显示出来字符。
屏幕亮只是说明LCD上电了而已,不显示数字就说明你的程序运行有问题了,具体的要看你的代码了,1602主要的就是对他的初始化的几个设置,然后在指定位置显示字符就可以了。
肯定程序不对了,程序编写正确并且编译通过再下载到芯片里运行起来,就能驱动1602显示要显示的内容。