Megawin(笙泉)推出的MG51系列MCU是一款低功耗、高性价比的8位单片机,支持丰富的外设资源,如UART、PWM、I2C等,非常适合用于小家电和工业控制领域。在本文中,我们将基于MG51DB9AE芯片实现UART串口通信与PWM调光控制,展示其强大的外设功能。
开发环境- MCU型号:MG51DB9AE
- 开发工具:Keil uVision 5
- 编程语言:C语言
- 硬件平台:MG51最小系统开发板
- 烧录工具:Nu-Link仿真器
实现功能- 利用UART与PC端进行数据通信,并控制LED的亮度。
- 使用PWM生成占空比可调的波形控制LED亮度变化。
硬件连接- LED:连接在P0.4引脚,用于PWM亮度控制。
- UART:使用P0.6(TX)和P0.7(RX)连接到USB转串口模块,与PC通信。
代码实现#include "mg51_sdcc.h"
// 初始化UART,波特率9600
void UART_Init(void) {
P06_Quasi_Mode; // 设置P0.6为TX模式
P07_Quasi_Mode; // 设置P0.7为RX模式
SCON = 0x50; // 设置UART为8位数据,1个停止位
TMOD |= 0x20; // 选择定时器1为8位自动重装模式
TH1 = 0xFD; // 设置波特率为9600
TR1 = 1; // 启动定时器1
TI = 1; // 准备发送
}
// UART发送一个字节
void UART_SendByte(uint8_t data) {
SBUF = data;
while (TI == 0);
TI = 0;
}
// 初始化PWM用于LED调光
void PWM_Init(void) {
P04_PushPull_Mode; // 设置P0.4为推挽输出模式
PWMPH = 0x00;
PWMPL = 0xFF; // PWM周期设为255
PWM2H = 0x00;
PWM2L = 0x80; // 初始占空比为50%
PWM2_Output_Enable; // 开启PWM2输出
set_PWMCON0_LOAD; // 载入PWM配置
set_PWMCON0_PWMF; // 启动PWM
}
// 主函数:根据接收的数据调整LED亮度
void main(void) {
uint8_t brightness;
UART_Init(); // 初始化UART
PWM_Init(); // 初始化PWM
while (1) {
if (RI) { // 检测是否有数据接收
brightness = SBUF; // 读取接收数据
RI = 0; // 清除接收中断标志
PWM2L = brightness; // 根据接收值调整占空比
UART_SendByte(brightness); // 回传数据确认
}
}
}
代码解析- UART初始化:配置定时器1用于波特率的生成,UART波特率为9600。
- PWM配置:PWM周期设置为255,占空比可调,用于控制LED亮度。
- 主循环逻辑:检测串口接收的数据,并将其作为PWM的占空比,实时调节LED亮度。
实验效果- 当从PC串口工具发送0-255之间的数值时,LED的亮度会随之改变。
- MCU通过串口将接收到的数值回传给PC,确保通信正常。
功能扩展- 多通道PWM控制:可以增加更多LED,并使用不同PWM通道独立控制。
- 按键调光模式:增加按键,在本地控制LED亮暗。
- I2C传感器:结合I2C传感器,实现环境光亮度自动调节LED。
总结通过这个项目,我们学习了如何在Megawin MG51单片机上实现UART通信与PWM调光。这展示了MG51芯片的基本GPIO、UART和PWM功能,非常适合作为学习8位MCU的入门项目。在实际应用中,这类项目还可以扩展为智能灯光控制系统或远程调光模块。
|