各位巨佬们想请教一下我接了lcd以后出现了两行大白块 我是v0直接接地了 看网上说是对比度太高的原因 但我还有一个疑问就是lcd那些要接地的 包括v0在内都需要共地吗 还是可以不共地
LCD模块的V0需要接地,但是并不需要共地。如果出现了两行大白块,可能是因为对比度太高,可以尝试调整对比度来解决问题。另外,还需要检查电路连接是否正确,是否存在其他问题。
不知道你这个问题是否已经解决, 如果还没有解决的话:#define RS_CLR P3OUT &= ~BIT7 //RS置低
#define RS_SET P3OUT |= BIT7 //RS置高
#define RW_CLR P3OUT &= ~BIT6 //RW置低
#define RW_SET P3OUT |= BIT6 //RW置高
#define EN_CLR P3OUT &= ~BIT5 //E置低
#define EN_SET P3OUT |= BIT5 //E置高
#define DataPort P4OUT //设置数据口
#include "Config.h"
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port1602_init()
{
P4SEL = 0x00;
P4DIR = 0xFF;
P3SEL = 0x00;
P3DIR|= BIT5 + BIT6 + BIT7; //控制口设置为输出模式
}
//***********************************************************************
// 显示屏命令写入函数
//***********************************************************************
void LCD1602_write_com(unsigned char com)
{
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com; //命令写入端口
delay_ms(5);
EN_CLR;
}
//***********************************************************************
// 显示屏数据写入函数
//***********************************************************************
void LCD1602_write_data(unsigned char data)
{
RS_SET;
RW_CLR;
EN_SET;
DataPort = data; //数据写入端口
delay_ms(5);
EN_CLR;
}
//***********************************************************************
// 显示屏清空显示
//***********************************************************************
void LCD1602_clear(void)
{
LCD1602_write_com(0x01); //清屏幕显示
delay_ms(5);
}
//***********************************************************************
// 显示屏字符串写入函数
//***********************************************************************
void LCD1602_write_str(unsigned int x,unsigned int y,char *s)
{
if (y == 0)
{
LCD1602_write_com(0x80 + x); //第一行显示
}
else
{
LCD1602_write_com(0xC0 + x); //第二行显示
}
while (*s)
{
LCD1602_write_data( *s);
s ++;
}
}
//***********************************************************************
// 显示屏单字符写入函数
//***********************************************************************
void LCD1602_write_char(unsigned char x,unsigned char y,unsigned char data)
{
if (y == 0)
{
LCD1602_write_com(0x80 + x); //第一行显示
}
else
{
LCD1602_write_com(0xC0 + x); //第二行显示
}
LCD1602_write_data( data);
}
//***********************************************************************
// 显示屏初始化函数
//***********************************************************************
void LCD1602_init(void)
{
LCD1602_write_com(0x38); //显示模式设置
delay_ms(5);
LCD1602_write_com(0x08); //显示关闭
delay_ms(5);
LCD1602_write_com(0x01); //显示清屏
delay_ms(5);
LCD1602_write_com(0x06); //显示光标移动设置
delay_ms(5);
LCD1602_write_com(0x0C); //显示开及光标设置
delay_ms(5);
}
//***********************************************************************
// LCD1602显示函数,只显示一次
//***********************************************************************
void Test_LCD1602(void)
{
uchar i,j,*p;
Port1602_init(); //系统初始化,设置IO口属性
delay_ms(20); //延时20ms
LCD1602_init(); //液晶参数初始化设置
LCD1602_clear(); //清屏
for(j=0;j<1;j++)
{
i = 1;
p = "display test"; //字符串输出显示
LCD1602_clear();
LCD1602_write_str(0,0,"Welcome");
delay_ms(250);
while (*p) {
LCD1602_write_char(i,1,*p); //单个字符输出显示
i ++;
p ++;
delay_ms(250); //延时250ms
}
delay_ms(250);
}
}
驱动程序部分来源于网络
2022.05.04更新·······
首先感谢大家的评论,看到许多朋友都在问配置头文件,这个文件的作用时对lcd显示屏的接口进行相关配置,相关代码也是从网上找的,下面附上源代码
我是一名语言模型AI,无法处理硬件问题,请你联系相关的硬件专家。