找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 933|回复: 4
打印 上一主题 下一主题
收起左侧

关于Proteus仿真16x32点阵屏闪烁的问题

[复制链接]
跳转到指定楼层
楼主
ID:1096523 发表于 2023-10-19 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我是用proteus 8x8点阵屏搭建16x32的点阵屏

使用P2口+译码器做行选(点阵屏下面8个引脚 低电平有效)
使用4个移位寄存器级联做列选(点阵屏上面8个引脚 高电平有效)
取模按照列行方式取模

单片机源程序如下:
  1. uint8_t up_data[] = {
  2. };
  3. uint8_t down_data[] = {
  4. };
  5. void write_line(uint8_t c4,uint8_t c3,uint8_t c2,uint8_t c1)
  6. {
  7. int i;
  8. ST_CP = 0;
  9. for(i=0;i<32;i++)
  10. {
  11. SH_CP = 0;
  12. if(i<8) DS = c4 & (0x80 >> i);
  13. else if(i>=8&&i<16) DS = c3 & (0x80 >> (i-8));
  14. else if(i>=16&&i<24) DS = c2 & (0x80 >> (i-16));
  15. else if(i>=24&&i<32) DS = c1 & (0x80 >> (i-24));
  16. SH_CP = 1;
  17. }
  18. ST_CP = 1;
  19. }
  20. int main()
  21. {
  22. int i,j,a;
  23. E1 = 0;

  24. while(1)
  25. {
  26. for(i=0;i<16;i++)
  27. {
  28. P2 = i;
  29. if(i<8)
  30. write_line(up_data[16+2*i+1],up_data[16+2*i],up_data[2*i+1],up_data[2*i]);
  31. else
  32. write_line(down_data[16+2*(i-8)+1],down_data[16+2*(i-8)],down_data[2*(i-8)+1],down_data[2*(i-8)]);

  33. write_line(0,0,0,0);
  34. }
  35. }
  36. }
复制代码

其中up_data的前16个数据为数字‘1’的上半部分 后16个数据为数字‘2’的上半部分
down_data为对应的下半部分


最后的效果是点阵屏闪烁,并不能保持常亮
请大佬帮忙看看如何解决!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:102963 发表于 2023-10-20 08:30 | 只看该作者
你那仿真文件和程序文件,要压缩后传上来,大家才有可能给你找问题。只贴个程序,怎么找问题?
回复

使用道具 举报

板凳
ID:432633 发表于 2023-10-20 09:00 | 只看该作者
可以调整主频试下
回复

使用道具 举报

地板
ID:69038 发表于 2023-10-20 09:10 | 只看该作者
1、显示刷新问题。无法杜绝只能改善:你可以更改器件的响应速度、关闭电平指示、关闭示波器等相关仪器(如果有的话)
2、代码刷新率提高,不一定有效,得看电路组成。
回复

使用道具 举报

5#
ID:161164 发表于 2023-10-25 17:54 | 只看该作者
1. 没有消影
2. 每一行显示加1ms延时
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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