51单片机输出8个呼吸灯闪烁,一个按键控制呼吸灯频率,2秒为一个呼吸周期C代码
时间: 2024-02-06 15:09:19 浏览: 86
以下是基于51单片机的C语言代码实现:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
// 定义IO口
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
sbit KEY = P3^0;
// 延时函数
void delay(uint time) {
uint i, j;
for (i = time; i > 0; i--)
for (j = 110; j > 0; j--);
}
// 呼吸灯函数
void breathingLED(uint freq) {
uchar i, j;
uint t;
while (1) {
for (i = 0; i < 100; i++) {
t = 10 * freq;
for (j = 0; j < 255; j++) {
if (j < i)
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 0; // 灭
else
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 1; // 亮
delay(t);
}
}
for (i = 100; i > 0; i--) {
t = 10 * freq;
for (j = 0; j < 255; j++) {
if (j < i)
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 0; // 灭
else
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 1; // 亮
delay(t);
}
}
}
}
// 主函数
void main() {
uint freq = 50; // 初始频率为50
uchar count = 0;
while (1) {
if (!KEY) { // 按键按下
delay(20); // 延时消抖
if (!KEY) { // 确认按键按下
count++;
if (count == 1)
freq = 30; // 频率为30
else if (count == 2)
freq = 50; // 频率为50
else if (count == 3)
freq = 70; // 频率为70
else if (count == 4) {
freq = 90; // 频率为90
count = 0;
}
while (!KEY); // 等待按键释放
}
}
breathingLED(freq); // 呼吸灯
}
}
```
该代码使用P2口控制8个LED灯,P3.0口作为按键控制呼吸灯频率。通过按下按键可以切换呼吸灯的频率,每按一次,频率增加20,最高为90,再次按下则回到30。在呼吸灯函数中,使用PWM来控制灯光的亮度变化,从而实现呼吸灯效果。
阅读全文