vb2002 发表于 2024-5-30 11:57:11

这个是一个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();
        }
}


国学芯用 发表于 2024-5-30 16:45:09

宝,需要向冲老师请教呢, 冲哥视频教程和各种开源资料QQ交流群884047237,可群

vb2002 发表于 2024-5-30 17:54:21

国学芯用 发表于 2024-5-30 16:45
宝,需要向冲老师请教呢, 冲哥视频教程和各种开源资料QQ交流群884047237,可群 ...

加了,等待验证
页: [1]
查看完整版本: 这个是一个pwm 7位的呼吸灯,看视频一直没看懂怎么改变