L9110驱动代码,按下一次按键1启动风扇,再次按下按键1关闭风扇,STM32F103ZET6,标准库
时间: 2023-06-18 09:07:36 浏览: 76
KEY_LED按键扫描采用扫描方式_stm32f103zet6_
以下是L9110驱动代码,按下一次按键1启动风扇,再次按下按键1关闭风扇。注意代码中的GPIO引脚需要根据实际连接进行修改。
```c
#include "stm32f10x.h" // 包含STM32F10x系列微控制器的头文件
#define FAN_GPIO_PORT GPIOA // 风扇GPIO端口
#define FAN_GPIO_PIN GPIO_Pin_1 // 风扇GPIO引脚
#define KEY_GPIO_PORT GPIOB // 按键GPIO端口
#define KEY_GPIO_PIN GPIO_Pin_1 // 按键GPIO引脚
/* 初始化GPIO口 */
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; // 定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOA和GPIOB时钟
/* 配置风扇GPIO为推挽输出模式 */
GPIO_InitStructure.GPIO_Pin = FAN_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(FAN_GPIO_PORT, &GPIO_InitStructure);
/* 配置按键GPIO为上拉输入模式 */
GPIO_InitStructure.GPIO_Pin = KEY_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);
}
/* 延时函数 */
void delay_ms(uint16_t nms)
{
uint32_t i;
for (i = 0; i < nms * 1000; i++);
}
int main(void)
{
GPIO_Configuration(); // 初始化GPIO口
uint8_t fan_status = 0; // 风扇状态,0为关闭,1为开启
while (1)
{
/* 检测按键是否按下 */
if (GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_GPIO_PIN) == 0)
{
delay_ms(20); // 延时去抖动
if (GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_GPIO_PIN) == 0)
{
fan_status = !fan_status; // 取反风扇状态
GPIO_WriteBit(FAN_GPIO_PORT, FAN_GPIO_PIN, fan_status); // 设置风扇状态
delay_ms(500); // 延时500ms
}
}
}
}
```
阅读全文