奇数次按下SW1,LED1和LED2亮偶数次按下SW1,LED3和LED4闪烁重复23步*/ 1.使用子程序--子程序1(LED1,2常亮);子程序2(led3,4闪烁) 2.按键中断标志位与按键按下标志位共同判断按键按下的次数(改变按键按下标志位的数值)
时间: 2024-02-25 07:56:54 浏览: 87
好的,下面是一个示例程序,实现了您的要求。
```
#include <reg52.h>
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
sbit SW1 = P3^2;
unsigned char count = 0; // 按下SW1的次数
void delay(unsigned int ms) { // 延时函数
unsigned int i, j;
for (i = ms; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void LED1_2() { // 子程序1,LED1和LED2常亮
LED1 = 0;
LED2 = 0;
}
void LED3_4() { // 子程序2,LED3和LED4闪烁
unsigned char i, j;
for (i = 0; i < 3; i++) {
LED3 = 1;
LED4 = 1;
delay(500);
LED3 = 0;
LED4 = 0;
delay(500);
}
}
void main() {
SW1 = 1; // 初始化SW1为高电平
EA = 1; // 开启总中断
EX0 = 1; // 开启外部中断0
while (1) {
if (count % 2 == 1) {
LED1_2();
} else {
LED3_4();
}
}
}
void int0() interrupt 0 { // 外部中断0的中断服务程序
delay(20); // 延时去抖
if (SW1 == 0) { // 判断SW1是否按下
count++; // 按下次数加1
}
}
```
在这个程序中,我们使用了两个子程序来实现LED1和LED2常亮,以及LED3和LED4闪烁。在主程序中,我们通过计数器count的奇偶性来判断执行哪个子程序。在外部中断0的中断服务程序中,我们判断SW1是否按下,并将按下次数加1。
需要注意的是,外部中断0需要连接一个开关到P3.2引脚,SW1按下时会触发外部中断0。同时,在使用子程序时,需要根据实际硬件连接情况修改LED的控制引脚。
阅读全文