89c51单片机中断控制两个灯闪烁。两个按钮,按第1个按钮,灯1闪烁,灯2熄灭。按第2个按钮,灯2闪烁,灯1熄灭。用keil c语言编写程序
时间: 2024-10-24 18:14:41 浏览: 80
在8051单片机(如89C51)上实现这个功能,通常需要利用中断处理机制以及IO口的控制。以下是一个简化的Keil C程序示例,假设我们有P1口用于驱动LED和PB口连接按钮:
```c
#include <reg51.h>
sbit LED1 = P1^0; // 灯1接P1.0
sbit LED2 = P1^1; // 灯2接P1.1
sbit BTN1 = P3^0; // 第1个按钮接P3.0
sbit BTN2 = P3^1; // 第2个按钮接P3.1
unsigned char flag1 = 0, flag2 = 0; // 临时标志位
// 中断服务函数 - 按钮按下中断
void interrupt()
{
if (BTN1 == 0) // 如果第一个按钮按下
{
flag1 = ~flag1; // 变化标志位
if (flag1) LED1 = 1; // LED1亮起
else LED1 = 0; // LED1熄灭
}
else if (BTN2 == 0) // 同理,第二个按钮
{
flag2 = ~flag2;
if (flag2) LED2 = 1;
else LED2 = 0;
}
}
int main(void)
{
TR1 = 1; // 打开定时器1(T1)作为外部中断源
EA = 1; // 开启总中断
ET1 = 1; // 设置T1中断允许
IE = 1 << RI; // 设置串行口中断允许
while(1); // 无限循环,等待中断触发
}
```
阅读全文