液晶显示模块是微控制器板中最常用的输出单元。这是非常有效的,因为它可以显示消息,值,时钟等。特殊类型的液晶显示器驱动器用于驱动液晶显示器。在嵌入式系统中,两个或更多的此类驱动芯片与LCD屏幕一起形成LCD模块。在LCD模块中显示的字符实际上存储在这些控制器的内部存储位置。它们以一种与ASCII表完全相似的方式存储。每当微控制器发送一个ASCII值时,LCD控制器就显示已经存储的与该值对应的ASCII字符。
LCD模块不仅可以显示ASCII字符,还可以显示自定义字符。用户可以将与自定义字符相对应的像素阵列存储在LCD模块中。存储的自定义字符可以通过发送相应的值给LCD模块来显示。
液晶显示模块具有两个或更多的显示驱动芯片,它们存储要显示的字符模式。每当一个ASCII值被发送到LCD模块时,控制器就会加载相应的字符数组,并在LCD屏幕上显示出来。为了显示LCD屏幕上的每个字符,在屏幕上使用8*5像素阵列。在内部存储器中,为某个特定字符打开的所有像素都存储为1,其他的保持为0。一个字符存储在通用LCD控制器HD44780的内部EPROM存储器的示例如下图所示;
图2:存储在液晶显示器控制器HD44780的EPROM存储器中的字符模式
本项目使用Arduino pro-mini板,在windows操作系统上Arduino IDE版本1.0.3的帮助下进行编程。Arduino pro-mini板和Arduino IDE的图片如下所示;
图3:典型的Arduino Pro-Mini板
图4:Arduino IDE软件窗口
使用另一个可以进行USB到TTL转换的硬件将程序上传到arduino板上。
图5:外接USB转TTL转换板,用于Arduino编程和串口通信
假设读者已经完成了这个项目如何开始使用arduino做了里面讨论的所有事情。我们必须计算出需要在LCD屏幕上显示的自定义字符的字符。在这个项目中显示的自定义字符如下图所示,下面的部分解释了如何为每个自定义字符找到所需的字符模式。
图6:使用Arduino电路设置在面包板上的LCD项目中创建自定义字符
LCD使用8*8像素块来显示每个字符,因此必须假设一个8*5的数组,并绘制所需的自定义字符,并找出所需的位模式。可以利用下图所示的像素阵列和二值阵列进行计算。
图7:用于自定义字符的正半周期的8*5像素和二进制数组
有8行R0到R7 8列C0到C7。所有行和列中的值现在都为零,因为所有像素都被关闭了。所有需要打开的像素应该被赋值为1,其余的应该保持为0。现在读取二进制模式并将其写入CGRAM以生成自定义字符。建议将字符模式存储在字符数组中,以便在C代码中使用。
图8:第一个自定义字符的8* 5像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b11111
};
项目中显示的第二个自定义字符的像素数组和二进制数组如下图所示;
图9:8 *5像素和二进制数组的第二个自定义字符使用Arduino
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b11111,
0 b11111
};
项目中显示的第三个自定义字符的像素数组和二进制数组如下图所示;
图10:Arduino第三个自定义字符的像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b11111,
0 b11111,
0 b11111
};
项目中显示的第四个自定义字符的像素数组和二进制数组如下图所示;
图11:第四个自定义字符的像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b11111,
0 b11111,
0 b11111,
0 b11111
};
项目中显示的第五个自定义字符的像素数组和二进制数组如下图所示;
图12:第五个自定义字符的像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b00000,
0 b00000,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111
};
项目中显示的第六个自定义字符的像素数组和二进制数组如下图所示;
图13:第六个自定义字符的像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b00000,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111
};
项目中显示的第七个自定义字符的像素数组和二进制数组如下图所示;
图14:使用Arduino制作的第七个自定义字符的像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b00000,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111
};
项目中显示的第八个自定义字符的像素数组和二进制数组如下图所示;
图15:使用Arduino设计的第8个自定义字符的像素和二进制数组
上述所示自定义字符的8字节长字符数组可以在如下所示的代码中定义;
{
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111,
0 b11111
};
Arduino IDE有一个库叫做
为这个项目编写的代码有一个功能LCD . createchar(),它帮助在LCD屏幕上创建自定义字符。createchar()函数的详细信息将在下一节中讨论。
lcd.createChar ()
可以使用函数lcd.createChar()将自定义字符写入CGRAM中所需的位置。该函数有两个参数,其中第一个参数是CGRAM内存中的位置,需要存储与自定义字符相对应的字符数组,第二个参数是字符数组本身。例如,如果有一个自定义字符数组称为' cc ',它需要存储在5th位置的CGRAM一可以使用以下语句;
液晶显示器。createChar (cc);
上面的语句将字符数组写入5th通过调用项目中讨论的LCD .write()函数,可以显示LCD控制器的CGRAM的位置如何连接LCD和PC和如何使液晶屏滚动显示.
lcd.write (5);
项目源代码
# # #/*================================= 如实验室 =======================================通过PC的串口接收一个字符,并显示相同的字符在16*2液晶显示屏滚动方式,并发光的LED每一次电路:* LED从引脚5连接到接地通过1K电阻液晶显示器:* LCD RS引脚到数字引脚12* LCD允许引脚到数字引脚11* LCD D4引脚到数字引脚5* LCD D5引脚到数字引脚4* LCD D6引脚到数字引脚3* LCD D7引脚到数字引脚2* LCD R/W引脚到地面* 10 k电阻:*接至+5V和接地*雨刷到LCD引脚3* LED阳极连接数字输出6* LED阴极通过1K电阻连接到地//================================= 如实验室 =======================================*///包含库代码:# include < LiquidCrystal.h >//用接口引脚的编号初始化库液晶液晶(12、11、5、4、3、2);//----------------- 存储自定义字符数组 ---------------------//字节cc1 [8] ={0 b00000,0 b00000,0 b00000,0 b00000,0 b00000,0 b00000,0 b00000,0 b11111};字节cc2 [8] ={0 b00000,0 b00000,0 b00000,0 b00000,0 b00000,0 b00000,0 b11111,0 b11111};字节cc3 [8] ={0 b00000,0 b00000,0 b00000,0 b00000,0 b00000,0 b11111,0 b11111,0 b11111};字节cc4 [8] ={0 b00000,0 b00000,0 b00000,0 b00000,0 b11111,0 b11111,0 b11111,0 b11111};字节cc5 [8] ={0 b00000,0 b00000,0 b00000,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111};字节cc6 [8] ={0 b00000,0 b00000,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111};字节cc7 [8] ={0 b00000,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111};字节cc8 [8] ={0 b11111,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111,0 b11111};//----------------- 存储自定义字符数组 ---------------------////给LED引脚一个名称:Int led = 6;无效的设置(){//----创建自定义字符----//液晶显示器。createChar (cc1);液晶显示器。cc2 createChar (2);液晶显示器。cc3 createChar (3);液晶显示器。createChar (4, cc4);液晶显示器。cc5 createChar(5日);液晶显示器。cc6 createChar(6日);液晶显示器。cc7 createChar(7日);液晶显示器。cc8 createChar(8日);//----创建自定义字符----////初始化led引脚为输出。pinMode(领导、输出);//设置lcd的列和行数:液晶显示器。开始(16日2);}无效循环(){液晶显示器。打印(如实验室”);lcd.write (1);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (2);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (3);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (4);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (5);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (6);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (7);//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.write (8);//显示自定义字符//---- blink LED -----//digitalWrite(领导、高);延迟(1000);digitalWrite(领导、低);延迟(1000);//---- blink LED -----//lcd.clear ();}# # #
与本文相关的问题?
询问并讨论Electro-Tech-Online.com和EDAboard.com论坛。
告诉我们你的想法!!
你必须登录发表评论。