c5i单片机编程有些疑虑

来源:百度知道 编辑:UC知道 时间:2024/06/10 20:44:25
在用keil编数码管的时候用到锁存器,为什么把锁存端定义好后就直接用P0来编锁存器的入口?例如:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;
P0=0xfe;//这里,P0不是单片机的P0口吗,怎么用来锁存器的了?
wela=0;

dula=1;
P0=0x06;
dula=0;
while(1);
}

锁存器的意义在于锁住信号,51的每个IO都有输出锁存功能,你上面说的驱动数码管需要用到锁存器,这个锁存的意义和51本身锁存意义不同,我想应该是51驱动595或者是其他带有锁存的扩展器件后在驱动数码管,74HC系列很多的IO扩展芯片都带锁存功能,

P0只是输出数据,没有锁存数据.
1.wela口线从1跳变到0时,外部锁存器1把P0口的数据0xfe锁存下来.
2.dula口线从1跳变到0时,外部锁存器2把P0口的数据0x06锁存下来.

此处用到锁存器,是为了节省单片机IO口,同时应该还有驱动作用,数码管要接位选和段选,
wela=1;
P0=0xfe;
wela=0;
这3句是数码管位选,选通某一位数码管后,通过
dula=1;
P0=0x06;
dula=0;送段码,
锁存器通过控制某一引脚如wela连接到单片机通过单片机控制=1则锁存器直通,=0则关闭,若不用锁存器则要用2个IO口,

这个意思是 P0口输出fe这上数,那么这个数据就会出现在锁存器的输入端,它等到ALE信号有效时,这个数据就会进入到锁存器,比如74LS273等,等ALE无效时,这个数据就会输出到外设,所以实质口这时还是还是一个io口,只不过这个的数据不直接给外设,而是给一个外接的锁存器,锁存功能是用ALE这个信号来控制,并不是P0口在锁存。