蓝桥杯51单片机基础练习7外部中断1

 矩阵键盘练习题目:

//先将j5处跳帽接到2~3引脚,即s5按键接到P32/INT0,s4按键接到P33/INT1.
//定义一个Working()函数,使L1指示灯不断闪烁。将引脚P32引脚定义为外部中断功能
//按键s5就会产生外部中断触发信号,在中断响应函数中,点亮L8指示灯,延迟一段时间后熄灭
//直接在中断服务函数中延时

蓝桥杯开发板原理图:

源码:

#include <reg52.h>  // 包含51单片机的寄存器定义头文件

sbit L1 = P0^0;  // 定义L1指示灯连接到P0口的第0位
sbit L8 = P0^7;  // 定义L8指示灯连接到P0口的第7位

// 延时函数,简单的循环延时
void delay(unsigned int t) {
    while (t--);
}

// 74HC138译码器选择函数,n为选择通道
void HC138(unsigned char n) {
    switch (n) {
        case 4: P2 = (P2 & 0x1f) | 0x80; break;  // 选择通道4
        case 5: P2 = (P2 & 0x1f) | 0xa0; break;  // 选择通道5
        case 6: P2 = (P2 & 0x1f) | 0xc0; break;  // 选择通道6
        case 7: P2 = (P2 & 0x1f) | 0xe0; break;  // 选择通道7
    }
}

// Working函数,使L1指示灯不断闪烁
void Working() {
    L1 = 0;       // 点亮L1指示灯
    delay(60000); // 延时
    L1 = 1;       // 熄灭L1指示灯
    delay(60000); // 延时
}

// 初始化外部中断0
void csh_INT0() {
    IT0 = 1;  // 设置INT0为边沿触发模式
    EX0 = 1;  // 使能外部中断0
    EA = 1;   // 使能总中断
}

// 外部中断0的中断服务函数
void ZD() interrupt 0 {
    L8 = 0;         // 点亮L8指示灯
    delay(60000);   // 延时
    delay(60000);   // 延时
    delay(60000);   // 延时
    delay(60000);   // 延时,总共延时较长
    L8 = 1;         // 熄灭L8指示灯
}

// xiaoyin函数,执行一些初始化操作(具体功能根据硬件设计而定)
void xiaoyin() {
    HC138(5); // 选择74HC138的通道5
    P0 = 0x00; // 将P0口置为低电平
    HC138(4); // 选择74HC138的通道4
    P0 = 0xff; // 将P0口置为高电平
}

void main() {
    csh_INT0(); // 初始化外部中断0
    xiaoyin();  // 执行xiaoyin函数
    while (1) {
        Working(); // 无限循环,使L1指示灯不断闪烁
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值