cc2530 实现呼吸灯效果(PWM)
方法1:通过for循环简单粗暴的实现呼吸灯
#include <ioCC2530.h>
#define D1 P1_0
void Init_Port()
{
P1SEL &=~0x01;
P1DIR |= 0x01;
D1 = 0;
}
void delay(unsigned int j)
{
while(j--);
}
void main()
{
Init_Port();
while(1)
{
unsigned char i;
for(i=0; i<100; i++)
{
D1 = 1;
delay(100*i);
D1 = 0;
delay(100*(100-i));
}
for(i=0; i<100; i++)
{
D1 = 1;
delay(100*(100-i));
D1 = 0;
delay(100*i);
}
}
}
方法2:简单的PWM
#include <ioCC2530.h>
#define D1 P1_0
#define SW1 P1_2
void Init_Port()
{
P1SEL &= ~0X03;
P1DIR |= 0X03;
P1 &= ~0X03;
}
void delay(int time)
{
while(time--);
}
void main()
{
Init_Port();
int i,j=1000;
int flag = 1;
while(1)
{
if(flag)
{
D1 = 1;``
delay(i++);
D1 = 0;
delay(j--);
if(j == 0)
flag = 0;
}
else
{
D1 = 1;
delay(i--);
D1 = 0;
delay(j++);
if(i == 0)
flag = 1;
}
}
}
方法三:定时器
#include <ioCC2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
#define LED1 P1_0
void InitLed(void)
{
P1DIR |= 0x01;
LED1 = 1; //默认灭
}
void InitT1()
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振为32M
CLKCONCMD &= ~0x07; //设置系统主时钟频率为32MHZ
CLKCONCMD |= 0x38; //设置定时器所分频率为250KHZ
PERCFG |= 0x40; //选择定时器1映射的IO口位置,选择备用位置2,映射的IO口就是P1_0
P2SEL &= ~0x10; //设置优先级,定时器1优先
P2DIR |= 0xC0; //设定第1优先级:定时器1通道2-3
P1DIR |= 0x01; //设置P1_0为输出
P1SEL |= 0x01; //P1_0配置为外设功能对应定时器1
T1CC2H = 0x00; //T1CC2H为T1CC0的高位,T1CC2L为T1CC0的低位
T1CC2L = 0x00; //修改T1CC2L可调整占空比,此处的设置决定比较时的值
T1CC0H = 0x00; //
T1CC0L = 0xff; //
T1CCTL2 = 0x1c; //设置模式
T1CTL = 0x02; //频率250KHz 1分频,运行模式为模模式
}
void Delay_us(uint t)
{
while(t--)
{
asm("NOP");
asm("NOP");
asm("NOP");
}
}
void main(void)
{
InitLed();
InitT1();
uint a = 0x00;
uint b = 0x00;
while(1)
{
a++; //改变通道2的定时值
Delay_us(10000);
T1CC2H = b;
T1CC2L = a;
if(a == 0xff)
{
while(1)
{
a--;//改变通道2设置的定时值
Delay_us(10000);
T1CC2H = b;
T1CC2L = a;
if(a == 0)
break;
}
}
}
}
方法思路都是通过改变PWM,调节在一个周期内灯的亮灭状态所占的百分比来实现PWM的改变
刚开始改变PWM的频率小于人眼识别图像的频率,变成了LED闪烁。后面使占空比改变的频率大于人眼识别频率,出现了呼吸灯效果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库