用keil5写一段stm32c8t6使用寄存器控制小灯流水灯亮灭的程序PA口接小灯,B11 B1接按钮
时间: 2024-04-05 10:33:34 浏览: 14
好的,以下是使用Keil5编写的一个控制STM32C8T6开发板上的小灯流水灯的程序:
```c
#include "stm32f10x.h"
void delay(uint32_t time) {
while(time--);
}
int main(void) {
// 初始化GPIO端口
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能GPIOA时钟
GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0); // PA0输出模式
GPIOA->CRL &= ~(GPIO_CRL_MODE1 | GPIO_CRL_CNF1); // PA1输出模式
// 初始化按钮GPIO端口
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 使能GPIOB时钟
GPIOB->CRH &= ~GPIO_CRH_MODE11; // PB11输入模式
GPIOB->CRH &= ~GPIO_CRH_CNF11; // PB11浮空输入
GPIOB->CRL &= ~GPIO_CRL_MODE1; // PB1输入模式
GPIOB->CRL &= ~GPIO_CRL_CNF1; // PB1浮空输入
while (1) {
if ((GPIOB->IDR & GPIO_IDR_IDR11) != GPIO_IDR_IDR11) {
// 按钮按下时,流水灯亮灭
GPIOA->BSRR = GPIO_BSRR_BS0; // PA0输出高电平
GPIOA->BSRR = GPIO_BSRR_BR1; // PA1输出低电平
delay(1000000);
GPIOA->BSRR = GPIO_BSRR_BR0; // PA0输出低电平
GPIOA->BSRR = GPIO_BSRR_BS1; // PA1输出高电平
delay(1000000);
} else {
// 按钮未按下时,小灯熄灭
GPIOA->BSRR = GPIO_BSRR_BR0; // PA0输出低电平
GPIOA->BSRR = GPIO_BSRR_BR1; // PA1输出低电平
}
}
}
```
这段代码会不断地检测按钮是否按下,如果按下了,则小灯会以流水灯的方式亮灭,否则小灯会熄灭。其中,PA0接小灯的正极,PA1接小灯的负极;PB11和PB1分别连接按钮。
请注意,此代码假设你已经正确配置了Keil5和STM32C8T6开发板的环境。如果你还没有配置好环境,你需要先进行相应的配置才能正确编译和下载代码到开发板上。