蜂鸣器继电器基础练习题目:
先让8路LED指示灯闪烁三遍后熄灭,接着依次点亮LED指示灯,继电器吸合一会儿后断开,后依次熄灭指示灯,蜂鸣器叫一会后关闭。
蓝桥杯开发板原理图:
源码:
#include <reg52.h> // 包含 51 单片机的头文件,定义了特殊功能寄存器
// 延时函数,通过循环实现简单延时
// 参数 t:延时时间,通过循环次数控制
void delay(unsigned int t) {
while (t--); // 第一个循环,用于消耗时间
while (t--); // 第二个循环,进一步消耗时间以延长延时
}
// 74HC138 译码器控制函数
// 参数 n:选择译码器的输出通道
void HC138(unsigned char n) {
switch (n) {
case 4:
P2 = (P2 & 0x1f) | 0x80; // 将 P2 口的低 5 位清零,然后设置第 7 位为 1,选择通道 4
break;
case 5:
P2 = (P2 & 0x1f) | 0xa0; // 将 P2 口的低 5 位清零,然后设置第 6、7 位为 1,选择通道 5
break;
case 6:
P2 = (P2 & 0x1f) | 0xc0; // 将 P2 口的低 5 位清零,然后设置第 7、6 位为 1,选择通道 6
break;
case 7:
P2 = (P2 & 0x1f) | 0xe0; // 将 P2 口的低 5 位清零,然后设置第 5、6、7 位为 1,选择通道 7
break;
}
}
// 主 LED 控制函数,实现多种 LED 显示效果及与其他设备的交互
void LEDzhu() {
unsigned char i; // 定义循环变量
HC138(4); // 选择控制主 LED 的通道
// 循环 3 次,实现 LED 全亮和全灭交替闪烁
for (i = 1; i <= 3; i++) {
P0 = 0x00; // P0 口输出 0x00,点亮所有连接到 P0 口的 LED
delay(60000); // 延时
P0 = 0xff; // P0 口输出 0xff,熄灭所有连接到 P0 口的 LED
delay(60000); // 延时
}
// 循环 8 次,实现 LED 从右到左依次点亮
for (i = 1; i <= 8; i++) {
P0 = 0xff << i; // 通过左移操作,每次点亮一个 LED
delay(60000); // 延时
}
HC138(5); // 选择控制其他设备(可能是与小喇叭相关的控制)的通道
P0 = 0x10; // 向 P0 口输出 0x10,对相关设备进行操作
delay(60000); // 延时
P0 = 0x00; // 恢复 P0 口为 0x00
HC138(4); // 重新选择控制主 LED 的通道
// 循环 8 次,实现 LED 从右到左依次熄灭
for (i = 1; i <= 8; i++) {
P0 = ~(0xff << i); // 通过取反和左移操作,每次熄灭一个 LED
delay(60000); // 延时
}
HC138(5); // 再次选择控制其他设备(可能是与小喇叭相关的控制)的通道
P0 = 0x40; // 向 P0 口输出 0x40,对相关设备进行操作
delay(60000); // 延时
P0 = 0x00; // 恢复 P0 口为 0x00
}
// 小喇叭关闭函数
void xiaoyin() {
HC138(5); // 选择控制小喇叭的通道
P0 = 0x00; // 小喇叭控制,设置 P0 口为 0x00,具体动作取决于硬件连接
}
// 主函数,程序入口
void main() {
xiaoyin(); // 初始化小喇叭状态
while (1) { // 无限循环
LEDzhu(); // 执行主 LED 控制函数,实现各种显示效果及相关设备控制
}
}