五一单片机按键控制流水灯
时间: 2023-05-28 10:07:57 浏览: 597
这是一个基于8051单片机的按键控制流水灯程序,使用Keil C编译器进行开发。
程序实现的功能是:通过按键控制LED灯的流水效果。按下按键时,流水灯逆向闪烁;松开按键时,流水灯正向闪烁。
程序思路如下:
1. 定义端口连接LED灯和按键,分别为P1和P3。
2. 定义全局变量state表示流水灯的状态,初始值为0,表示正向闪烁。
3. 定义中断函数interrupt0,用于检测按键是否按下。
4. 在主函数中初始化中断向量表、端口方向和初始值。
5. 在主函数中使用while循环控制LED灯的流水效果。
程序代码如下:
```c
#include <reg51.h>
// 定义端口连接LED灯和按键
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit KEY = P3^2;
// 定义全局变量state表示流水灯的状态
int state = 0;
// 中断函数interrupt0,用于检测按键是否按下
void interrupt0() interrupt 0 {
if (KEY == 0) { // 检测按键是否按下
state = !state; // 改变流水灯的状态
while (KEY == 0); // 等待按键松开
}
}
void main() {
// 初始化中断向量表
IE = 0x81;
IT0 = 1;
// 初始化端口方向和初始值
P1 = 0x00;
P3 = 0xFF;
while (1) {
// 根据流水灯的状态控制LED灯的流水效果
if (state == 0) {
LED1 = 1; LED2 = 0; LED3 = 0; LED4 = 0; // 正向闪烁
delay(200);
LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 0;
delay(200);
LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 0;
delay(200);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 1;
delay(200);
} else {
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 1; // 逆向闪烁
delay(200);
LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 0;
delay(200);
LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 0;
delay(200);
LED1 = 1; LED2 = 0; LED3 = 0; LED4 = 0;
delay(200);
}
}
}
// 延时函数
void delay(unsigned int t) {
unsigned int i, j;
for (i = 0; i < t; i++) {
for (j = 0; j < 100; j++);
}
}
```
阅读全文