在keil编写数码管动态显示的代码的时候,编译没有任何问题,但是在proteus中仿真共阴极数码管时(本人采用的是共阴极数码管,都一样的),出现数码管显示不全或乱码的现象。

我采用的是P0口,P0口接上拉电阻和两个74HC573锁存器。

分两点讲一下,第一个是数码管经管率的原因;在keil编写时代码采用的是先段选后位选的形式,导致数码管的经管率过低;关于经管率大家可以BD一下。代码如下:

void xs()
{uchar tem=0xfe;                    //位选信号的初值,低位对应数码管的左端for(xz=a;xz<z;xz++){ switch(xz)             //段选{case 1:P0=s2[h]; dd=1; dd=0; break;case 2:P0=s1[h1]; dd=1; dd=0; break;case 3:P0=s2[fen]; dd=1; dd=0; break;case 4:P0=s1[fen1]; dd=1; dd=0; break;case 5:P0=s2[miao]; dd=1; dd=0; break;case 6:P0=s2[miao1]; dd=1; dd=0; break;}P0=tem;wd=1;wd=0;      //位选delay(1);              //扫描间隔时间1mstem=_crol_(tem,1);     //循环左移一位}
}

仿真效果出现乱码现象,但是在单片机上运行的时候就不会任何问题,就很奇葩;下面是proteus仿真的效果图

第二种就是代码中的控制锁存器使能端的位(高电平开,低电平关),在开、关上与P0的读入存在竞争冒险(说白了就是使能端的开、关和锁存器读入P0的状态这一事件在时间先后上存在不确定关系);常见代码如下:

void xs()
{uchar tem=0xfe;                    //位选信号的初值,低位对应数码管的左端for(xz=a;xz<z;xz++){ wd=1;P0=tem;wd=0;      //位选switch(xz)             //段选{case 1:dd=1;P0=s2[h];  dd=0; break;case 2:dd=1;P0=s1[h1];  dd=0; break;case 3:dd=1;P0=s2[fen];  dd=0; break;case 4:dd=1;P0=s1[fen1];  dd=0; break;case 5:dd=1;P0=s2[miao];  dd=0; break;case 6:dd=1;P0=s2[miao1];  dd=0; break;}delay(1);              //扫描间隔时间tem=_crol_(tem,1);     //循环左移一位}
}

上面的代码中wd为位选锁存器的使能端,dd为段选锁存器的使能端。流程:wd=1位选打开,P0口的初始状态为0xff此时被读入,然而下一步P0口被赋值0xfe,而后wd=0,锁存器关闭,但是此时无法保证在锁存器关闭之前锁存器读入了0xfe;同理dd=1段选打开,P0为0xfe这时段选的锁存器就被写入了0xfe,你再让P0=s2[h](s2为一个共阴极0~9的数组),这时又到了竞争冒险的时候了,锁存器是先读入s2[h]还是先执行dd=0。仿真结果如下:

最后推荐写法如下:

void xs()
{uchar tem=0xfe;                    //位选信号的初值,低位对应数码管的左端for(xz=a;xz<z;xz++){ P0=tem;wd=1;wd=0;      //位选switch(xz)             //段选{case 1:P0=s2[h]; dd=1; dd=0; break;case 2:P0=s1[h1]; dd=1; dd=0; break;case 3:P0=s2[fen]; dd=1; dd=0; break;case 4:P0=s1[fen1]; dd=1; dd=0; break;case 5:P0=s2[miao]; dd=1; dd=0; break;case 6:P0=s2[miao1]; dd=1; dd=0; break;}delay(1);              //扫描间隔时间tem=_crol_(tem,1);     //循环左移一位}
}

仿真结果如下图

本人小白,学习ing........

