STM32单片机的3个io口控制6个led灯程序
时间: 2023-08-30 09:04:26 浏览: 174
STM32单片机风扇控制系统设计程序代码.zip
5星 · 资源好评率100%
以下是使用STM32单片机的3个IO口控制6个LED灯的程序示例,使用了第一种方式,即使用74HC238译码器:
```c
#include "stm32f10x.h"
#define LED_PORT GPIOA
#define ADDR_PORT GPIOB
void GPIO_Config(void);
void delay(uint32_t count);
int main(void)
{
GPIO_Config();
while (1)
{
// 点亮第1个LED灯
GPIO_Write(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_Pin_0);
GPIO_Write(LED_PORT, GPIO_Pin_0, GPIO_Pin_0);
delay(1000000);
GPIO_Write(LED_PORT, GPIO_Pin_0, GPIO_Pin_RESET);
// 点亮第2个LED灯
GPIO_Write(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_Pin_1);
GPIO_Write(LED_PORT, GPIO_Pin_1, GPIO_Pin_1);
delay(1000000);
GPIO_Write(LED_PORT, GPIO_Pin_1, GPIO_Pin_RESET);
// 点亮第3个LED灯
GPIO_Write(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_Pin_2);
GPIO_Write(LED_PORT, GPIO_Pin_2, GPIO_Pin_2);
delay(1000000);
GPIO_Write(LED_PORT, GPIO_Pin_2, GPIO_Pin_RESET);
// 点亮第4个LED灯
GPIO_Write(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_Pin_0);
GPIO_Write(LED_PORT, GPIO_Pin_3, GPIO_Pin_3);
delay(1000000);
GPIO_Write(LED_PORT, GPIO_Pin_3, GPIO_Pin_RESET);
// 点亮第5个LED灯
GPIO_Write(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_Pin_1);
GPIO_Write(LED_PORT, GPIO_Pin_4, GPIO_Pin_4);
delay(1000000);
GPIO_Write(LED_PORT, GPIO_Pin_4, GPIO_Pin_RESET);
// 点亮第6个LED灯
GPIO_Write(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_Pin_2);
GPIO_Write(LED_PORT, GPIO_Pin_5, GPIO_Pin_5);
delay(1000000);
GPIO_Write(LED_PORT, GPIO_Pin_5, GPIO_Pin_RESET);
}
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// 配置LED引脚为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_PORT, &GPIO_InitStructure);
// 配置地址引脚为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADDR_PORT, &GPIO_InitStructure);
}
void delay(uint32_t count)
{
for(uint32_t i = 0; i < count; i++);
}
```
需要注意的是,此程序只是一个示例,具体的引脚配置和控制方式需要根据实际情况进行修改。同时,需要根据实际使用的译码器型号,确定地址引脚的数量和连接方式。
阅读全文