凌鸥LKS32C306 MCU 是一款高性价比的 32 位 ARM Cortex-M3 微控制器,广泛应用于家居自动化、物联网等领域。本项目展示如何使用 LKS32C306 MCU 实现一个智能灯光控制系统,通过按键和串口指令控制灯的状态,并支持定时熄灯功能。
系统概述- 主要功能:
- 按键切换灯光开关状态
- 通过串口接收控制指令
- 实现定时熄灯功能
- MCU 在非操作时进入低功耗模式
- 硬件组成:
- MCU:LKS32C306
- 按键模块
- LED 灯
- UART 串口模块
硬件连接- 按键与LKS32C306连接:
- LED与LKS32C306连接:
- UART与MCU连接:
- RX -> UART1_RX
- TX -> UART1_TX
代码实现#include "LKS32C306.h"
#define LED_PIN GPIO_PIN_0
#define BUTTON_PIN GPIO_PIN_0
volatile uint8_t led_state = 0;
void SysTick_Handler(void) {
static uint32_t counter = 0;
counter++;
if (counter >= 5000) { // 5秒自动熄灯
GPIO_ResetBits(GPIOB, LED_PIN);
led_state = 0;
counter = 0;
}
}
void GPIO_Init_Config(void) {
GPIO_InitTypeDef GPIO_InitStruct;
// 初始化按键输入
GPIO_InitStruct.Pin = BUTTON_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);
// 初始化LED输出
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void UART_Init_Config(void) {
UART_InitTypeDef UART_InitStruct;
UART_InitStruct.BaudRate = 9600;
UART_InitStruct.WordLength = UART_WORDLENGTH_8B;
UART_InitStruct.StopBits = UART_STOPBITS_1;
UART_InitStruct.Parity = UART_PARITY_NONE;
UART_Init(UART1, &UART_InitStruct);
}
void EXTI0_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
led_state = !led_state;
if (led_state) {
GPIO_SetBits(GPIOB, LED_PIN);
} else {
GPIO_ResetBits(GPIOB, LED_PIN);
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void UART1_IRQHandler(void) {
if (UART_GetITStatus(UART1, UART_IT_RXNE) != RESET) {
char command = UART_ReceiveData(UART1);
if (command == '1') {
GPIO_SetBits(GPIOB, LED_PIN); // 打开灯光
led_state = 1;
} else if (command == '0') {
GPIO_ResetBits(GPIOB, LED_PIN); // 关闭灯光
led_state = 0;
}
UART_ClearITPendingBit(UART1, UART_IT_RXNE);
}
}
int main(void) {
SystemInit();
GPIO_Init_Config();
UART_Init_Config();
SysTick_Config(SystemCoreClock / 1000); // 1ms 中断
while (1) {
__WFI(); // 等待中断,进入低功耗模式
}
}
代码解析- 按键控制:通过中断检测按键状态,每次按键触发切换灯的开关状态。
- UART命令控制:接收'1'和'0'指令控制LED的开关。
- 定时熄灯功能:使用SysTick定时中断,每5秒自动关闭灯光。
- 低功耗模式:在主循环中调用__WFI(),等待中断时进入低功耗模式,节省能耗。
项目效果- 按键控制:用户按下按键后,LED切换开关状态。
- 串口指令控制:通过串口发送1或0指令实现灯光的开启和关闭。
- 定时熄灯:LED开启后若无进一步操作,5秒后自动熄灭。
优化建议- 蓝牙扩展:增加蓝牙模块,支持远程灯光控制。
- 自适应亮度调节:结合环境光传感器,实现智能亮度控制。
- 多灯控制:扩展GPIO口,实现多个灯的独立控制。
- 语音控制:结合语音识别模块,提升智能化体验。
|