电源 地线都没连呢
LCD的电源,地,VEE都没接
不知道你这个问题是否已经解决, 如果还没有解决的话:这个程序代码关联性不强,所以我分成3个模块为大家讲解程序,首先为大家讲解比较重要的1602。1602是一种工业字符型液晶,全称LCD1602,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
void write_command(uchar com)
{
check_busy();
E=0;
RS=0;
RW=0;
out=com;
E=1;
delay(2);
E=0;
delay(2);
}
void write_date(uchar dat)
{
check_busy();
E=0;
RS=1;
RW=0;
out=dat;
E=1;
delay(2);
E=0;
delay(2);
}
Out即为整个双向数据端,根据我们每个人的接线去操作即可。完成了写函数以后,我们就可以根据指令集对1602进行初始化,这里我们不在对指令集和初始化进行介绍。
对于1602写汉字我们需要下一番功夫,因为1602内置的CGROM里存储了常见的192个字符,但是没有中文,我们想显示中文就必须字节创建一个字库。查看1602数据手册,我们可以看到1602有一个CGRAM区,作为用户自定义区,大小为64字节,每8个字节为一组显示一个字符,总共可以显示8种自定义字符。每种字符显示都有自己的显示编码从第一种字符到第八个字符,依次是:{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}。
现在的问题就是建字库,我查看数据手册发现1602其内部数据矩阵并非是8 * 8的,而是5 * 8的只用右边区域进行显示,知道这点我们就直接上字模提取软件,且只用右边位置即可。
总得来说,就是我们先建一个字库,然后设定好一个显示地址,然后在每个地址写入每个字符的显示编码,即可在对应的区域显示我们的字符了。
我们这里放个字库截图吧:
table2就是我们建的字库,table3是每个字库显示编码,table4即直接用了CGROM的字符。想知道我们建的库长啥样,见文末。。
显示函数我们列一下:
void lcd1602xianshi(void)
{
uchar i;
init_1602();
write_command(0x40);//向用户自定义RAM区写入我们定义好的字库
for(i=0;i<64;i++)
{
write_date(table2[i]);
delay(1);
}
write_command(0x80+0x03);//把填充好的字库显示在第一行第三个字符位置后面
for(i=0;i<8;i++)
{
write_date(table3[i]);
delay(100);
}
write_command(0xc0+0x02);//把happy birthday显示到第二行第二个字符后面
for(i=0;i<14;i++)
{
write_date(table4[i]);
delay(100);
}
a=2;
}
程序的意思是,首先我们要把做好的字模数组存储到1602的0x40(CGRAM中),然后选择显示区域,0x80后,从这个显示地点开始,依次写入显示编码,0x00 --> 0x07,依次对应CGRAM中的第一个图形,到第8个图形。然后再选择1602的第二行,显示英文字符,不需要做字模,因为1602内部是有ASCII码字模集的。至此,1602显示特殊图形已经为大家介绍完毕。
以下是一个可能的代码实现,可用于配置和控制LCD1603显示屏(alpha版本):
//引用LCD1603库
#include "LCD1603.h"
int main()
{
//初始化LCD1603显示屏控制器模块
LCD1603_Init();
//向LCD1603显示屏发送字符串
LCD1603_WriteString("Hello, world!");
return 0;
}
请注意,这种实现方式依赖于一个名为"LCD1603.h"的自定义库。如果你的代码中也使用了这个库,请确保它被正确链接和导入到你的代码中。