单片机做万年历数码管太多,扫描显示最后一位数总显示不对

我用单片机刚做了个万年历的雏形,年月日的显示用一个函数,时分秒的显示用了一个函数,显示每位的时候刚开始延时5ms,后来有点闪,我就改成了3ms,虽然不闪了,但最后一位总显示不对,而且数字到有的数动,有的数一点也不动。后来我以为是我先片选后段选的事,但是我改成先段选后片选之后,年月日显示乱码了?一共用了14位数码管
我主要想问:
1.为什么先段选后片选之后年月日显示乱码了呢?
2.为什么数码管多了扫描显示最后一位不对呢?改变延时时间也不行呢?
3.还有延时的问题我用的是proteus仿真,设置12M的晶振,TL0=(65536-10000)&0x0f,TH0=(65536-10000)&0xf0>>4;和TL0=0xf0;TH0=0xd8;是等价的吧?
4.上面的初始值是延时10ms的,但是主函数中我判断中断100次之后就加一秒,但是运行的时候秒改变的比标准的秒数走的慢是怎么回事呢?我把中断次数改到80加一秒才和正常的秒数走的速度差不多,这是怎么回事啊?
希望懂的大哥大姐能帮帮忙,小弟我是初学者很需要你们的帮忙啊!在这里先谢谢你们了

是不是最后一位数码管没有设置延时关闭啊?单片机运行完数码管扫描程序后,运行其它程序,比如计算时间等等,如果最后一位数码管延时后没有关闭它的片选,就会出现最后一位显示时间长亮度高的现象,如果数码管的段选信号还有复用功能的话,肯定会引起显示乱码了。
你是怎么驱动数码管的?直接动态扫描驱动还是164芯片静态级联驱动啊?追问

我没关片选呐,但是我是和时分秒的数码管接着显示的,应该不影响吧!上边是我的电路图,我是直接驱动的数码管,但是正常最好不是先段选后位选吗。我以为是因为先片选所以最后一个一直显示不对。请大哥帮忙看下啊

追答

其实如果那个段选IO口没有复用其它功能的话,应该不会出现乱码的,只是出现最后一位亮度偏高。但是很有可能是扫描数码管的过程完成之后,单片机的其它程序部分再次给段选IO口赋值,从而引起段信号的改变,又因为此时片选没有关闭,段选信号的变化会立即反映在数码管上,因此出现乱码。这种小问题在编程过程中很容易出现的,改正、优化一下代码就可以了。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答