hj1602液晶 cgram 问题 (求助)

2020-02-02 09:30发布

最近用一块 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);
}
0条回答

一周热门 更多>