Proteus中数码管动态扫描显示不全(已解决)
前言
我是直接把以前写的 51 数码管程序复制过来的,当时看的郭天祥的视频,先送段选,消隐后送位选,最后来个 1ms 的延时。
代码在 Proteus 中数码管静态是可以的,动态显示出了问题——显示不全,我在网上搜的说是 Proteus 的 Bug,需要先送位选再送段选,我试了试也不行。
最后在我多次实验下,终于让我解决了,可以完全显示,而且显示的非常平稳。
这里记录一下:
解决方法
Proteus 中不需要任何设置,只需要将消隐的顺序换一下,把消隐放在送完位选之后,然会延时即可。
for(i = 0;i < 8;i++)
{
// 送段选
NIXIE_TUBE_D = 1;
P0 = d_table[i];
NIXIE_TUBE_D = 0;
// 送位选
NIXIE_TUBE_W = 1;
P0 = w_table[i];
NIXIE_TUBE_W = 0;
// 消隐
P0 = 0xff;
// 延时
bsp_DelayMS(1);
}
下面是 51 单片机在晶振为 11.0592MHz 时毫秒级的延时函数,STM32 单片机可以使用 HAL 库自带的HAL_Delay
进行延时。
void bsp_DelayMS(uint32_t n) //@11.0592MHz
{
uint8_t data i, j;
if (n == 0)
{
return;
}
while(n--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
后记
对你有所帮助的话,可以点赞支持一下。
本文作者:main工作室
本文链接:https://www.cnblogs.com/main-studio/p/18531040
版权声明:本文为「main工作室」的原创文章,遵循 CC BY-NC-ND 4.0 版权协议,著作权归作者所有,转载请注明出处!
鼓励博主:如果您觉得文章对您有所帮助,可以点击文章右下角【推荐】一下。您的鼓励就是博主最大的动力!