AiCube 试用 - PWM 呼吸灯
本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具通过定时器实现 PWM 呼吸灯的主要流程。
项目介绍
该项目通过定时器中断实现 PWM 呼吸灯,即通过控制 PWM 占空比实现 LED 亮度调节。
参考:51单片机利用PWM、定时器实现呼吸灯 .
硬件平台
硬件测试平台为基于 AI8051U-34K64 主控的 擎天柱 开发板

下载软件
下载 最新版 AIapp-ISP
软件;
解压并打开该软件,右侧操作界面选择并进入 Keil 仿真设置
标签项;
仿真设置
选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;
创建项目
菜单栏点击 AiCube
标签,进入 项目创建助手
;
选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 下一步
;
参数配置
进入参数配置界面
取消勾选 CLK 时钟
项;
勾选 外设
- USB 通用串行总线
项;
勾选 TIMER 定时器
- TIMER0
,并进行相关配置,打开定时器0

注意 定时器周期
需根据实际情况设置合适的数值和单位。
生成工程
点击 创建项目
即可获得预先配置参数的 Keil 工程。
此时查看目标路径发现 AiCube 工具创建的工程文件,包括 Keil 文件、库文件夹等标准工程格式;
双击打开生成的 Keil 文件,进入 main.c
主函数文件
可见代码已根据 AiCube 工具的配置,提前配置完成定时器和中断初始化等函数。
编译一下直接生成的工程,确保无误。
代码添加
定义变量,以便调用
uint8 Tcount, dutyfactor, direct; // 定义 PWM周期计数、占空比、方向
sbit LED = P2^0; // 目标 PWM 输出 I/O 管脚
在主循环中调用 breathLED()
呼吸灯函数;
void breathLED(); // 调用呼吸灯函数
void main(void)
{
SYS_Init();
while (1)
{
breathLED(); // 呼吸灯函数
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
}
}
添加和定义呼吸灯 void breathLED()
函数
/* ---------- breath LED -------------*/
void breathLED()
{
if(Tcount >= 100)
{ //一个PWM周期(100次*200us)
Tcount = 0; //下一个PWM周期内,重新计数
//根据方向判断占空比增加或减少
if(direct == 0)
{ //正方向,占空比增加
dutyfactor++; //下一个PWM周期,占空比增加1
}
else if(direct == 1)
{ //负方向,占空比减少
dutyfactor--; //下一个PWM周期,占空比减少1
}
}
//根据占空比值判断方向是否需要改变
if(dutyfactor <= 0)
{ //占空比减少到0
direct = 0; //正方向,占空比开始增加
}
else if(dutyfactor >= 100)
{ //占空比增加到100
direct = 1; //负方向,占空比开始减少
}
//占空比:通电时间相对于总时间所占的比例(此程序中:低电平时间相对于PWM周期所占的比例)
//一个PWM周期计数100次,占空比相当于低电平的计数周期次数。即:0~占空比:低电平,灯亮;占空比~100:高电平,灯灭
//在一个PWM周期内,根据周期计数是否小于占空比,判断LED灯的亮灭
if(Tcount < dutyfactor)
{ //周期计数值<占空比
LED = 0; //当前PWM周期的当前计数周期内灯亮
}
else
{
LED = 1; //当前PWM周期的当前计数周期内灯灭
}
}
之后保存并重新编译工程。
完整工程见附件。
固件烧录
生成的 HEX 烧录固件位于 Objects
文件夹下,
使用 Type-C 数据线连接开发板和电脑,按住 P32
按键的同时,短按 POWER
按键,
此时 Aiapp-ISP 软件自动识别 HID
设备

点击 下载/编程
按钮,待烧录结束,程序自动运行。
效果演示
P20 引脚对应的 LED 呈现呼吸灯效果,从暗到亮再到暗完成 1 个周期,为 4 秒

总结
本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具实现 PWM 呼吸灯的主要流程,为 STC 系列单片机的快速开发和应用提供了参考。
附件:PWM_breath_LED.zip