IO编程,该开发板(CD107D)使用了74HC573锁存器,通过P2口的P2^5,P2^6,P2^7连接74HC138译码器,扩展出了8个口,其中4个口分别连接4个74HC573锁存器,这里以LED的锁存器来举例:
代码分析:
P2 = P2 & 0x1F | 0x80;
其中0x1F=00011111,P2与0x1F进行与运算,高三位清零,其余位保持原来状态,不改变,即把控制HC138译码器的高三位留出来,接着再或上0x80;容易发现0x80=10000000;进行或运算,与1或结果为1,与0或结果不变,所以或上0x80只需看P2的高三位,则高三位为100,对应HC138译码器的话,P2^7=1; P2^6=0; P2^5=0;所以输出Y4=0;Y4再经过与非运算,看下图示:
则输出Y4C=1;即LED对应的锁存器的片选信号被选中,锁存器打通,接下来就可以对P0口进行操作,操作完之后,P2=P2&0x1f;P2高三位直接清零,此时Y4C=0,则把锁存器锁上了。类似的方法,数码管、蜂鸣器等都是如此操作。可以将此步操作写成一个函数进行调用即可,代码如下:
void Set_Hc573(unsigned char Yx) //需要开启的锁存器YX,4 = LED;5 = 蜂鸣器和继电器。
{
P2 &= 0X1F;
P2 |= Yx << 5;
P2 &= 0X1F;
}