51单片机k1、k0口接高电平,点亮二极管,然后把k0置低电平并报警,然后恢复中断1停止报警又从最开始的报警处执行程序的代码
时间: 2024-03-20 13:39:13 浏览: 41
以下是一个简单的51单片机程序,可以实现您的要求:
```c
#include <reg51.h>
sbit LED = P1^0; // 二极管连接的IO口
sbit K0 = P3^0; // K0连接的IO口
sbit K1 = P3^1; // K1连接的IO口
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 125; j++);
}
void main()
{
EA = 1; // 开启总中断
EX1 = 1; // 开启外部中断1
IT1 = 1; // 边沿触发方式
while(1)
{
if(K0 == 0) // 如果K0被按下
{
P2 = 0x55; // 发出报警信号
}
else
{
P2 = 0; // 停止报警信号
}
}
}
void Interrupt1() interrupt 2 // 外部中断1的中断服务程序
{
LED = ~LED; // 点亮/熄灭二极管
delay(500); // 延时一段时间
LED = ~LED; // 再次点亮/熄灭二极管
delay(500); // 再次延时
while(K1 == 1); // 等待K1被松开
}
```
上述代码中,我们首先定义了三个IO口的引脚,然后定义了一个延时函数。在主函数中,我们先开启了总中断和外部中断1,并设置了外部中断1的触发方式为边沿触发。然后在一个无限循环中,不断检测K0是否被按下,如果被按下则发出报警信号,否则停止报警信号。
在外部中断1的中断服务程序中,我们先翻转二极管的状态,然后延时一段时间,再次翻转二极管的状态,并再次延时。最后,我们等待K1被松开,这样程序就会回到最开始的报警处执行。
请注意,您需要根据具体的硬件连接情况,修改上述代码中的引脚定义和报警信号的输出方式。同时,您需要根据具体需求,对延时时间进行调整。
阅读全文