C51 - LCD1602液晶显示用户自定义的编程实现

一.基础知识

HD44780 液晶芯片内置了 DDRAMCGROMCGRAMHD44780 内置了 192 个常用字符的字模, 
存于字符产生器 CGROM(Character Generator ROM)中,另外还有 8 个允许用户自定义的字符产生 RAM,
称为 CGRAM(Character Generator RAM)

C51 - LCD1602液晶显示用户自定义的编程实现_第1张图片
5X8 点阵的字符
C51 - LCD1602液晶显示用户自定义的编程实现_第2张图片
定义一行的内容,分两步:
1. 设定行地址(CGRAM 地址):
用到的命令如下:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 
0   0   0   1        DATA 

其中:DB5DB4DB3 为字符号,也就是你将来要显示该字符时要用到的字符地址。
DB2DB1DB0 为行号。
2. 设定 CGRAM 数据(内容)指令码如下:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 
1   0            DATA 

其中:DB4DB3DB2DB1DB0 对应于每行 5 点的字模数据。
DB7DB6DB5 可为任何数据,一般取“000”。
C51 - LCD1602液晶显示用户自定义的编程实现_第3张图片
置地址发生存储器地址
利用写命令指令, 调用该条语句。D7 - D0 所以从0100 xxxx 开始(也是从0x40开始构造字符)。

显示地址.,所以要与0x80进行 "或"操作。
例如想显示在第一行第五个位置

C51 - LCD1602液晶显示用户自定义的编程实现_第4张图片
数据写入 DDRAM 或 CGRAM 指令
C51 - LCD1602液晶显示用户自定义的编程实现_第5张图片
如果写入地址在0x40 -0x47,则显示代码的地址在0x00处。

unsigned char code str[] = {0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00}; //一共八行,所以给第5行一个八位数据。   
/*******************************************************************************
Function    : LCD1602_WriteCharacter
Description : LCD1602自定义字符
Input       : unsigned char cha :输入的字符放的位置
Output      : 无
Return      : 无
*******************************************************************************/
void LCD1602_WriteCharacter(unsigned char cha)
{
    unsigned char i;
    LCD_WriteCommand(0x40);          //起始地址0x40
    for (i = 0;i < 8;i++)
    {
        LCD_WriteData(str[i]);	 
    } 
    LCD_WriteCommand(0x80 | cha);    //显示字符
    LCD_WriteData(0x00);
}

你可能感兴趣的:(51系列单片机,单片机)