最近用一块 hj1602液晶 ,字符显示没问题,不过想用几个自定义字符,一直不对劲,不是显示空白就是乱码,一气之下把64B cgram全部写满,还是显示空白。
程序如下
void LCD_Initial() //初始化1602
{
LcdEn=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_Write(LCD_COMMAND,0x38);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_Write(LCD_COMMAND,0x08); //开启显示, 无光?
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_Write(LCD_COMMAND,0x01 ); //清屏
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_Write(LCD_COMMAND,0x06 ); //AC递增, 画面不动
}
void LCD_cgram(uchar add,const unsigned char *pnt) //写 cgram
{
uchar i,y;
uchar *pp;
//add=add<<3;
LCD_Write(0,0x40);
pp=pnt;
for(y=0;y<8;y++)
{
for(i=0;i<8;i++)
{
LCD_Write(0,0x40+i);
LCD_Write(1,*pp);
pp++;
}
pp=pnt;
}
}
//************************************************************************ 显示位置
void GotoXY(unsigned char x, unsigned char y)
{
if(x==0)
LCD_Write(LCD_COMMAND,0x80|y);
if(x==1)
LCD_Write(LCD_COMMAND,0x80|(y-0x40));
}
//写一个字符:X为横轴(0-15),Y为纵轴(0-1)
void LCD1602_Char(unsigned x,unsigned char y,unsigned char dat)
{
GotoXY(x,y);
LCD_Write(LCD_DATA,dat);
}
uchar code jiantou1[8]={0x00,0x04,0x04,0x04,0x04,0x15,0x0e,0x04};//
main
{
LCD_Initial(); //初始化1602
LCD_cgram(0,jiantou1);
LCD1602_Char(0,0,0x00);
while(1);
}
一周热门 更多>