标题: [原创]发布一个ST7920的LCD12864 Proteus仿真模型,支持串口和4bit模式通讯 [打印本页]

作者: cdhigh    时间: 2021-9-29 23:43
标题: [原创]发布一个ST7920的LCD12864 Proteus仿真模型,支持串口和4bit模式通讯
网络上已经有了一个12864A(ST7920)仿真模型,但其功能非常有限,不支持4位并行接口,不支持串行接口,不支持ASCII字母和数字显示,也不支持绘图显示,所以我就自己动手,实现了此模型,并分享源代码,方便有需要的朋友修改支持其他规格的器件,仓库托管于 <https://github.com/cdhigh/lcd12864_st7920_proteus>










全部资料51hei下载地址:
LCD12864B_DLL.rar (147.38 KB, 下载次数: 310)
更新V1.0.3,编译为静态链接,不需要VC运行库,并优化汉字显示效率。
LCD12864B_1.0.3.7z (212.51 KB, 下载次数: 384)


作者: heicad    时间: 2021-9-30 17:52
这个是好东西,下载测试一下,看来可以替换掉用了很久LCD12864a.DLL了
作者: cdhigh    时间: 2021-9-30 21:18
升级为1.0.1,修正了4bit模式下回读ST7920数据错误的问题。
如果不使用4bit读,则原来的版本没问题。

LCD12864B_DLL_1.0.1.rar

189.91 KB, 下载次数: 49, 下载积分: 黑币 -5


作者: cdhigh    时间: 2021-10-1 00:59
继续升级1.0.2,从芯片手册PDF里面截图进行0x20以下非标准字符进行取模。
现在0x20以下的ASCII也能正常显示。

LCD12864B_DLL_1.0.2.rar

189.8 KB, 下载次数: 124, 下载积分: 黑币 -5


作者: by64214    时间: 2021-10-1 09:51
谢谢分享  现在可以任意位置,但是上部有残影

1.png (56.96 KB, 下载次数: 218)

1.png

作者: 来51学习的    时间: 2021-10-1 16:00
感谢分享,好资料,51黑有你更精彩!!!
作者: ab560    时间: 2021-10-1 18:00
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.


作者: cdhigh    时间: 2021-10-1 21:20
本帖最后由 cdhigh 于 2021-10-3 03:17 编辑
by64214 发表于 2021-10-1 09:51
谢谢分享  现在可以任意位置,但是上部有残影

在真实硬件上测试有没有残影?
有大字体小字体,使用了绘图功能,清屏不能仅使用 0x01命令,根据手册,0x01仅清除DDRAM,还需要全部GDRAM写0x00。

如果只是仿真有的话,能否将 源码和工程 发到附件?
只需要能重现问题的代码即可,可以将其他你不想分享的代码删除。

作者: cdhigh    时间: 2021-10-1 21:28
by64214 发表于 2021-10-1 09:51
谢谢分享  现在可以任意位置,但是上部有残影

AVR的清屏例子,需要发送 0x01,和全部 GDRAM写0x00。

//显示清屏函数
void LCD_clear(void)
{
    unsigned char x, y;
    LCD_write_command(0x08);  //避免清屏过程中闪烁,先关显示
    _delay_us(100);
    LCD_write_command(0x01);  //清DDRAM

    //清GDRAM,12864仅用了一半的GDRAM,清一半即可
    //如果没有使用到绘图GDRAM,也可以不清GDRAM,省点时间和代码空间
    LCD_startGraphic();
    for (y = 0; y < 32; y++)
    {
        LCD_write_command(0x80 + y); //y
        LCD_write_command(0x80 + 0); //x
        for (x = 0; x < 16; x++)
        {
            LCD_write_data(0x00);
            LCD_write_data(0x00);
        }
    }
    LCD_endGraphic();

    LCD_write_command(0x0C);  //显示开
    _delay_ms(10);
}
作者: cdhigh    时间: 2021-10-1 22:56
ab560 发表于 2021-10-1 18:00
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.
...

如果你确认放的目录没错的话,尝试下载并安装 VC2010运行库?
不是 VS2010开发环境,是 大约10M左右的运行库。
作者: ab560    时间: 2021-10-2 14:23
安装云更新库后仿真正常了,谢谢!
作者: cdhigh    时间: 2021-10-2 21:29
ab560 发表于 2021-10-2 14:23
安装云更新库后仿真正常了,谢谢!

之前没注意,下次编译一个不需要运行库的版本。
作者: cdhigh    时间: 2021-10-3 07:35
by64214 发表于 2021-10-1 09:51
谢谢分享  现在可以任意位置,但是上部有残影

你用的代码应该是这个帖子里面的吧。
http://www.51hei.com/bbs/dpj-98264-1.html
如果是的话,这个帖子的代码里面有BUG。
在函数 LCD_PrintfNumPicture()有这个语句:
  1. LCD_WriteCommand(0x36);   //设置扩展命令集,开显示
