这几天一个同学做了个单片机的小程序,非常简单的功能,就是驱动数码管显示。但是他用了两个74HC573锁存器。算是用作驱动了吧。那个程序貌似没有问题,但是显示的时候,总是会有几个数字不能显示(非硬件问题,因为是仿真)。非常搞笑。我测试过,发现从最左边起,第一个数码管不能显示1、4,第二个数码管不能显示5、6,第三个数码管不能显示2,第四个数码管不能显示1、4、7。非常诡异。
在单步调试之后发现了问题的根源,是因为提前开放锁存器,造成锁存器数据混乱。改成先更改输出端口的数据,然后再开放锁存器就可以了。但是就算之前有混乱,也不过是一个机器周期,怎么会造成看不到呢。希望大家给点建议。原来有问题的程序是wela=1; P0=0xfe; wela=0; dula=1; P0=table[a]; dula=0; delay(1); wela=1; P0=0xfd; wela=0; dula=1; P0=table; dula=0; delay(1);
wela=1; P0=0xfb; wela=0; dula=1; P0=table[c]; dula=0; delay(1);
wela=1; P0=0xf7; wela=0; dula=1; P0=table[d]; dula=0; delay(1);
后来改成把P0的赋值放在wela和dula更改之前就好了。定义了wela是P3.0口,dula是P2.0口。再给了电路图。
|