LCD1602只显一排黑块,求大佬帮忙解答谢谢。

Proteus 仿真是可以显示的,但是实物上就显示不了了。第一排显示黑块,第二排没有东西显示。求大佬帮忙解答~
实物图,原理图,仿真图,代码 如下:
原理图1
原理图2在这里插入图片描述在这里插入图片描述
这是代码:

#include <reg52.h>   
#include "intrins.h"						 
#include <stdio.h>
 
#define LCD1602_DB P0
  
sbit LCD1602_RS = P2^0; //LCD1602 显示
sbit LCD1602_RW = P2^1; //LCD1602 显示
sbit LCD1602_E = P2^2;  //LCD1602 显示
 
void InitLcd1602();
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);  
void LcdShowStr_data(unsigned char x, unsigned char y, unsigned char s);  
 
void main (void)
{ 
	InitLcd1602();
	LcdShowStr(0, 0, "0123456789ABCDEF"); 
	LcdShowStr(0, 1, "0123456789ABCDEF"); 
	while(1);
}

/* 等待液晶准备好 */
void LcdWaitReady()
{
	unsigned char sta;
	LCD1602_DB = 0xFF;
	LCD1602_RS = 0;
	LCD1602_RW = 1;
	do 
	{
		LCD1602_E = 1;
		sta = LCD1602_DB; //读取状态字
		LCD1602_E = 0;
	}
	while (sta & 0x80); //bit7 等于1表示液晶正忙,重复检测直到其等于0为止
}

/* 向LCD1602 写入一字节命令,cmd-待写入命令值 */
void LcdWriteCmd(unsigned char cmd)
{
	LcdWaitReady();
	LCD1602_RS = 0;
	LCD1602_RW = 0;
	LCD1602_DB = cmd;
	LCD1602_E = 1;
	LCD1602_E = 0;
}

/* 向 LCD1602 写入一字节数据,dat-写入数据值 */
void LcdWriteDat(unsigned char dat)
{
	LcdWaitReady();
	LCD1602_RS = 1;
	LCD1602_RW = 0;
	LCD1602_DB = dat;
	LCD1602_E = 1;
	LCD1602_E = 0;
}


/* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */
void LcdSetCursor(unsigned char x, unsigned char y)
{
	unsigned char addr;
	if (y == 0)
	{ //由输入的屏幕坐标计算显示 RAM 的地址
	  addr = 0x00 + x; //第一行字符从 0x00 起始
	}
	else
	{	
	  addr = 0x40 + x; //第二行字符从 0x40 起始
	}
	LcdWriteCmd(addr | 0x80); //设置 RAM 地址
}

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
	LcdSetCursor(x, y); //设置起始地址
	while (*str != '\0')
	{ //连续写入字符串数据,直到检测到结束符
	  LcdWriteDat(*str++); // 连续写入字符串数据,然后str自加 1
   }
}


void LcdShowStr_data(unsigned char x, unsigned char y, unsigned char s)
{
	LcdSetCursor(x, y); //设置起始地址
	LcdWriteDat('0'+s);  
}

 
/* 初始化1602液晶 */
void InitLcd1602()
{
	LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口
	LcdWriteCmd(0x0C); //显示器开,光标关闭
	LcdWriteCmd(0x06); //文字不动,地址自动加 1
	LcdWriteCmd(0x01); //清屏
} 

  


  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值