题目:
首先让8路LED灯闪烁三遍后熄灭,接着依次点亮LED灯,继电器吸合一会儿后断开,然后依次熄灭LED灯,蜂鸣器鸣叫一会儿后关闭。
#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 InitSystem()
{
HC138_C=1;
HC138_B=0;
HC138_A=1; //让Y5输出低电平
//关闭蜂鸣器、继电器
P0=0x00;
}
void Running()
{
unsigned char i;
HC138_C=1;
HC138_B=0;
HC138_A=0; //让Y4输出低电平
//闪烁三遍
for(i=0;i<3;i++)
{
P0=0x00;
delay(60000);
P0=0xff;
delay(60000);
}
//依次点亮
for(i=1;i<=8;i++)
{
P0=0xff<<i;
delay(60000);
}
HC138_C=1;
HC138_B=0;
HC138_A=1; //让Y5输出低电平
//继电器吸合
P0=0x10;
delay(60000);
//继电器断开
P0=0x00;
delay(60000);
HC138_C=1;
HC138_B=0;
HC138_A=0; //让Y4输出低电平
//依次熄灭
for(i=1;i<=8;i++)
{
P0=~(0xff<<i);
delay(60000);
}
HC138_C=1;
HC138_B=0;
HC138_A=1; //让Y5输出低电平
//蜂鸣器响一会儿
P0=0x40;
delay(60000);
//蜂鸣器关闭
P0=0x00;
delay(60000);
}
void main()
{
InitSystem();
while(1)
{
Running();
}
}
优化一
#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 Init_HC138(unsigned char n)
{
switch(n)
{
case 4:
HC138_C=1;
HC138_B=0;
HC138_A=0; //让Y4输出低电平
break;
case 5:
HC138_C=1;
HC138_B=0;
HC138_A=1; //让Y5输出低电平
break;
}
}
void InitSystem()
{
Init_HC138(5); //让Y5输出低电平
//将蜂鸣器、继电器关闭
P0=0x00;
}
void Running()
{
unsigned char i;
Init_HC138(4); //让Y4输出低电平
//闪烁三遍
for(i=0;i<3;i++)
{
P0=0x00;
delay(60000);
P0=0xff;
delay(60000);
}
//依次点亮
for(i=1;i<=8;i++)
{
P0=0xff<<i;
delay(60000);
}
Init_HC138(5); //让Y5输出低电平
//继电器闭合
P0=0x10;
delay(60000);
//继电器断开
P0=0x00;
delay(60000);
Init_HC138(4); //让Y4输出低电平
//依次关闭
for(i=1;i<=8;i++)
{
P0=~(0xff<<i);
delay(60000);
}
Init_HC138(5); //让Y5输出低电平
//蜂鸣器响一会儿
P0=0x40;
delay(60000);
//蜂鸣器关闭
P0=0x00;
delay(60000);
}
void main()
{
InitSystem();
while(1)
{
Running();
}
}
优化二
#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 Init_HC138(unsigned char n)
{
switch(n)
{
case 4:
HC138_C=1;
HC138_B=0;
HC138_A=0; //让Y4输出低电平
break;
case 5:
HC138_C=1;
HC138_B=0;
HC138_A=1; //让Y5输出低电平
break;
}
}
void OutPutP0(unsigned char channel,unsigned char dat)
{
Init_HC138(channel);
P0=dat;
}
void InitSystem()
{
//将蜂鸣器、继电器关闭
OutPutP0(5,0x00); //让Y5输出低电平
}
void Running()
{
unsigned char i;
//闪烁三遍
for(i=0;i<3;i++)
{
OutPutP0(4,0x00); //让Y4输出低电平
delay(60000);
OutPutP0(4,0xff);
delay(60000);
}
//依次点亮
for(i=1;i<=8;i++)
{
OutPutP0(4,(0xff<<i));
delay(60000);
}
//继电器吸合
OutPutP0(5,0x10); //让Y5输出低电平
delay(60000);
//继电器断开
OutPutP0(5,0x00);
delay(60000);
//依次熄灭
for(i=1;i<=8;i++)
{
OutPutP0(4,~(0xff<<i)); //让Y4输出低电平
delay(60000);
}
//蜂鸣器响一会儿
OutPutP0(5,0x40); //让Y5输出低电平
delay(60000);
//蜂鸣器关闭
OutPutP0(5,0x00);
delay(60000);
}
void main()
{
InitSystem();
while(1)
{
Running();
}
}
优化三
#include "reg52.h"
//延时函数
void delay(unsigned int t)
{
while(t--);
while(t--);
}
//选择锁存器
void Init_HC138(unsigned char n)
{
switch(n)
{
case 4:
P2=(P2&0x1f)|0x80; //让Y4输出低电平
//先让P2与上0001 1111(0x1f),可将高三位清零;
//再或上1000 0000(0x80),可将高三位置为100,即选择Y4
break;
case 5:
P2=(P2&0x1f)|0xa0; //让Y5输出低电平
//先让P2与上0001 1111(0x1f),可将高三位清零;
//再或上1010 0000(0xa0),可将高三位置为101,即选择Y5
break;
}
}
void OutPutP0(unsigned char channel,unsigned char dat)
{
Init_HC138(channel);
P0=dat;
}
void InitSystem()
{
//将蜂鸣器、继电器关闭
OutPutP0(5,0x00); //让Y5输出低电平
}
void Running()
{
unsigned char i;
//闪烁三遍
for(i=0;i<3;i++)
{
OutPutP0(4,0x00); //让Y4输出低电平
delay(60000);
OutPutP0(4,0xff);
delay(60000);
}
//依次点亮
for(i=1;i<=8;i++)
{
OutPutP0(4,(0xff<<i));
delay(60000);
}
//继电器吸合
OutPutP0(5,0x10); //让Y5输出低电平
delay(60000);
//继电器断开
OutPutP0(5,0x00);
delay(60000);
//依次熄灭
for(i=1;i<=8;i++)
{
OutPutP0(4,~(0xff<<i)); //让Y4输出低电平
delay(60000);
}
//蜂鸣器响一会儿
OutPutP0(5,0x40); //让Y5输出低电平
delay(60000);
//蜂鸣器关闭
OutPutP0(5,0x00);
delay(60000);
}
void main()
{
InitSystem();
while(1)
{
Running();
}
}