蓝桥杯51单片机基础练习2蜂鸣器继电器

蜂鸣器继电器基础练习题目:

先让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 控制函数,实现各种显示效果及相关设备控制
    }
}

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值