找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机proteus仿真中遇到的数码管问题

查看数: 784 | 评论数: 18 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-12-28 20:24

正文摘要:

本菜鸡大三,目前在做单片机设计,三个课题,其中一个是实现路口红绿灯,但是我遇到的问题是我的数码管显示不正常,现象是开始仿真后看不见数码管显示的数字,只有按下暂停才会显示代码我也没找到问题,数码管采用共 ...

回复

ID:123289 发表于 2026-1-7 10:09
不要用delay延时,当你delay时,LED显示就失控了。要用定时器做延时。
ID:1114752 发表于 2025-12-31 13:08
谢谢各位佬的帮忙了,我最后发现问题不是138译码器,也不是程序的问题,最后查资料发现是74ls240芯片的电压问题,更换成74hc240后就正常了,感谢各位的帮助,至于网络标号我以后会注意的
ID:1114752 发表于 2025-12-31 13:07
zhuls 发表于 2025-12-29 16:22
来自DEEPSEEK的:
关键参数:
‌MCU型号‌:89C52

谢谢佬的帮忙了,我最后发现问题不是138译码器,也不是程序的问题,最后查资料发现是74ls240芯片的电压问题,更换成74hc240后就正常了
ID:275826 发表于 2025-12-29 17:37
程序错的,图也错的,仔细看74LS138的用法
ID:69038 发表于 2025-12-29 16:22
YSY521 发表于 2025-12-29 16:10
嗯,我知道了,以后会注意的,这要是我没怎么接触过这个proteus软件,只是上课需要,所以就学了学,但是 ...

来自DEEPSEEK的:
关键参数:
‌MCU型号‌:89C52
‌晶振频率‌:12MHz
‌机器周期‌:12个时钟周期(12MHz / 12 = 1MHz)
‌延时循环‌:i=2,j=239
计算过程:
‌内层循环‌:while(--j) 执行 239 次
‌外层循环‌:do{...}while(--i) 执行 2 次
‌每次 delay(1) 的总循环次数‌:239 * 2 = 478 次
‌每次循环的机器周期数‌:478 次循环 * 1 机器周期 = 478 机器周期
‌总延时时间‌:478 机器周期 * 1μs/机器周期 = 478μs
结论:
delay(1) 的延时时间为 ‌478μs‌(微秒)

每位0.5ms的延时,明显不够!
扫描显示,至少一屏(8位)不超20ms,才能视觉不闪,每位显示约2.5ms,时间越长,亮度越高,但可能会有闪烁感,时间越短,显示亮度又可能上不去,你自己平衡一下。。
ID:1114752 发表于 2025-12-29 16:10
zhuls 发表于 2025-12-29 15:35
这样标也不是不行,就是原则上有点乱。。

强迫症们对于数码管,一般段驱以SEG_0~SEG_7,或SEG_A~SEG_H ...

嗯,我知道了,以后会注意的,这要是我没怎么接触过这个proteus软件,只是上课需要,所以就学了学,但是这不是我问的重点啊,我的数码管就是不正常,把延时时间拉长就会变成雷系流水灯的效果,并不是想要的动态显示,在标网络标号的之前我都测试过没问题,每一位都能正常显示,逻辑也没有问题,但是加上循环显示之后就变成上面我所说的情况了
ID:69038 发表于 2025-12-29 15:35
YSY521 发表于 2025-12-29 13:39
我解释一下我的网络标号为什么要这样标,首先我没想着要和单片机的引脚对应,我先标的是数码管的段和电阻 ...

这样标也不是不行,就是原则上有点乱。。

强迫症们对于数码管,一般段驱以SEG_0~SEG_7,或SEG_A~SEG_H,位驱以DIG1_DIG8,。。。
对于IO,一般是以其实际标号,如P10,P23,之类的直接标上,或以功能如Dat0,ROM_SCK、FLASH_SDA_IN, SPI1_CS,==.
这样,图和代码的可读性无形间提高了好几档。。
====以上纯属个人观点====



ID:1114752 发表于 2025-12-29 13:39
hhdsdy 发表于 2025-12-29 12:33
看样子是简单的复制,否则也不会把P1.0等标成P31等了

我解释一下我的网络标号为什么要这样标,首先我没想着要和单片机的引脚对应,我先标的是数码管的段和电阻,所以我就标了p1-8,然后标的电阻左边和p0引脚,然后我就标称了p11-18,当时真没想过这么多
ID:1114752 发表于 2025-12-29 13:35
hhdsdy 发表于 2025-12-29 12:33
看样子是简单的复制,否则也不会把P1.0等标成P31等了

啊,不是的,从电路到代码都是我自己独立完成的,真的,我是有单片机基础的,大一就学C语言51,32单片机,只是这学期上课才学的proteus,至于这个网络标号我标的时候真没想这么多,只想着对应起来就够了
ID:88256 发表于 2025-12-29 12:33
zhuls 发表于 2025-12-29 11:55
都说写代码的有强迫症,但我在你的代码和图中看不出半点,反而很随意。。
代码中,段驱是P0,偏偏网标是P1 ...

看样子是简单的复制,否则也不会把P1.0等标成P31等了
ID:327265 发表于 2025-12-29 12:29
他仿真版本封装有一点影响,切换位显示时候缩短时间
ID:1114752 发表于 2025-12-29 12:25
zhuls 发表于 2025-12-29 11:55
都说写代码的有强迫症,但我在你的代码和图中看不出半点,反而很随意。。
代码中,段驱是P0,偏偏网标是P1 ...

哈哈哈哈,抱歉了佬,我画电路图的时候没想过这能和代码有什么关系,我就是先把电路图画对,逻辑没问题,单独写代码测试没问题,然后我网络标号我就随意标了,直接写代码了,可能是因为本身这个proetus软件我也不怎么用,只是学单片机的时候简单的学过,佬说的问题我以后一定会注意的,
ID:349276 发表于 2025-12-29 12:04
zhuls 发表于 2025-12-29 11:55
都说写代码的有强迫症,但我在你的代码和图中看不出半点,反而很随意。。
代码中,段驱是P0,偏偏网标是P1 ...

我嫩是没看懂那连线和代码之间有啥关系。
ID:69038 发表于 2025-12-29 11:55
都说写代码的有强迫症,但我在你的代码和图中看不出半点,反而很随意。。
代码中,段驱是P0,偏偏网标是P10~P17,过个电阻又变成P1~P8,
位驱是P1,偏偏网标是P31~P33,过个译码器,又变成P21~P28了。。头疼!

delay(1)是1毫秒吗?那也太小了。
ID:1114752 发表于 2025-12-29 10:31
devcang 发表于 2025-12-29 08:35
显示每一位,在后面添加适当延时。

我在代码里已经加了,在displays函数中,每次显示都加了delay(1),但是没用,我除非是把这个delay时间拉长,但是这样就会看着一闪一闪的,并不能算是动态显示了
ID:277550 发表于 2025-12-29 08:35
显示每一位,在后面添加适当延时。
ID:1114752 发表于 2025-12-28 20:36
为什么我再24小时必答区找不到我的这个帖子呢?
ID:1114752 发表于 2025-12-28 20:29
求大佬,让我康康大佬在哪里

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

Powered by 单片机教程网

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