找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9160|回复: 46
收起左侧

[原创]发布一个ST7920的LCD12864 Proteus仿真模型,支持串口和4bit模式通讯

  [复制链接]
ID:67925 发表于 2021-9-29 23:43 | 显示全部楼层 |阅读模式
网络上已经有了一个12864A(ST7920)仿真模型,但其功能非常有限,不支持4位并行接口,不支持串行接口,不支持ASCII字母和数字显示,也不支持绘图显示,所以我就自己动手,实现了此模型,并分享源代码,方便有需要的朋友修改支持其他规格的器件,仓库托管于 <https://github.com/cdhigh/lcd12864_st7920_proteus>
scr1.png

scr2.png

scr3.png

scrShoot.gif

51hei.png

全部资料51hei下载地址:
LCD12864B_DLL.rar (147.38 KB, 下载次数: 292)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:262 发表于 2021-9-30 17:52 | 显示全部楼层
这个是好东西,下载测试一下,看来可以替换掉用了很久LCD12864a.DLL了
回复

使用道具 举报

ID:67925 发表于 2021-9-30 21:18 | 显示全部楼层
升级为1.0.1,修正了4bit模式下回读ST7920数据错误的问题。
如果不使用4bit读,则原来的版本没问题。

LCD12864B_DLL_1.0.1.rar

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

回复

使用道具 举报

ID:67925 发表于 2021-10-1 00:59 | 显示全部楼层
继续升级1.0.2,从芯片手册PDF里面截图进行0x20以下非标准字符进行取模。
现在0x20以下的ASCII也能正常显示。

LCD12864B_DLL_1.0.2.rar

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

回复

使用道具 举报

ID:44037 发表于 2021-10-1 09:51 | 显示全部楼层
谢谢分享  现在可以任意位置,但是上部有残影
1.png
回复

使用道具 举报

ID:610681 发表于 2021-10-1 16:00 | 显示全部楼层
感谢分享,好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:7503 发表于 2021-10-1 18:00 | 显示全部楼层
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E. 5)_D@4[]4ZCAIZ_5]I1)C.png

回复

使用道具 举报

ID:67925 发表于 2021-10-1 21:20 | 显示全部楼层
本帖最后由 cdhigh 于 2021-10-3 03:17 编辑
by64214 发表于 2021-10-1 09:51
谢谢分享  现在可以任意位置,但是上部有残影

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

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

使用道具 举报

ID:67925 发表于 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);
}
回复

使用道具 举报

ID:67925 发表于 2021-10-1 22:56 | 显示全部楼层
ab560 发表于 2021-10-1 18:00
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.
...

如果你确认放的目录没错的话,尝试下载并安装 VC2010运行库?
不是 VS2010开发环境,是 大约10M左右的运行库。
回复

使用道具 举报

ID:7503 发表于 2021-10-2 14:23 | 显示全部楼层
安装云更新库后仿真正常了,谢谢!
回复

使用道具 举报

ID:67925 发表于 2021-10-2 21:29 | 显示全部楼层
ab560 发表于 2021-10-2 14:23
安装云更新库后仿真正常了,谢谢!

之前没注意,下次编译一个不需要运行库的版本。
回复

使用道具 举报

ID:67925 发表于 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即可,和实际硬件屏幕一致。
回复

使用道具 举报

ID:701852 发表于 2021-10-23 07:32 | 显示全部楼层
VSM model LCD12864B.DLL not found for 'L1'.GLE=0x00000002
回复

使用道具 举报

ID:67925 发表于 2021-10-25 00:27 来自手机 | 显示全部楼层
13487086265 发表于 2021-10-23 07:32
VSM model LCD12864B.DLL not found for 'L1'.GLE=0x00000002

要不安装vc2012运行库,要不在github上下载最新版本,最新版本不需要运行库
回复

使用道具 举报

ID:475655 发表于 2021-11-2 09:09 | 显示全部楼层
本帖最后由 lihainingt3 于 2021-11-2 09:13 编辑

很好奇楼主是如何知道用户可以自己制作模型的dll文件? 以及如何制作模型的dll文件? 是根据用户手册? 还是你提供的ProteusVSMSDK.pdf文件? 好像普通proteus使用者都不会涉及到这个问题,希望能够指点一二,
最后感谢楼主的分享, 膜拜ing!!!
回复

使用道具 举报

ID:475655 发表于 2021-11-2 09:32 | 显示全部楼层
很好奇楼主是如何知道用户可以自己制作模型dll文件?  以及如何编译制作模型dll文件? 好像普通用户通常不必涉及这个问题, 是根据proteus的用户帮助手册? 还是楼主提供的ProteusVSMSDK.pdf文件? 希望楼主能够提示一二。
最后感谢楼主的分享!!!,膜拜ing!!!
回复

使用道具 举报

ID:67925 发表于 2021-11-6 18:19 来自手机 | 显示全部楼层
lihainingt3 发表于 2021-11-2 09:32
很好奇楼主是如何知道用户可以自己制作模型dll文件?  以及如何编译制作模型dll文件? 好像普通用户通常不必 ...

