蜂鸣器和继电器属于单片机外设,选择Y5后,P0端口可控制外设
设备与P0之间连接有ULN2003,其里面有非门,即给P0口一个低电平蜂鸣器(N BUZZ)不叫、继电器(N RELAY)不吸合,给P0口一个高电平蜂鸣器叫、继电器吸合
下面实现一个程序功能先让LED闪烁3次,然后LED依次从左到右依次点亮,接着蜂鸣器叫一声后LED从右到左依次熄灭,然后继电器吸合一次,循环执行(放在mian函数while里不断执行)
#include "reg52.h"
void Delay(unsigned int xms) //@12.000MHz
{
while(xms--)
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
void InitHC138(unsigned char n)
{
switch(n)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void OutputP0(unsigned char channel,unsigned char dat)
{
InitHC138(channel);
P0=dat;
}
void LED()
{
unsigned char i;
for(i=0;i<3;i++) //LED闪烁
{
OutputP0(4,0x00);
Delay(500);
OutputP0(4,0xff);
Delay(500);
}
for(i=1;i<=8;i++) //LED从左到右依次点亮
{
OutputP0(4,(0xff<<i));
Delay(500);
}
OutputP0(5,0x10); //蜂鸣器叫一声
Delay(500);
OutputP0(5,0x00); //关闭蜂鸣器
for(i=1;i<=8;i++)
{
OutputP0(4,~(0xff<<i));
Delay(500);
}
OutputP0(5,0x40); //继电器吸合
Delay(500);
OutputP0(5,0x00); //关闭继电器
}
void Initsys() //系统初始化,关闭外设
{
OutputP0(5,0x00);
}
void main()
{
Initsys();
while(1)
{
LED();
}
}