proteus仿真LCD不显示是什么原因

img


keil5编译没有问题了,但是在进行仿真时LCD1603只是亮了但是没有显示,上面的是我的仿真电路图,不知道是连线的问题还是代码的问题?

电源 地线都没连呢

LCD的电源,地,VEE都没接

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7561609
  • 这篇博客也不错, 你可以看下使用Proteus仿真LCD1602时出现报错问题的解决办法
  • 除此之外, 这篇博客: Proteus仿真51单片机生日快乐音乐播放器中的 LCD1602液晶显示汉字: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    这个程序代码关联性不强,所以我分成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显示特殊图形已经为大家介绍完毕。

  • 以下回答来自chatgpt:

    1. 先检查电路图是否有任何的问题

    • 确保电路图中每个组件的端口和引脚都正确地连接
    • 检查每个组件的属性, 确认它们设置正确

    2. 检查代码实现是否有任何的问题

    • 检查代码中是否有语法错误, 拼写错误, 或者其他常见的错误
    • 确认 LCD1603 display 库文件是否被正确地导入到代码中
    • 检查代码中是否包含正确的初始化方法,以确保 LCD1603 display 被正确地初始化。

    3. 如果以上两个方面都没有问题,尝试更改 Proteus 模拟器设置

    • 在 Proteus 模拟器中,打开 Options>Settings。在窗口中选择“Load Current Sheet Only”,然后单击“OK”。
    • 保存模拟文件并重新运行模拟

    4. 如果以上方法都没有解决问题,建议更换其他LCD模块进行模拟操作,以检验模拟器本身是否存在问题。

    以下是一个可能的代码实现,可用于配置和控制LCD1603显示屏(alpha版本):

    //引用LCD1603库
    #include "LCD1603.h"
    
    int main()
    {
        //初始化LCD1603显示屏控制器模块
        LCD1603_Init();
    
        //向LCD1603显示屏发送字符串
        LCD1603_WriteString("Hello, world!");
    
        return 0;
    }
    

    请注意,这种实现方式依赖于一个名为"LCD1603.h"的自定义库。如果你的代码中也使用了这个库,请确保它被正确链接和导入到你的代码中。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^