甩出电路图镇楼
题目 首先让8路LED指示灯闪烁三遍后熄灭,接着依次点亮LED灯,继电器吸合,最后依次熄灭指示灯,蜂鸣器鸣叫。循环上述功能
图上BUZZER是蜂鸣器,下面的是继电器,蜂鸣器已经接电源了,BUZZ再接低电平即可工作。(继电器也是低电平工作)
可以看到BUZZ是ULN2003的输出引脚,ULN2003可以简单理解为一个放大装置,下面是内部原理
值得注意的是,内部有非门,所以要BUZZ置0,需要P06置1
而想要使用573锁存器,就得把Y5C置1,这样逻辑就非常清晰了。
代码如下
#include"reg52.h"
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void InitHC138(unsigned char n)
{
switch(n)
{
case 4:
HC138_C = 1;
HC138_B = 0;
HC138_A = 0;
break;
case 5:
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
break;
case 6:
HC138_C = 1;
HC138_B = 1;
HC138_A = 0;
break;
case 7:
HC138_C = 1;
HC138_B = 1;
HC138_A = 1;
break;
}
}
void OutPut(unsigned char channel,unsigned char dat)
{
InitHC138(channel);
P0 = dat;
}
void InitSystem()//
{
OutPut(5,0x00);
}
void main()
{
InitSystem();
while(1)
{
unsigned char i;
for(i = 0;i < 3;i++)
{
OutPut(4,0x00);
Delay(60000);
Delay(60000);
OutPut(4,0xff);
Delay(60000);
Delay(60000);
}
for(i = 1;i <= 8;i++)
{
OutPut(4,(0XFF << i));//这里dat的形式要注意打括号
Delay(60000);
}
OutPut(5,0x10);
Delay(60000);
Delay(60000);
OutPut(5,0x00);
for(i = 1;i <= 8;i++)
{
OutPut(4,~(0XFF << i));
Delay(60000);
}
OutPut(5,0x40);
Delay(60000);
Delay(60000);
OutPut(5,0x00);
}
}