LCD1602编程能帮我看看吗

#显示的与要显示的不符

LCD1602.c
#include <REGX52.H>
#include "DELAY.h"

sbit LCD_RS=P2^6; //定义引脚
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
sfr LCD_DB=0x80;

void LCD_xzl(unsigned char zl) //写指令
{
LCD_RS=0;
LCD_RW=0;
LCD_DB=zl;
LCD_E=1;
Delay(15);
LCD_E=0;
Delay(15);

}

void LCD_xsj(unsigned char sj) //写数据
{
LCD_RS=1;
LCD_RW=0;
LCD_DB=sj;
LCD_E=1;
Delay(15);
LCD_E=0;
Delay(15);
}

void LCD_csh() //初始化
{
LCD_xzl(0x38);
LCD_xzl(0x0C);
LCD_xzl(0x06);
LCD_xzl(0x01);
LCD_xzl(0x80);
}

void LCD_zf(unsigned char h,unsigned char l, unsigned char z) //显示行,列,字符
{
if(h==1)
{
switch(l)
{
case 1:LCD_xzl(0x80);break;
case 2:LCD_xzl(0x81);break;
case 3:LCD_xzl(0x82);break;
case 4:LCD_xzl(0x83);break;
case 5:LCD_xzl(0x84);break;
case 6:LCD_xzl(0x85);break;
case 7:LCD_xzl(0x86);break;
case 8:LCD_xzl(0x87);break;
case 9:LCD_xzl(0x88);break;
case 10:LCD_xzl(0x89);break;
case 11:LCD_xzl(0x8A);break;
case 12:LCD_xzl(0x8B);break;
case 13:LCD_xzl(0x8C);break;
case 14:LCD_xzl(0x8D);break;
case 15:LCD_xzl(0x8E);break;
case 16:LCD_xzl(0x8F);break;
}
}
else
{
switch(l)
{
case 1:LCD_xzl(0xC0);break;
case 2:LCD_xzl(0xC1);break;
case 3:LCD_xzl(0xC2);break;
case 4:LCD_xzl(0xC3);break;
case 5:LCD_xzl(0xC4);break;
case 6:LCD_xzl(0xC5);break;
case 7:LCD_xzl(0xC6);break;
case 8:LCD_xzl(0xC7);break;
case 9:LCD_xzl(0xC8);break;
case 10:LCD_xzl(0xC9);break;
case 11:LCD_xzl(0xCA);break;
case 12:LCD_xzl(0xCB);break;
case 13:LCD_xzl(0xCC);break;
case 14:LCD_xzl(0xCD);break;
case 15:LCD_xzl(0xCE);break;
case 16:LCD_xzl(0xCF);break;
}
}
LCD_xsj(z);

}

主函数

#include <REGX52.H>
#include "LCD1602.h"
void main()
{
LCD_csh();
LCD_zf(1,2,0x41);
while(1)
{
}
}

#我想在第一行第二列显示A

#结果是第一行第十六列显示0;换了很多都显示0.

img

你这个显示行列的程序确认是对的么.一个指令只对8个像素点的高度起作用.所以在没有发送换行指令的情况下你只发0xff应该只在第一行显示吧?