(一)流水灯实验 试用单片机端口扩展8个发光二极管和开关量输入,编制程序实现通过开关量控制的花型显示,不同的开关状态可切换不同的花型。花型可以自行选择。 参考花型: (1)00000001左循环 (2)00000001右循环 (3)按00000001,00000011,00000111,……,11111111规律递增。 (4)01010101与10101010交替闪烁5次。 说明:参考花型中,1代表灯亮,0代表灯灭; 拨动开关,或者按下对应的按键,根据开关或按键的情况转到不同的花色; 用工艺实习的单片机板,可以用4个按键,分别对应不同的流水灯状态。
时间: 2024-02-18 14:02:45 浏览: 135
单片机 流水灯 实验
以下是基于C语言的单片机程序,实现流水灯实验的要求:
```c
#include <reg52.h> // 8051系列单片机头文件
#define LED P0 // 定义LED灯的控制端口
// 定义不同的花型
unsigned char pattern1 = 0x01; // 00000001左循环
unsigned char pattern2 = 0x01; // 00000001右循环
unsigned char pattern3 = 0x01; // 递增
unsigned char pattern4 = 0x55; // 01010101与10101010交替闪烁
// 定义函数,用于控制不同的花型显示
void display(unsigned char pattern) {
int i, j;
for(i = 0; i < 8; i++) {
LED = pattern; // 输出当前花型
for(j = 0; j < 20000; j++); // 延时
pattern = pattern << 1 | pattern >> 7; // 循环左移
}
}
void main() {
unsigned char state = 0; // 定义状态变量,记录当前的流水灯状态
while(1) {
// 检测按键状态
if(P1 == 0x01) { // 第一个按键,切换到左循环
state = 1;
} else if(P1 == 0x02) { // 第二个按键,切换到右循环
state = 2;
} else if(P1 == 0x04) { // 第三个按键,切换到递增
state = 3;
} else if(P1 == 0x08) { // 第四个按键,切换到交替闪烁
state = 4;
}
// 根据状态变量,选择不同的花型显示
switch(state) {
case 1:
display(pattern1);
break;
case 2:
display(pattern2);
break;
case 3:
display(pattern3);
pattern3 = (pattern3 << 1) | (pattern3 >> 7); // 递增
break;
case 4:
display(pattern4);
pattern4 = ~pattern4; // 取反
break;
}
}
}
```
在程序中,使用`P0`作为LED灯的控制端口,使用`P1`作为按键输入端口。定义了4个不同的花型模式,以及一个状态变量`state`用于记录当前的流水灯状态。在`main`函数中,通过不断地检测按键状态和状态变量,选择不同的花型显示。`display`函数用于控制LED灯输出不同的花型。
阅读全文