1602液晶显示的单片机为什么屏幕亮但不显示数字

2024年12月02日 05:19
有5个网友回答
网友(1):

//单片机驱动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);

}

网友(2):

你所说的屏幕亮应该是屏幕的上一行显示全黑方块。如果是这样的话,证明你的LCD驱动程序有问题或是初始化不对。能看到黑快证明对比度电压正常。

网友(3):

屏幕亮只是打开了背光灯,也就是开了显示而已,能否显示信息,还要看你具体的控制程序。从接线来说,如果E有效,就会点亮LCD,RS、RW如果接线有错,照样显示不出来东西的。另外对比度如果调整不好,也无法显示出来字符。

网友(4):

屏幕亮只是说明LCD上电了而已,不显示数字就说明你的程序运行有问题了,具体的要看你的代码了,1602主要的就是对他的初始化的几个设置,然后在指定位置显示字符就可以了。

网友(5):

肯定程序不对了,程序编写正确并且编译通过再下载到芯片里运行起来,就能驱动1602显示要显示的内容。