复制代码
此语句打开了绘图显示,表明接下来的设置地址和写数据都会作用到 GDRAM,但是在完成后代码没有切换回基本指令,在主循环的下一次循环调用 LCD_PrintfASCII(),里面也没有切换回基本指令的语句,而直接使用
  1. LCD_WriteCommand(0x80|addr);  //要写入DDRAM的地址
复制代码
代码的本意是设置DDRAM,但是现在实际设置的是GDRAM,导致你所说的残影,所以在实际屏幕上应该也是有残影的。
而且进入绘图模式的命令也不规范,根据芯片手册,建议需要两条指令,先 0x34 进入扩展指令,然后再 0x36 进入绘图模式。

我的测试代码中有两个函数可以参考:
  1. //开启扩展命令的绘图指令
  2. void LCD_startGraphic(void)
  3. {
  4. #if LCD_INTERFACE == MODE_4BIT
  5. LCD_write_command(0x24); //扩展指令集
  6. LCD_write_command(0x26); //绘图命令开启
  7. #else
  8. LCD_write_command(0x34); //扩展指令集
  9. LCD_write_command(0x36); //绘图命令开启
  10. #endif
  11. }
  12. //结束扩展命令的绘图指令(可选)
  13. void LCD_endGraphic(void)
  14. {
  15. #if LCD_INTERFACE == MODE_4BIT
  16. LCD_write_command(0x26); //绘图命令关闭
  17. LCD_write_command(0x20); //回到基本指令
  18. #else
  19. LCD_write_command(0x36); //绘图命令关闭
  20. LCD_write_command(0x30); //回到基本指令
  21. #endif
  22. }
复制代码
建议在开始绘图前使用 LCD_startGraphic() 进入绘图模式,在绘图完成后使用 LCD_endGraphic() 退出绘图模式,避免错误。


此帖子中LCD_PrintfASCII()函数的存在是因为之前的仿真模型LCD12864A.DLL不支持ASCII,其使用全角数字代替半角数字,属于取巧方法。
实际ST7920屏幕是支持ASCII的,所以在使用我的LCD12864B.DLL后,可以删除此函数,直接LCD_PrintfStr()输出ASCII即可,和实际硬件屏幕一致。

作者: 13487086265    时间: 2021-10-23 07:32
VSM model LCD12864B.DLL not found for 'L1'.GLE=0x00000002

作者: cdhigh    时间: 2021-10-25 00:27
13487086265 发表于 2021-10-23 07:32
VSM model LCD12864B.DLL not found for 'L1'.GLE=0x00000002

要不安装vc2012运行库,要不在github上下载最新版本,最新版本不需要运行库
作者: lihainingt3    时间: 2021-11-2 09:09
本帖最后由 lihainingt3 于 2021-11-2 09:13 编辑

很好奇楼主是如何知道用户可以自己制作模型的dll文件? 以及如何制作模型的dll文件? 是根据用户手册? 还是你提供的ProteusVSMSDK.pdf文件? 好像普通proteus使用者都不会涉及到这个问题,希望能够指点一二,
最后感谢楼主的分享, 膜拜ing!!!
作者: lihainingt3    时间: 2021-11-2 09:32
很好奇楼主是如何知道用户可以自己制作模型dll文件?  以及如何编译制作模型dll文件? 好像普通用户通常不必涉及这个问题, 是根据proteus的用户帮助手册? 还是楼主提供的ProteusVSMSDK.pdf文件? 希望楼主能够提示一二。
最后感谢楼主的分享!!!,膜拜ing!!!
作者: cdhigh    时间: 2021-11-6 18:19
lihainingt3 发表于 2021-11-2 09:32
很好奇楼主是如何知道用户可以自己制作模型dll文件?  以及如何编译制作模型dll文件? 好像普通用户通常不必 ...

开始搜索下载别人制作的st7920仿真,发现功能不全,但是至少知道可以自己制作非官方模型,然后再搜索如何制作,一步一步的仿照别人的例子和一些代码片段就可以开始了。
一旦起步,剩下的就容易了,不停的码代码即可,有疑问就翻sdk文档,还有疑问要不再搜索要不写代码尝试。
一旦完整写完一个模型,其他的就很容易了
作者: zbsc11    时间: 2021-12-20 11:40
感谢楼主分享文件,太有用了这个。
作者: songxia8013    时间: 2022-1-8 08:55
楼主能出个制作教程吗,估计很多人都很想学习这个。
作者: songxia8013    时间: 2022-1-8 08:57
楼主,能制作个STC8H8K64U单片机的仿真模型吗?
作者: by64214    时间: 2022-1-10 09:39
楼主能出个制作教程吗,看了一些资料 还是不太明白
作者: cdhigh    时间: 2022-1-10 21:43
by64214 发表于 2022-1-10 09:39
楼主能出个制作教程吗,看了一些资料 还是不太明白

Proteus的仿真模型有很多种,你希望是哪方面的呢?
具体一点,希望仿真哪个器件?
作者: 千江水    时间: 2022-2-17 20:18
我的上电后不显示是啥问题呢
作者: 千江水    时间: 2022-2-17 20:24
你这LCD是不是不带字库的呢
作者: cdhigh    时间: 2022-2-18 16:46
带字库的,对于部分proteus版本,需要将lcd左上角移到坐标零点,一般为屏幕中心
作者: wo0105250030    时间: 2022-4-23 21:22
ab560 发表于 2021-10-1 18:00
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.
...

