用keil5写一段stm32c8t6控制小灯流水灯亮灭的程序PA口接小灯,B11 B1接按钮
时间: 2024-04-05 20:33:35 浏览: 68
MDK-ARM.zip_PWM控制小灯_STM32 MDK_almost98a_stm32_stm32 pwm
好的,以下是使用Keil5编写的控制STM32C8T6的流水灯程序:
```c
#include "stm32f1xx.h"
void delay(uint32_t count)
{
for(uint32_t i = 0; i < count; i++);
}
int main(void)
{
// 使能GPIOA和GPIOB的时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN;
// 配置PA0-PA7为推挽输出
GPIOA->CRL &= ~(GPIO_CRL_MODE0_Msk | GPIO_CRL_MODE1_Msk | GPIO_CRL_MODE2_Msk | GPIO_CRL_MODE3_Msk |
GPIO_CRL_MODE4_Msk | GPIO_CRL_MODE5_Msk | GPIO_CRL_MODE6_Msk | GPIO_CRL_MODE7_Msk);
GPIOA->CRL |= GPIO_CRL_MODE0_0 | GPIO_CRL_MODE1_0 | GPIO_CRL_MODE2_0 | GPIO_CRL_MODE3_0 |
GPIO_CRL_MODE4_0 | GPIO_CRL_MODE5_0 | GPIO_CRL_MODE6_0 | GPIO_CRL_MODE7_0;
GPIOA->CRL &= ~(GPIO_CRL_CNF0_Msk | GPIO_CRL_CNF1_Msk | GPIO_CRL_CNF2_Msk | GPIO_CRL_CNF3_Msk |
GPIO_CRL_CNF4_Msk | GPIO_CRL_CNF5_Msk | GPIO_CRL_CNF6_Msk | GPIO_CRL_CNF7_Msk);
// 配置PB1和PB11为浮空输入
GPIOB->CRH &= ~(GPIO_CRH_MODE11_Msk | GPIO_CRH_MODE1_Msk);
GPIOB->CRH &= ~(GPIO_CRH_CNF11_Msk | GPIO_CRH_CNF1_Msk);
while(1)
{
// 判断按钮是否按下
if((GPIOB->IDR & GPIO_IDR_IDR1) == 0)
{
// 按钮按下,流水灯亮灭
for(uint8_t i = 0; i < 8; i++)
{
GPIOA->ODR |= (1 << i); // 点亮对应的LED
delay(1000000); // 延时一段时间
GPIOA->ODR &= ~(1 << i); // 熄灭对应的LED
}
}
}
}
```
这段程序会使得PA0-PA7的引脚作为输出口,控制对应的小灯。同时,PB1引脚作为输入口,接按钮,用于控制流水灯的亮灭。
请确保在Keil5中正确配置了工程和芯片型号,并将该程序下载到STM32C8T6单片机上运行。
阅读全文