STC8H1K08的8路PWM调光

 0 ~ 10V调光电路图

复制/粘贴到8路

 注:D2二极管的选择

#include "dis_pwm.h"

int pwm_out1=50;
int pwm_out2=100;	
int pwm_out3=150;
int pwm_out4=200;
int pwm_out5=250;
int pwm_out6=300;
int pwm_out7=350;
int pwm_out8=1000;

void PWM_Init()
{
	P_SW2 |= 0x80;		//使能访问XFR
	
	PWMA_PSCR = 0x0000;	//预分频寄存器,不分频
	PWMA_DTR  = 0;		//死区时间配置
	
	PWMA_ARR  = 1000;	//自动重装载寄存器,控制PWM周期
	PWMA_CCER1 = 0;
	PWMA_CCER2 = 0;
	PWMA_SR1  = 0;
	PWMA_SR2  = 0;
	PWMA_ENO  = 0;		//IO输出使能
	PWMA_PS   = 0;
	PWMA_IER  = 0;		//中断使能寄存器位
	
	
	PWMB_PSCR = 0x0000;	// 预分频寄存器
	PWMB_DTR  = 0;		// 死区时间配置
	PWMB_ARR = 1000;	// 自动重装载寄存器,  控制PWM周期
	PWMB_CCER1  = 0;
	PWMB_CCER2  = 0;
	PWMB_SR1    = 0;
	PWMB_SR2    = 0;
	PWMB_ENO    = 0;		// IO输出允许
	PWMB_PS     = 0;
	PWMB_IER    = 0;
	

    /* PWM1 -- P10 */
	PWMA_CCMR1  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMA_CCR1   = pwm_out1;	// 比较值, 控制占空比(高电平时钟数)
	PWMA_CCER1 |= 0x01;		// 开启比较输出, 高电平有效
	PWMA_PS    |= 0;		// 选择IO 
	PWMA_ENO   |= 0x01;		// IO输出允许
//	PWMA_IER   |= 0x02;		// 使能中断
	
    /* PWM2 -- P12 */
	PWMA_CCMR2  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMA_CCR2   = pwm_out2;	// 比较值, 控制占空比(高电平时钟数)
	PWMA_CCER1 |= 0x10;		// 开启比较输出, 高电平有效
	PWMA_PS    |= (0<<2);	// 选择IO
	PWMA_ENO   |= 0x04;		// IO输出允许
//	PWMA_IER   |= 0x04;		// 使能中断

    /* PWM3 -- P14 */
	PWMA_CCMR3  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMA_CCR3   = pwm_out3;	// 比较值, 控制占空比(高电平时钟数)
	PWMA_CCER2 |= 0x01;		// 开启比较输出, 高电平有效
	PWMA_PS    |= (0<<4);	// 选择IO 
	PWMA_ENO   |= 0x10;		// IO输出允许
//	PWMA_IER   |= 0x08;		// 使能中断

    /* PWM4 -- P16 */
	PWMA_CCMR4  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMA_CCR4   = pwm_out4;	// 比较值, 控制占空比(高电平时钟数)
	PWMA_CCER2 |= 0x10;		// 开启比较输出, 高电平有效
	PWMA_PS    |= (0<<6);	// 选择IO
	PWMA_ENO   |= 0x40;		// IO输出允许
//	PWMA_IER   |= 0x10;		// 使能中断


    /* PWM5 -- P17 */
	PWMB_CCMR1  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMB_CCR5   = pwm_out5;	// 比较值, 控制占空比(高电平时钟数)
	PWMB_CCER1 |= 0x01;		// 开启比较输出, 高电平有效
	PWMB_PS    |= 1;		// 选择IO
	PWMB_ENO   |= 0x01;		// IO输出允许
//	PWMB_IER   |= 0x02;		// 使能中断

    /* PWM6 -- P54 */
	PWMB_CCMR2  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMB_CCR6   = pwm_out6;	// 比较值, 控制占空比(高电平时钟数)
	PWMB_CCER1 |= 0x10;		// 开启比较输出, 高电平有效
	PWMB_PS    |= (1<<2);	// 选择IO
	PWMB_ENO   |= 0x04;		// IO输出允许
//	PWMB_IER   |= 0x04;		// 使能中断

    /* PWM7 -- P33 */
	PWMB_CCMR3  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMB_CCR7   = pwm_out7;	// 比较值, 控制占空比(高电平时钟数)
	PWMB_CCER2 |= 0x01;		// 开启比较输出, 高电平有效
	PWMB_PS    |= (1<<4);	// 选择IO
	PWMB_ENO   |= 0x10;		// IO输出允许
//	PWMB_IER   |= 0x08;		// 使能中断

    /* PWM8 -- P34 */
	PWMB_CCMR4  = 0x68;		// 通道模式配置, PWM模式1, 预装载允许
	PWMB_CCR8   = pwm_out8;		// 比较值, 控制占空比(高电平时钟数)
	PWMB_CCER2 |= 0x10;		// 开启比较输出, 高电平有效
	PWMB_PS    |= (1<<6);	// 选择IO
	PWMB_ENO   |= 0x40;		// IO输出允许
//	PWMB_IER   |= 0x10;		// 使能中断


	PWMA_BKR    = 0x80;		// 主输出使能 相当于总开关
	PWMA_CR1    = 0x81;		// 使能计数器, 允许自动重装载寄存器缓冲
	PWMA_EGR    = 0x01;		//产生一次更新事件
//	PWMA_ISR_En = PWMB_IER;	//设置标志允许通道5~8中断处理
	

	PWMB_EGR    = 0x01;		//产生一次更新事件
	PWMB_BKR    = 0x80;		// 主输出使能 相当于总开关
	PWMB_CR1    = 0x81;		// 使能计数器, 允许自动重装载寄存器缓冲
//	PWMB_ISR_En = PWMB_IER;	//设置标志允许通道5~8中断处理
	
}


  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

貔貅☞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值