LED灯全灭。每当K1按下,利用外部中断0,实现连接在P2口8个LED闪烁10次;每当K2按下,利用外部中断1,从D0到D7依次流水点亮代码
时间: 2023-10-09 17:10:16 浏览: 168
下面是符合您要求的51单片机的代码:
```c
#include <reg52.h>
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
unsigned char led_count = 0;
void delay_ms(unsigned int ms) { // 延时函数,精度为1ms
unsigned int i, j;
for(i = 0; i < ms; i++) {
for(j = 0; j < 1141; j++); // 这里的延时时间是根据实际情况调整的
}
}
void main() {
EA = 1; // 开启中断总开关
EX0 = 1; // 开启外部中断0
IT0 = 1; // 确定外部中断0触发方式为下降沿触发
EX1 = 1; // 开启外部中断1
IT1 = 1; // 确定外部中断1触发方式为下降沿触发
while(1) {
P2 = 0xFF; // 所有LED灯全灭
}
}
void int0_isr() interrupt 0 { // 外部中断0的中断服务函数
unsigned char i, j;
for(i = 0; i < 10; i++) { // 闪烁10次
for(j = 0; j < 8; j++) {
P2 = ~(1 << j);
delay_ms(100);
}
}
}
void int1_isr() interrupt 2 { // 外部中断1的中断服务函数
P2 = 0x00; // 先将所有LED灯全灭
while(1) {
P2 = ~(1 << led_count); // 依次点亮LED灯
delay_ms(100);
led_count++;
if(led_count >= 8) { // 点亮完所有LED灯后重新开始
led_count = 0;
}
}
}
```
以上代码实现了按下K1时,P2口的8个LED灯会闪烁10次;按下K2时,P2口的8个LED灯会依次流水点亮。需要注意的是,外部中断0对应的是P3.2口,外部中断1对应的是P3.3口。
阅读全文