LCD1602,显示自编译字符

来源:互联网 发布:大学网络选修课怎么上 编辑:程序博客网 时间:2024/05/22 21:55

这里写图片描述

  • 我们从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看共16个,实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000X111,X为无效位,最后三位为000-111共8个。
  • 如果我们要想显示这8个用户自定义的字符,操作方法和显示CGROM的一样,先设置DDRAM位置,再向DDRAM写入字符码,例如“A”就是41H。现在我们要显示CGRAM的第一个自定义字符,就向DDRAM写入00000000B(00H),如果要显示第8个就写入00000111(08H)
  • 从这个指令可以看出指令数据的高2位已固定是01,只有后面的6位是地址数据,而这6位中的高3位就表示这八个自定义字符,最后的3位就是字模数据的八个地址了。

  • 例如第一个自定义字符的字模地址为01000000-01000111八个地址。我们向这8个字节写入字模数据,让它能显示出“℃”
    这里写图片描述

具体代码体现:(头文件和函数声明省略)

1、自定义字符显示函数:

#define LCDPORT P0sbit RS = P2^4;   //RS、RW、E 根据LCD芯片说明自己定义引脚sbit RW = P2^5;sbit E = P2^6;unsigned char mychar[64] = {0x10, 0x06, 0x09, 0x08, 0x08, 0x09, 0x06, 0x00}; //℃的字模数据,最多64位   void LCD_init(void)             //LCD的初始化函数{    delay_ms(5);    LCD_WriteCom(0X38);    delay_ms(5);    LCD_WriteCom(0X38);    delay_ms(5);    LCD_WriteCom(0X38);    delay_ms(5);    LCD_WriteCom(0X38);    delay_ms(5);    LCD_WriteCom(0X08);    delay_ms(5);    LCD_WriteCom(0X01);    delay_ms(5);    LCD_WriteCom(0X06);    delay_ms(5);    LCD_WriteCom(0X0C);}void LCD_WriteDate(unsigned char date)  //写数据{    delay_ms(5);    //保障前一个执行完    RS = 1;             RW = 0;    LCDPORT = date;    E = 1;    _nop_();    E = 0;}void LCD_WriteCom(unsigned char com)   //写指令{    delay_ms(5);    RS = 0;    RW = 0;    LCDPORT = com;    E = 1;    _nop_();    E = 0;}void LCD_FillCGRAM(void)            //自定义字符的填充函数{    unsigned char i;    LCD_WriteCom(0x40);             //写指令告诉是在写自定义字符    for (i = 0; i < 8; i++)         //i <= 64    {        LCD_WriteDate(mychar[i]);   //把℃的字模数据写进去    }}void LCD_ShowCGRAM(unsigned char x, unsigned char y, unsigned char index)   //自定义字符的显示函数 {       if (0 == y)    {        LCD_WriteCom(0x80 + x);    //第一行,x代表横坐标    }    else     {        LCD_WriteCom(0xc0 + x);    //第二行    }    LCD_WriteDate(index);          //index 0~7 最多8个自定义字符}

2、主函数调用

void main(){    LCD_FillCGRAM();             //调用填充函数    while (1)    {        LCD_ShowCGRAM(0, 0, 0);  //第一行,第一个,字符为℃    }}
原创粉丝点击