仍然用到hc573锁存器的8个led灯灯组
流水灯的主程序(延时函数省略)
void main(void)
{
unsigned char i;
cls_buzz();
while(1)
{
for(i=0; i<8; i++)
{
P2 = ((P2&0x1f)|0x80);
P0 = ~(0x01<<i);
P2 &= 0x1f;
delay();
}
}
}
使用对整个端口赋值。
考虑到Y4C,选择让锁存器工作的方式(与P2口高三位有关)
可以单个io口定义,如:
HC573_C = P2^7; HC573_B=P2^6; HC573_A=P2^5;
HC573_ C = 1 ; HC573_B = 0; HC573_A = 0;
这样可以选通Y4C=1;
跳帽决定单片机IO口是否拓展,若WR接地,P2口没有确定输出的情况,则会使或非门输出0;为了拓展功能,我们肯定要WR接P36哇。
51单片机默认输出高电平。WR端默认高电平。
蜂鸣器与继电器的控制:
需要注意与这两个连接的不再是锁存器了,中间多了一个ULN2003。
这个芯片起到一个驱动的作用,可以输出高电流。
驱动电流500mA,最大600mA。用于驱动继电器和蜂鸣器。
50V电压,且输入与输出电平相反。【输入输出是 非门】
程序的写法可以参考驱动LED灯灯组。
锁存器受Y5C控制,继电器对应P04,蜂鸣器对应P06。驱动着两个器件需要低电平。则需要对应的P0口输出高电平。
可以采用
P2 = ((P2&0x1f)|0xa0); //驱动继电器
P0 = 0x10;
P2 &= 0x1f; //关掉实时锁存,避免改变工作状态
驱动蜂鸣器:
P2 = ((P2&0x1f)|0xa0); //驱动蜂鸣器
P0 = 0x40;
P2 &= 0x1f; //关掉实时锁存,避免改变工作状态