|
| 不要用delay延时,当你delay时,LED显示就失控了。要用定时器做延时。 |
| 谢谢各位佬的帮忙了,我最后发现问题不是138译码器,也不是程序的问题,最后查资料发现是74ls240芯片的电压问题,更换成74hc240后就正常了,感谢各位的帮助,至于网络标号我以后会注意的 |
zhuls 发表于 2025-12-29 16:22 谢谢佬的帮忙了,我最后发现问题不是138译码器,也不是程序的问题,最后查资料发现是74ls240芯片的电压问题,更换成74hc240后就正常了 |
| 程序错的,图也错的,仔细看74LS138的用法 |
YSY521 发表于 2025-12-29 16:10 来自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,时间越长,亮度越高,但可能会有闪烁感,时间越短,显示亮度又可能上不去,你自己平衡一下。。 |
zhuls 发表于 2025-12-29 15:35 嗯,我知道了,以后会注意的,这要是我没怎么接触过这个proteus软件,只是上课需要,所以就学了学,但是这不是我问的重点啊,我的数码管就是不正常,把延时时间拉长就会变成雷系流水灯的效果,并不是想要的动态显示,在标网络标号的之前我都测试过没问题,每一位都能正常显示,逻辑也没有问题,但是加上循环显示之后就变成上面我所说的情况了 |
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,==. 这样,图和代码的可读性无形间提高了好几档。。 ====以上纯属个人观点==== |
hhdsdy 发表于 2025-12-29 12:33 我解释一下我的网络标号为什么要这样标,首先我没想着要和单片机的引脚对应,我先标的是数码管的段和电阻,所以我就标了p1-8,然后标的电阻左边和p0引脚,然后我就标称了p11-18,当时真没想过这么多 |
hhdsdy 发表于 2025-12-29 12:33 啊,不是的,从电路到代码都是我自己独立完成的,真的,我是有单片机基础的,大一就学C语言51,32单片机,只是这学期上课才学的proteus,至于这个网络标号我标的时候真没想这么多,只想着对应起来就够了 |
zhuls 发表于 2025-12-29 11:55 看样子是简单的复制,否则也不会把P1.0等标成P31等了 |
| 他仿真版本封装有一点影响,切换位显示时候缩短时间 |
zhuls 发表于 2025-12-29 11:55 哈哈哈哈,抱歉了佬,我画电路图的时候没想过这能和代码有什么关系,我就是先把电路图画对,逻辑没问题,单独写代码测试没问题,然后我网络标号我就随意标了,直接写代码了,可能是因为本身这个proetus软件我也不怎么用,只是学单片机的时候简单的学过,佬说的问题我以后一定会注意的, |
zhuls 发表于 2025-12-29 11:55 我嫩是没看懂那连线和代码之间有啥关系。 |
|
都说写代码的有强迫症,但我在你的代码和图中看不出半点,反而很随意。。 代码中,段驱是P0,偏偏网标是P10~P17,过个电阻又变成P1~P8, 位驱是P1,偏偏网标是P31~P33,过个译码器,又变成P21~P28了。。头疼! delay(1)是1毫秒吗?那也太小了。 |
devcang 发表于 2025-12-29 08:35 我在代码里已经加了,在displays函数中,每次显示都加了delay(1),但是没用,我除非是把这个delay时间拉长,但是这样就会看着一闪一闪的,并不能算是动态显示了 |
| 显示每一位,在后面添加适当延时。 |
| 为什么我再24小时必答区找不到我的这个帖子呢? |
求大佬,让我康康大佬在哪里![]() |