keil5用51单片机控制8个流水灯顺序点亮,同时在数码管中显示当前灯号,同时蜂鸣器响一次
时间: 2023-06-13 11:08:28 浏览: 151
以下是基于C语言的Keil5代码,可以控制8个流水灯顺序点亮,同时在数码管中显示当前灯号,同时蜂鸣器响一次:
```c
#include <reg51.h>
// 定义8个LED灯的IO口
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;
// 定义数码管的IO口
sbit DIG1 = P2^4;
sbit DIG2 = P2^5;
sbit DIG3 = P2^6;
sbit DIG4 = P2^7;
// 定义蜂鸣器的IO口
sbit BEEP = P3^5;
// 定义变量
unsigned char led_num = 1; // 当前点亮的LED灯编号
// 延时函数
void Delay(unsigned int t) {
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 120; j++);
}
// 8个LED灯顺序点亮
void LED_Flow() {
LED1 = 1; LED2 = 0; LED3 = 0; LED4 = 0;
LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 0;
LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 0;
LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 1;
LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0;
LED5 = 1; LED6 = 0; LED7 = 0; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0;
LED5 = 0; LED6 = 1; LED7 = 0; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0;
LED5 = 0; LED6 = 0; LED7 = 1; LED8 = 0;
Delay(500);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0;
LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 1;
Delay(500);
}
// 数码管显示当前灯号
void Display_LED_Num() {
unsigned char i = 0;
unsigned char temp = led_num;
unsigned char num[4] = {0, 0, 0, 0}; // 数码管显示的4个数字
// 分离出每一位数字
while(temp) {
num[i] = temp % 10;
temp /= 10;
i++;
}
// 数码管显示
DIG1 = 1; DIG2 = 0; DIG3 = 0; DIG4 = 0;
P0 = num[0];
Delay(5);
DIG1 = 0; DIG2 = 1; DIG3 = 0; DIG4 = 0;
P0 = num[1];
Delay(5);
DIG1 = 0; DIG2 = 0; DIG3 = 1; DIG4 = 0;
P0 = num[2];
Delay(5);
DIG1 = 0; DIG2 = 0; DIG3 = 0; DIG4 = 1;
P0 = num[3];
Delay(5);
}
// 蜂鸣器响一次
void Beep() {
BEEP = 1;
Delay(100);
BEEP = 0;
}
// 主函数
void main() {
while(1) {
LED_Flow(); // 8个LED灯顺序点亮
Display_LED_Num(); // 数码管显示当前灯号
Beep(); // 蜂鸣器响一次
led_num++; // 当前点亮的LED灯编号+1
if(led_num > 8) led_num = 1; // 如果已经点亮了8个LED灯,则重新从1开始点亮
}
}
```
其中,LED_Flow()函数用来实现8个LED灯顺序点亮的效果,Display_LED_Num()函数用来在数码管中显示当前灯号,Beep()函数用来控制蜂鸣器响一次。在主函数中,我们循环执行LED_Flow()、Display_LED_Num()和Beep()函数,同时让当前点亮的LED灯编号加1,如果已经点亮了8个LED灯,则重新从1开始点亮。