一、打开蜂鸣器500ms,关闭蜂鸣器500ms,打开继电器500ms,关闭继电器500ms
#include<stc15.h>
unsigned int DT = 500;
void Delay_MS(unsigned int MS);
void main(void)
{
P27=1;P26=0;P25=1;//使能控制蜂鸣器、继电器的74HC573的锁存器
//P2=0XA0; 1010 0000==P27=1;P26=0;P25=0;
P0=0X00; //关闭蜂鸣器、继电器
P27=1;P26=0;P25=0;//使能控制LED的74HC573的锁存器
P0=0XFF;//关闭LED
P27=1;P26=0;P25=1;//使能控制蜂鸣器、继电器的74HC573的锁存器
//P2=0XA0; 1010 0000==P27=1;P26=0;P25=0;
P0=0X00; //关闭蜂鸣器、继电器
while(1)
{
P06=1;Delay_MS(DT);//打开蜂鸣器500MS
P06=0;Delay_MS(DT);//关闭蜂鸣器500MS
P04=1;Delay_MS(DT);//打开继电器500MS
P04=0;Delay_MS(DT);//关闭继电器500MS
//
// P0=0X40;Delay_MS(DT);打开蜂鸣器500MS
// P0=0X00;Delay_MS(DT);关闭蜂鸣器500MS
//
// P0=0X10;Delay_MS(DT);//打开继电器500MS
// P0=0X00;Delay_MS(DT);//关闭继电器500MS
}
}
void Delay_MS(unsigned int MS)
{
unsigned int i,j;
for(i=0;i<MS;i++)
{
for(j=853;j>0;j--);
}
}
二、上电初始化程序,上电之后,关闭所有的LED,数码管,蜂鸣器,继电器
#include<stc15.h>
void All_Init(void);
void main(void)
{
All_Init();
while(1);
}
void All_Init(void)
{
P2=0XA0;//打开蜂鸣器、继电器的74HC573的锁存器
P0=0X00;//关闭蜂鸣器、继电器
P2=0X80;//打开控制LED的74HC573的锁存器
P0=0XFF;//关闭LED
P2=0XC0;//打开控制数码管位选的锁存器
P0=0XFF;//选中所有的数码管
P2=0XE0;//打开控制数码管段选的锁存器
P0=0XFF;//关闭所有的数码管
// P2=0XC0;//打开控制数码管位选的锁存器
// P0=0X00;//不选中所有的数码管
}
三、LED先闪3次,再依次点亮,继电器吸合,灯再依次熄灭,最后蜂鸣器叫一下
#include<reg52.h>
void Delay(unsigned int t);
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 LEDRunning()
{
unsigned char i;
HC138_C=1;
HC138_B=0;
HC138_A=0; // InitHC138(4);
for(i=0;i<3;i++)
{
P0=0X00;
Delay(60000);
Delay(60000);
P0=0XFF;
Delay(60000);
Delay(60000);
}
for(i=1;i<=8;i++)
{
P0=0XFF<<i;
Delay(60000);
Delay(60000);
}
HC138_C=1;
HC138_B=0;
HC138_A=1; //Y5输出低电平 InitHC138(5);
P0=0X10; //继电器打开
Delay(60000);
Delay(60000);
P0=0X00;
HC138_C=1;
HC138_B=0;
HC138_A=0;
for(i=1;i<=8;i++)
{
P0=~(0XFF<<i);
Delay(60000);
Delay(60000);
}
HC138_A=1;
HC138_B=0;
HC138_C=1; //Y5输出低电平
P0=0X40; //蜂鸣器打开
Delay(60000);
Delay(60000);
P0=0X00;
}
void InitSystem()
{
HC138_A=1;
HC138_B=0;
HC138_C=1; //Y5输出低电平
P0=0X00;
}
void main()
{
InitSystem();
while(1)
{
LEDRunning();
}
}
四、基于上一段代码的优化
#include<stc15.h>
void Delay(unsigned int t);
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7; //用P2=(P2&0X1F)|0X80;,将sbit删除
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; //P2=(P2&0X1F)|0X80;
break;
case 5:
HC138_C=1;
HC138_B=0;
HC138_A=1; //P2=(P2&0X1F)|0XA0;
break;
case 6:
HC138_C=1;
HC138_B=1;
HC138_A=0; //P2=(P2&0X1F)|0XC0;
break;
case 7:
HC138_C=1;
HC138_B=1;
HC138_A=1; //P2=(P2&0X1F)|0XE0;
break;
}
}
void OutPutP0(unsigned char channel,unsigned char dat)
{
InitHC138(channel);
P0=dat;
}
void LEDRunning()
{
unsigned char i;
// HC138_C=1;
// HC138_B=0;
// HC138_A=0; // InitHC138(4);
for(i=0;i<3;i++)
{
OutPutP0(4,0X00);
//P0=0X00;
Delay(60000);
Delay(60000);
P0=0XFF; //OutPutP0(4,0XFF);
Delay(60000);
Delay(60000);
}
for(i=1;i<=8;i++)
{
OutPutP0(4,(0XFF<<i));//P0=0XFF<<i;
Delay(60000);
Delay(60000);
}
HC138_C=1;
HC138_B=0;
HC138_A=1; //Y5输出低电平 InitHC138(5);
P0=0X10; //继电器打开
Delay(60000);
Delay(60000);
P0=0X00;
HC138_C=1;
HC138_B=0;
HC138_A=0;
for(i=1;i<=8;i++)
{
P0=~(0XFF<<i);
Delay(60000);
Delay(60000);
}
HC138_A=1;
HC138_B=0;
HC138_C=1; //Y5输出低电平
P0=0X40; //蜂鸣器打开
Delay(60000);
Delay(60000);
P0=0X00;
}
void InitSystem()
{
HC138_A=1;
HC138_B=0;
HC138_C=1; //Y5输出低电平
P0=0X00;
}
void main()
{
InitSystem();
while(1)
{
LEDRunning();
}
}