这个是一个pwm 7位的呼吸灯,看视频一直没看懂怎么改变
CL和CH,还有CCAP1L和CCAP1H 我知道这几个可以控制LED的占空比,但是这个值是怎么换算的哦?
#define pwh_MAX 0xfa // PWM脉宽最小值,占空比2.3%
#define pwh_MIN 0x02 // PWM脉宽最大值,占空比98%
还有这个值怎么取出来的?
现在大概的思路我懂了,就是里面这些参数有点蒙蒙的.
我这个程序是
CL=0x00; // PCA计数器低位
CH=0x00; // PCA计数器高位
// 设置PCA通道1的捕获/比较寄存器,用于定义PWM的占空比
// 这里需要根据实际情况调整CCAP1L和CCAP1H的值
CCAP1L=0xFF; // PCA通道1的捕获/比较值低位
CCAP1H=0x02; // PCA通道1的捕获/比较值高位
#include "intrins.h"
#include <STC8G.H>
#define pwh_MAX 0xfa // PWM脉宽最小值,占空比2.3%
#define pwh_MIN 0x02 // PWM脉宽最大值,占空比98%
#define STEP 0x03; // PWM脉宽变化步长
unsigned charpwh; // PWM脉宽变量,即存入CCAP1H中的值
#define MAIN_Fosc 11059200L //定义主时钟
void Delay(unsigned int ms) //注:ms_max=65536
{
unsigned int i;
do
{
i=MAIN_Fosc/10000;
while(--i);
}
while(--ms);
}
void PWM_OUT()
{
pwh=pwh_MIN;
while(1)
{
if (pwh>pwh_MAX) break;
CCAP1H= pwh;
pwh+=STEP;
Delay(20);
}
pwh=pwh_MAX;
while(1)
{
if (pwh<pwh_MIN) break;
CCAP1H= pwh;
pwh-=STEP;
Delay(20);
}
}
void main()
{
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
P6M0 = 0x00; P6M1 = 0x00;
P7M0 = 0x00; P7M1 = 0x00;
CCON=0x00; // 清除PCA控制寄存器
CMOD=0x08; // PCA计数模式配置(例如,定时器模式)
CL=0x00; // PCA计数器低位
CH=0x00; // PCA计数器高位
// 配置PCA通道1为PWM模式,并启用中断(如果需要)
CCAPM1=0x42; // 设置PCA通道1为PWM模式,并启用中断(如果需要)
PCA_PWM1=0x00; // 设置PCA通道1的PWM输出为高有效
// 设置PCA通道1的捕获/比较寄存器,用于定义PWM的占空比
// 这里需要根据实际情况调整CCAP1L和CCAP1H的值
CCAP1L=0xFF; // PCA通道1的捕获/比较值低位
CCAP1H=0x02; // PCA通道1的捕获/比较值高位
CR=1; //启动PCA
while(1)
{
PWM_OUT();
}
}
宝,需要向冲老师请教呢, 冲哥视频教程和各种开源资料QQ交流群884047237,可群 国学芯用 发表于 2024-5-30 16:45
宝,需要向冲老师请教呢, 冲哥视频教程和各种开源资料QQ交流群884047237,可群 ...
加了,等待验证
页:
[1]