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的入门项目。在实际应用中,这类项目还可以扩展为智能灯光控制系统或远程调光模块。
|