51单片机编程,主程序控制 LED 闪烁,外部中断 0 实现 LED 从左向右流水,外部中断 1 实现 LED 从右向左流水。
时间: 2024-02-12 16:06:15 浏览: 71
好的,以下是51单片机的代码实现:
```
#include <reg51.h>
// 定义LED端口,可以根据实际接口进行修改
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
// 定义延时函数
void delay(unsigned int t) {
unsigned int i, j;
for(i = 0; i < t; i++) {
for(j = 0; j < 125; j++);
}
}
// LED从左向右流水函数
void LED_Left() {
unsigned char i;
for(i = 0; i < 8; i++) {
// 依次点亮LED灯
switch(i) {
case 0: LED1 = 1; break;
case 1: LED2 = 1; break;
case 2: LED3 = 1; break;
case 3: LED4 = 1; break;
case 4: LED5 = 1; break;
case 5: LED6 = 1; break;
case 6: LED7 = 1; break;
case 7: LED8 = 1; break;
}
delay(500); // 延时500ms
// 依次熄灭LED灯
switch(i) {
case 0: LED1 = 0; break;
case 1: LED2 = 0; break;
case 2: LED3 = 0; break;
case 3: LED4 = 0; break;
case 4: LED5 = 0; break;
case 5: LED6 = 0; break;
case 6: LED7 = 0; break;
case 7: LED8 = 0; break;
}
}
}
// LED从右向左流水函数
void LED_Right() {
unsigned char i;
for(i = 7; i >= 0; i--) {
// 依次点亮LED灯
switch(i) {
case 0: LED1 = 1; break;
case 1: LED2 = 1; break;
case 2: LED3 = 1; break;
case 3: LED4 = 1; break;
case 4: LED5 = 1; break;
case 5: LED6 = 1; break;
case 6: LED7 = 1; break;
case 7: LED8 = 1; break;
}
delay(500); // 延时500ms
// 依次熄灭LED灯
switch(i) {
case 0: LED1 = 0; break;
case 1: LED2 = 0; break;
case 2: LED3 = 0; break;
case 3: LED4 = 0; break;
case 4: LED5 = 0; break;
case 5: LED6 = 0; break;
case 6: LED7 = 0; break;
case 7: LED8 = 0; break;
}
}
}
// 外部中断0中断服务函数
void External_Int0() interrupt 0 {
LED_Left(); // 调用LED从左向右流水函数
}
// 外部中断1中断服务函数
void External_Int1() interrupt 2 {
LED_Right(); // 调用LED从右向左流水函数
}
int main() {
// 设置外部中断0和外部中断1
EX0 = 1; // 允许外部中断0
EX1 = 1; // 允许外部中断1
IT0 = 1; // 设置外部中断0触发方式为下降沿触发
IT1 = 1; // 设置外部中断1触发方式为下降沿触发
EA = 1; // 允许中断
while(1) {
// 控制LED闪烁
LED1 = ~LED1;
LED2 = ~LED2;
LED3 = ~LED3;
LED4 = ~LED4;
LED5 = ~LED5;
LED6 = ~LED6;
LED7 = ~LED7;
LED8 = ~LED8;
delay(500);
}
return 0;
}
```
以上代码实现中,使用P1口控制LED灯的点亮和熄灭,使用定时器延时来实现LED流水效果。同时使用外部中断0和外部中断1来控制LED的流水方向。在主程序中加入一个循环,不断执行LED的闪烁、从左向右流水、从右向左流水等操作。需要注意的是,需要设置外部中断的触发方式和使能中断。
阅读全文