矩阵键盘练习题目:
//先将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指示灯不断闪烁
}
}

1万+

被折叠的 条评论
为什么被折叠?