开始搜索下载别人制作的st7920仿真,发现功能不全,但是至少知道可以自己制作非官方模型,然后再搜索如何制作,一步一步的仿照别人的例子和一些代码片段就可以开始了。
一旦起步,剩下的就容易了,不停的码代码即可,有疑问就翻sdk文档,还有疑问要不再搜索要不写代码尝试。
一旦完整写完一个模型,其他的就很容易了
回复

使用道具 举报

ID:994589 发表于 2021-12-20 11:40 来自手机 | 显示全部楼层
感谢楼主分享文件,太有用了这个。
回复

使用道具 举报

ID:102963 发表于 2022-1-8 08:55 | 显示全部楼层
楼主能出个制作教程吗,估计很多人都很想学习这个。
回复

使用道具 举报

ID:102963 发表于 2022-1-8 08:57 | 显示全部楼层
楼主,能制作个STC8H8K64U单片机的仿真模型吗?
回复

使用道具 举报

ID:44037 发表于 2022-1-10 09:39 | 显示全部楼层
楼主能出个制作教程吗,看了一些资料 还是不太明白
回复

使用道具 举报

ID:67925 发表于 2022-1-10 21:43 来自手机 | 显示全部楼层
by64214 发表于 2022-1-10 09:39
楼主能出个制作教程吗,看了一些资料 还是不太明白

Proteus的仿真模型有很多种,你希望是哪方面的呢?
具体一点,希望仿真哪个器件?
回复

使用道具 举报

ID:576900 发表于 2022-2-17 20:18 | 显示全部楼层
我的上电后不显示是啥问题呢
回复

使用道具 举报

ID:576900 发表于 2022-2-17 20:24 | 显示全部楼层
你这LCD是不是不带字库的呢
回复

使用道具 举报

ID:67925 发表于 2022-2-18 16:46 来自手机 | 显示全部楼层
带字库的,对于部分proteus版本,需要将lcd左上角移到坐标零点,一般为屏幕中心
回复

使用道具 举报

ID:789905 发表于 2022-4-23 21:22 | 显示全部楼层
ab560 发表于 2021-10-1 18:00
谢谢楼主分享,为什么我仿真始终要报错?External model DLL "LCD12864B.DLL" not found. GLE=0x0000007E.
...

同样的错误,不知道怎么处理,有知道的大神麻烦帮下忙
回复

使用道具 举报

ID:262 发表于 2022-4-23 21:49 | 显示全部楼层
wo0105250030 发表于 2022-4-23 21:22
同样的错误,不知道怎么处理,有知道的大神麻烦帮下忙

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

使用道具 举报

ID:1010880 发表于 2022-4-25 23:41 | 显示全部楼层
您好,如图,我设计了一个超声波测距仿真没问题,但一添加LCD12864B(没做任何操作,只是添加了放那里)结果LCD自动通电了,原先的超声波仿真就出问题,请问是什么情况
回复

使用道具 举报

ID:32627 发表于 2022-7-2 07:16 | 显示全部楼层
这个是好东西,下载测试一下
回复

使用道具 举报

ID:496636 发表于 2022-7-2 15:23 | 显示全部楼层
楼主使用了好压软件制作压缩包,RAR软件是打不开的,好压这软件就是改了下较验码,使RAR等其它压缩软件因为数据较验出错而打不开。
回复

使用道具 举报

ID:67925 发表于 2022-7-3 07:18 来自手机 | 显示全部楼层
新昌小徐 发表于 2022-7-2 15:23
楼主使用了好压软件制作压缩包,RAR软件是打不开的,好压这软件就是改了下较验码,使RAR等其它压缩软件因为 ...

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

使用道具 举报

ID:543845 发表于 2022-7-20 14:13 | 显示全部楼层
1.png
回复

使用道具 举报

ID:67925 发表于 2022-7-20 18:35 来自手机 | 显示全部楼层
Michael_xie 发表于 2022-7-20 14:13

首先到对应目录看这个DLL是否存在?
如果DLL存在,可以安装VC运行环境
回复

使用道具 举报

ID:44037 发表于 2022-8-21 10:06 | 显示全部楼层
谢谢楼主分享  现在可以仿真很多以前做不到的程序
1.png
回复

使用道具 举报

ID:137736 发表于 2022-9-4 15:59 | 显示全部楼层
水平真高
回复

使用道具 举报

ID:32627 发表于 2022-9-12 06:31 | 显示全部楼层
这个是好东西,下载测试一下
回复

使用道具 举报

ID:1051956 发表于 2022-11-14 18:44 | 显示全部楼层
proteus7用不了吗
回复

使用道具 举报

ID:1072453 发表于 2023-4-18 13:32 | 显示全部楼层
cdhigh 发表于 2022-1-10 21:43
Proteus的仿真模型有很多种,你希望是哪方面的呢?
具体一点,希望仿真哪个器件?

您好,可以给我发一下lcd12864的dll文件吗 我下载不来
谢谢
回复

使用道具 举报

ID:405840 发表于 2023-5-7 12:40 | 显示全部楼层
十分感谢楼主的无私分享 这个很有用 下载来试试 感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表