#include <stdio.h>
#include <intrins.h>
// 定义 LED 引脚
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;
// 定义呼吸灯的亮度变化时间间隔
#define BREATHING_RATE 100
// 定义流水灯的流动速度
#define FLOW_RATE 200
// 定义延时函数
void delay_ms(unsigned int ms) {
unsigned int i;
while (ms--) {
for (i = 0; i < 120; i++);
}
}
// 呼吸灯函数
void breathing_LED() {
// 逐渐增加 LED 亮度
for (int i = 0; i < 255; i++) {
LED1 = i;
LED2 = i;
LED3 = i;
LED4 = i;
LED5 = i;
LED6 = i;
LED7 = i;
LED8 = i;
delay_ms(BREATHING_RATE);
// 逐渐降低 LED 亮度
for (int j = 255; j >= 0; j--) {
LED1 = j;
LED2 = j;
LED3 = j;
LED4 = j;
LED5 = j;
LED6 = j;
LED7 = j;
LED8 = j;
delay_ms(BREATHING_RATE);
}
}
}
// 流水灯函数
void flowing_LED() {
static unsigned char index = 0;
// 依次点亮 LED
LED1 = 0;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 0;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 1;
LED3 = 0;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 0;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 0;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 0;
LED7 = 1;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 0;
LED8 = 1;
delay_ms(FLOW_RATE);
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 0;
delay_ms(FLOW_RATE);
// 切换流水灯方向
if (++index >= 8) {
index = 0;
}
}
int main() {
// 初始化定时器
TMOD = 0x11;
TH0 = 0xFC;
TL0 = 0x66;
ET0 = 1;
TR0 = 1;
// 进入主循环,执行呼吸灯和流水灯效果
while (1) {
breathing_LED();
flowing_LED();
}
}
51 单片机的呼吸灯程序和流水灯程序实验
最新推荐文章于 2024-05-14 09:09:30 发布