51单片机编译没错但proteus数码管仿真出现乱码的情况相关推荐

  1. 51单片机+LCD12864的万年历Proteus仿真

    51单片机+LCD12864的万年历Proteus仿真 Proteus仿真效果 按键说明:递增按键的范围是根据设置的属性变化而变化,如果是年就是0-99,超出范围归0,如果是月份就是0-12超出范围归 ...

  2. 【019】基于51单片机的交通灯Proteus仿真设计

    一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...

  3. 基于51单片机的烟雾火灾报警器proteus仿真设计

    基于51单片机的烟雾火灾报警器proteus仿真设计 1 开发环境 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0004 代码讲解+仿真讲解+仿真演示 ...

  4. 51单片机汽车胎压大气气压测量仪仿真设计_数码管显示

    51单片机汽车胎压大气气压测量仪仿真设计_数码管显示 (仿真+程序) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0018 目录标题 51 ...

  5. 51单片机 24C02器件读写+Proteus仿真

    51单片机 24C02器件读写+Proteus仿真 Proteus仿真 Proteus器件选型注意事项 IIC存储器件选择24C02C,选择其他的容量的或者其他型号的存储器件无法仿真出实际的效果. 器 ...

  6. 51单片机4x4矩阵键盘扫描+数码管显示

    51单片机4x4矩阵键盘扫描+数码管显示 个位闪烁感在这篇文章已经修复<51单片机4x4矩阵键盘扫描+数码管显示(二)(修bug篇)> 材料:AT89C52.2位数码管.74HC595. ...

  7. 51单片机 74HC595应用实例+Proteus仿真

    51单片机 74HC595应用实例+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #include <intrins.h> #defi ...

  8. 【034】基于51单片机的HX711电子秤Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的HX711电子秤proteus仿真设计一份: (2).基于51单片机的HX711电子秤proteus仿真设计keli源代码一份: (3).基于51单片机的H ...

  9. 两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时

    <基于51单片机共阴两位数码管显示倒计时>由会员分享,可在线阅读,更多相关<基于51单片机共阴两位数码管显示倒计时(2页珍藏版)>请在人人文库网上搜索. 1.基于51单片机共阴 ...

最新文章

  1. Python解析命令行读取参数 -- argparse模块
  2. Spark源码阅读03-Spark存储原理之共享变量
  3. 【Android RTMP】NV21 图像旋转处理 ( 问题描述 | 图像顺时针旋转 90 度方案 | YUV 图像旋转细节 | 手机屏幕旋转方向 )
  4. Calling JNI Functions with Java Object Arguments from the Command Line
  5. linux卸载vs codeblocks,哪个适合linux? GNU make vs cmake vs codeblocks vs qmake
  6. 手把手教你 Spark 性能调优
  7. saas java框架_XMReport-提供web项目Java套打解决方案
  8. qweb加html文件,将本地html文件加载到Pyside QwebVi中
  9. java static final关键字_Java的static与final关键字
  10. 在Linux中实现多网卡绑定
  11. Eclipse修改项目编码
  12. python class用法理解_通过钢铁侠变身快速理解Python的装饰器用法
  13. 流(stream)是怎么一回事
  14. webstorm更换主题后快捷键失效
  15. Javascript 操作select标记中options的方法
  16. python多进程共享变量,附共享图像内存实例
  17. RNN Attention
  18. CentOS7网络快速解决
  19. LOL自制皮肤1-解析WAD文件的一些总结
  20. Android Camera2 Opengles2.0 实时滤镜(冷暖色/放大镜/模糊/美颜)

热门文章

  1. 携手腾讯官方打造,微信(统信UOS版)首发
  2. 齿轮-转子-轴承系统动力学matlab程序代码
  3. Serializable接口分析
  4. mysql数据库基本操作指令:附图
  5. 企业微信会话存档功能的推出背景,版本,部署方式
  6. Win7/8双系统共用蓝牙鼠标
  7. 【spacedesk】屏幕扩展,将平板pad设置为pc的副屏
  8. 内蒙古大学计算机学院保研到哪些学校,关于2021年推荐优秀应届本科毕业生免试攻读研究生的通知...
  9. 利用CASS使用三种方法计算两期土方
  10. Redis——过期时间/过期回收策略