打印

Megawin MG51单片机实现UART通信与PWM控制

[复制链接]
992|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Pulitzer|  楼主 | 2024-10-13 14:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

使用特权

评论回复
沙发
公羊子丹| | 2024-10-13 15:04 | 只看该作者
这个代码看着简单,但功能很实用,我已经在家里的LED灯上试了。

使用特权

评论回复
板凳
周半梅| | 2024-10-13 15:04 | 只看该作者
Megawin的芯片用起来还真不错,之前一直以为只做低端市场。

使用特权

评论回复
地板
帛灿灿| | 2024-10-13 15:05 | 只看该作者
我用这个项目做了个简易台灯控制,效果蛮好。

使用特权

评论回复
5
童雨竹| | 2024-10-13 15:06 | 只看该作者
看了这篇帖子,我对8位单片机又有了新的兴趣。

使用特权

评论回复
6
万图| | 2024-10-13 15:06 | 只看该作者
有人试过用I2C传感器配合这个PWM控制吗?想要个参考。

使用特权

评论回复
7
Wordsworth| | 2024-10-13 15:07 | 只看该作者
代码运行很流畅,MG51的UART还挺稳定的。

使用特权

评论回复
8
Bblythe| | 2024-10-13 15:08 | 只看该作者
这个项目给我启发了,我想把它改成遥控车灯的控制模块。

使用特权

评论回复
9
Uriah| | 2024-10-13 15:08 | 只看该作者
有没有人试过用手机蓝牙控制这种LED?感觉应该很酷。

使用特权

评论回复
10
Clyde011| | 2024-10-13 15:09 | 只看该作者
我用多个PWM通道控制RGB灯,真的可以玩出花样来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

3673

帖子

0

粉丝