在嵌入式系统或微控制器项目中,LED流水灯是一种常见的实验项目,它不仅能够展示基本的GPIO(通用输入输出)控制,还能通过不同的模式增加趣味性。本文将探讨四种不同的流水灯效果,并通过代码示例展示如何实现它们。
效果1:依次亮(循环)
这种效果是最基本的流水灯效果,LED灯按照顺序依次亮起,当最后一个LED灯亮起后,又从头开始循环。这种效果可以通过一个简单的for循环实现,循环中依次设置每个LED灯为高电平(亮),然后延时一段时间,再设置为低电平(灭)。随后,下一个LED灯被点亮,如此循环。
代码实现:
#include "Config.h"
#include "STC8G_H_GPIO.h"
#include "STC8G_H_Delay.h"
// 每个LED灯 所代表的引脚
#define LED1 P27
#define LED2 P26
#define LED3 P15
#define LED4 P14
#define LED5 P23
#define LED6 P22
#define LED7 P21
#define LED8 P20
#define LED_SW P45
// GPIO配置 输入/输出
void GPIO_config(void) {
// 总开关 P4 端口下的5号引脚 推挽模式
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
GPIO_InitStructure.Pin = GPIO_Pin_5; //指定要初始化的IO,
GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P4, &GPIO_InitStructure);//初始化
// P1端口下的 4、5号引脚 准双向口模式
GPIO_InitStructure.Pin = GPIO_Pin_4 | GPIO_Pin_5; //指定要初始化的IO,
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P1, &GPIO_InitStructure);//初始化
// P2端口下的 0 到 7 号引脚 准双向口模式
GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7; //指定要初始化的IO,
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P2, &GPIO_InitStructure);//初始化
}
int main() {
int i; // 定义for循环初始化下标变量
// 1. 配置8个灯和总开关SW的引脚工作模式
GPIO_config();
// 2. 开启总中断
EA = 1;
// 4. 开启总开关
LED_SW = 0;
// 5. 开启流水灯
while(1) {
// 依次亮
for(i = 0; i <= 8; i++) {
// i:1,2,3,4,5,6,7,8
LED1 = i == 0 ? 0 : 1; // 第一个灯亮,其他灯不亮
LED2 = i == 1 ? 0 : 1; // 第二个灯亮,其他灯不亮

最低0.47元/天 解锁文章
2725

被折叠的 条评论
为什么被折叠?



