用51单片机控制8个流水灯顺序点亮,同时在共阳极数码管中显示当前点亮灯号,同时蜂鸣器响一次
时间: 2023-06-18 13:02:47 浏览: 75
以下是用51单片机控制8个流水灯顺序点亮的代码:
```c
#include <reg51.h>
#define LED P1
#define delay_time 1000
void delay(unsigned int t) {
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main() {
unsigned char i;
P0 = 0x00;
LED = 0x00;
while (1) {
for (i = 0; i < 8; i++) {
LED = ~(0x01 << i);
delay(delay_time);
}
}
}
```
同时在共阳极数码管中显示当前点亮灯号,可以使用一个数码管驱动程序和一个计数器。以下是一个简单的数码管驱动程序:
```c
#define DIG P2
#define DIO P0
#define delay_time 2
void display(unsigned char n) {
unsigned char i;
DIG = 0xfe;
DIO = n;
for (i = 0; i < delay_time; i++);
DIG = 0xfd;
DIO = n;
for (i = 0; i < delay_time; i++);
DIG = 0xfb;
DIO = n;
for (i = 0; i < delay_time; i++);
DIG = 0xf7;
DIO = n;
for (i = 0; i < delay_time; i++);
}
void clear_display() {
DIG = 0xff;
DIO = 0xff;
}
```
然后在主函数中加入计数器和数码管的显示:
```c
void main() {
unsigned char i = 0;
P0 = 0x00;
LED = 0x00;
clear_display();
while (1) {
for (i = 0; i < 8; i++) {
LED = ~(0x01 << i);
display(i);
delay(delay_time);
}
}
}
```
最后,让蜂鸣器响一次可以使用以下代码:
```c
#define BUZZER P3_5
void beep() {
BUZZER = 1;
delay(100);
BUZZER = 0;
}
void main() {
unsigned char i = 0;
P0 = 0x00;
LED = 0x00;
clear_display();
while (1) {
for (i = 0; i < 8; i++) {
LED = ~(0x01 << i);
display(i);
delay(delay_time);
}
beep();
}
}
```
这样就完成了用51单片机控制8个流水灯顺序点亮,同时在共阳极数码管中显示当前点亮灯号,同时蜂鸣器响一次的功能。