题目:让8路LED指示灯闪烁3遍然后熄灭,紧接着依次点亮LED 指示灯,最后依次熄灭指示灯。
所需元器件:
一、介绍器件:
1、74HC138译码器:三个输入控制八路互斥的有效输出,A B C所对应的二进制数为 Y0 ~ Y7 。
2、74HC573锁存器:当锁存器使能端LE为高电平,这些器件的锁存对于数据是透明的(输出同步),当锁存器的使能端变为低电平,符合建立的时间和保持时间的数据会被锁存(改变输入端的数据,不会影响输出端)。
3、74HC02或非门:WR是低电平0,Y4是低电平时,Y4C输出1。
4、蓝桥杯的板子在解决这个题目时会有蜂鸣器一直响的问题,本代码已经通过蜂鸣器的配置,解决这个问题。
二、代码
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
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 LEDRunning() //LED跑马灯函数
{
unsigned char n;
HC138_C = 1; //译码器引脚定义 Y4
HC138_B = 0;
HC138_A = 0;
for(n = 0; n < 3; n++) //闪烁3次
{
P0 = 0x00;
Delay(1000);
Delay(1000);
P0 = 0xff;
Delay(1000);
Delay(1000);
}
for(n = 0; n <= 8; n++) //每个灯循环点亮
{
P0 = 0xff << n;
Delay(1000);
Delay(1000);
}
for(n = 0; n <= 8; n++) //每个灯循环熄灭
{
P0 = ~(0xff << n);
Delay(1000);
Delay(1000);
}
}
void InitBuzzer() //与蜂鸣器相连的设置
{
HC138_C = 1; //译码器引脚定义 Y5
HC138_B = 0;
HC138_A = 1;
P0 = 0x00;
}
void main()
{
InitBuzzer();
while(1)
{
LEDRunning();
}
}