同样的错误,不知道怎么处理,有知道的大神麻烦帮下忙
作者: heicad    时间: 2022-4-23 21:49
wo0105250030 发表于 2022-4-23 21:22
同样的错误,不知道怎么处理,有知道的大神麻烦帮下忙

我刚开始也是这个错误,后来把楼主的LCD12864B.dll文件放到Proteus8.8的MODELS目录里面去就ok了,如图

51hei.gif (66.42 KB, 下载次数: 173)

51hei.gif

51hei.png (3.63 KB, 下载次数: 260)

51hei.png

作者: redgray    时间: 2022-4-25 23:41
您好,如图,我设计了一个超声波测距仿真没问题,但一添加LCD12864B(没做任何操作,只是添加了放那里)结果LCD自动通电了,原先的超声波仿真就出问题,请问是什么情况

作者: ywd683    时间: 2022-7-2 07:16
这个是好东西,下载测试一下
作者: 新昌小徐    时间: 2022-7-2 15:23
楼主使用了好压软件制作压缩包,RAR软件是打不开的,好压这软件就是改了下较验码,使RAR等其它压缩软件因为数据较验出错而打不开。
作者: cdhigh    时间: 2022-7-3 07:18
新昌小徐 发表于 2022-7-2 15:23
楼主使用了好压软件制作压缩包,RAR软件是打不开的,好压这软件就是改了下较验码,使RAR等其它压缩软件因为 ...

没有使用好压,我的电脑中很难找到国内软件(汉化不算)。
国内软件大多数没有底线,能不用就不用,除非找不到替代品。
如果你解压不了,可能需要升级WinRAR,或7Zip
作者: Michael_xie    时间: 2022-7-20 14:13


作者: cdhigh    时间: 2022-7-20 18:35
Michael_xie 发表于 2022-7-20 14:13

首先到对应目录看这个DLL是否存在?
如果DLL存在,可以安装VC运行环境
作者: by64214    时间: 2022-8-21 10:06
谢谢楼主分享  现在可以仿真很多以前做不到的程序

1.png (17.66 KB, 下载次数: 138)

1.png

作者: zmc419    时间: 2022-9-4 15:59
水平真高
作者: ywd683    时间: 2022-9-12 06:31
这个是好东西,下载测试一下
作者: A==A    时间: 2022-11-14 18:44
proteus7用不了吗
作者: wmx~    时间: 2023-4-18 13:32
cdhigh 发表于 2022-1-10 21:43
Proteus的仿真模型有很多种,你希望是哪方面的呢?
具体一点,希望仿真哪个器件?

您好,可以给我发一下lcd12864的dll文件吗 我下载不来
谢谢
作者: andyhallo    时间: 2023-5-7 12:40
十分感谢楼主的无私分享 这个很有用 下载来试试 感谢!
作者: ChengBigdan    时间: 2023-5-21 16:19
Proteus8.15,AT89C52使用串行模式好像汉字会乱码and乱飘
作者: kzj51    时间: 2023-12-7 17:45
大佬真厉害,太棒了 下来用用试试
作者: kzj51    时间: 2023-12-7 17:52
by64214 发表于 2022-8-21 10:06
谢谢楼主分享  现在可以仿真很多以前做不到的程序

你用的真好,我还不知道咋用,怎么使用它的元件?
作者: liqingyong    时间: 2023-12-26 16:28
heicad 发表于 2022-4-23 21:49
我刚开始也是这个错误,后来把楼主的LCD12864B.dll文件放到Proteus8.8的MODELS目录里面去就ok了,如图

高手谢谢分享
作者: bbxyliyang    时间: 2024-1-16 21:48
ab560 发表于 2021-10-1 18:00
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.
...

楼主,后来解决了吗
作者: bbxyliyang    时间: 2024-1-16 21:48
by64214 发表于 2021-10-1 09:51
谢谢分享  现在可以任意位置,但是上部有残影

External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.
我的咋提示这个错误
作者: YHSSS    时间: 2024-4-2 13:17
cdhigh 发表于 2021-10-1 00:59
继续升级1.0.2,从芯片手册PDF里面截图进行0x20以下非标准字符进行取模。
现在0x20以下的ASCII也能正常显 ...

太棒了

作者: 万家灯火51    时间: 2024-8-15 14:31
CDHIGH您好!非常感谢您git上完善的12864B,非常好用。我在使用时碰到一个问题:keil c51,proteus,就是向它发送一个char字符时,它不会显示,继续发送第二个字符时,第一个字符和第二个字符才一起显示出来。有什么办法可以解决不呢?谢谢。 LCD12864B.rar (76.21 KB, 下载次数: 1)
作者: yechuan220    时间: 2024-9-5 16:58
谢谢分享,有没有串行通迅的程序




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1