问题遇到的现象和发生背景
关于51单片机驱动LM041L的LCD面板
控制列时没有问题,但是控制行时只能显示第一行
上网查询之后说需要调用两次0x38,但是还是不行
用代码块功能插入代码,请勿粘贴截图
//main.c
#include "REGX52.H"
#include "LCDLM041L.h"
void main(){
LCD_Init();
LCD_ShowChar(2,6,'B');
while(1){
}
}
//lm041l.c
#include "REGX52.H"
#include "LCDLM041L.h"
sbit LCD_RS=P3^5 ;
sbit LCD_RW=P3^6 ;
sbit LCD_E=P3^7 ;
#define LCD_DataPort P0
//-----------------
//写延迟函数
//-----------------
void LCD_Delay(){ //12MHz 1ms
unsigned char i,j;
i = 2;
j = 239;
do
{
while (--j);
}while(--i);
}
//-----------------
//写命令
//-----------------
void LCD_WriteCommand(unsigned char Command){
LCD_RS = 0;
LCD_RW = 0;
LCD_DataPort = Command;
//因为传输时序 需要延时一段时间
LCD_E = 1;
LCD_Delay();
LCD_E = 0;
LCD_Delay();
}
//-----------------
//写数据?
//-----------------
void LCD_WriteData(unsigned char Data){
LCD_RS = 1;
LCD_RW = 0;
LCD_DataPort = Data;
//因为传输时序 需要延时一段时间
LCD_E = 1;
LCD_Delay();
LCD_E = 0;
LCD_Delay();
}
//-----------------
//LCD初始化
//-----------------
void LCD_Init(void){
LCD_WriteCommand(0x38);
LCD_WriteCommand(0x0c);
LCD_WriteCommand(0x06);
LCD_WriteCommand(0x01);
LCD_WriteCommand(0x38);
}
//-----------------
//显示字符
//-----------------
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char){
if(Line = 1){
LCD_WriteCommand(0x80|(Column-1));//第一行
}
else if(Line = 2){
LCD_WriteCommand(0x80|(Column-1)+0x40);//第二行
}
else if(Line = 3){
LCD_WriteCommand(0x80|(Column-1)+0x90);//第三行
}
else if(Line = 4){
LCD_WriteCommand(0x80|(Column-1)+0xD0);//第四行
}
LCD_WriteData(Char);
}
//lm041l.h
#ifndef __LCD_H
#define __LCD_H
#include "REGX52.H"
void LCD_Init();
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char);
#endif
运行结果及报错内容
只能显示第一行,代码修改之后 第二第三第四行都不能显示
我的解答思路和尝试过的方法
重复调用过0x38,但是没效果
我想要达到的结果
第二第三第四行都能显示