sTc8 pwm调光程序怎么写?

sTc8 pwm调光程序怎么写?,第1张

下面这个程序是应用在stc上的pwm程序,测试成功

#includesfr CCON =0xD8 //PCA control register

sfr CMOD =0xD9

sfr CL =0xe9

sfr CH =0xF9

sfr CCAP0L=0xea

sfr CCAP1L=0xeb

sfr CCAP0H=0xfa

sfr CCAP1H=0xfb

sfr CCAPM0=0xda

sfr CCAPM1=0xdb

sbit CR=0xde//位寻址

void main(void)

{

CMOD=0x02 //使用系统时钟,时钟输入源频率fosc/2。PWM频率=fosc/2/256

/************************************

7 6 5 4 3 21 0

CIDL- - - cps2CPS1 CPS0 ECF

CIDL: =0时,空闲模式下PCA计数器继续工作;=1时,空闲模式下PCA计数器停止工作。

CPS2,CPS1,CPS0:PCA计数脉冲选择。010,定时器0的溢出,可以实现可调频率的PWM输出。

ECF: =1时,使能寄存器CCON CF位的中断;=0时,禁止该功能。

***************************************/

CL=0x00

CH=0x00

CCAP0L=0xc0//当CL小于CCAP0L时,输出为低大于时,输出为高。

CCAP0H=0x7f//当CL由ff变为00溢出时,CCAP0H装载到CCAP0L中,实现无干扰的更新PWM。

CCAP1L=0xc0//当CL小于CCAP1L时,输出为低大于时,输出为高。

CCAP1H=0xc0//当CL由ff变为00溢出时,CCAP1H装载到CCAP1L中,实现无干扰的更新PWM。

CCAPM0=0X42//使能PWM模式,PWM0=1,ECOM0=1

CCAPM1=0X42//使能PWM模式,PWM1=1,ECOM1=1

CR=1 //启动PCA计数器

while(1)

{

CCAP0H=RF4432_TxRxBuf[4] //此处改变占空比

CCAP1H=RF4432_TxRxBuf[5]

CCAP2H=RF4432_TxRxBuf[6]/2.5

}

}

//程序两个按键接的是外部中断0、1的输入口,按下键就触发相应的中断

//变量和变暗是PWM来控制的,具体在定时中断中说明

#include <reg51.h>

sbit K1 =P3^2 //亮度增加键

sbit K2 =P3^3 //亮度减少键

sbit led=P0^0

bit t=0

unsigned char zhankongbi=0

unsigned char a=0

void delay (unsigned char i)

void main ()

{

EA=1

EX0=1

IT0=1

EX1=1

IT1=1

TR0=1 //启动定时器

ET0=1 //允许定时器0中断

TMOD=0x02

TH0=(65536-1000)/256

TL0=(65536-1000)%256

while(1)

}

void delay (unsigned char i)

{

unsigned char a

while(i--)

{

for(a=120a>0a--)

}

}

void zengjia () interrupt 0 // 变亮按键

{

if(K1==0)

{

delay (1)

if(K1==0)

{

t=1

}

}

}

void jianshao () interrupt 2 // 变暗按键

{

if(K2==0)

{

delay (1)

if(K2==0)

{

t=0

}

}

}

void time () interrupt 1

{

TH0=(65536-1000)/256

TL0=(65536-1000)%256

if(t)//当按下变量按键时

{

a++

if(a<=3)

{

led=1 //LED控制高电平为7毫秒

}

else if(a<=10)

{

led=0 //LED控制低电平为3毫秒

}

else if(a==11)

{

a=0

}

}

else//当按下变暗键时

{

a++

if(a<=7)

{

led=1 //LED控制高电平为3毫秒

}

else if(a<=10)

{

led=0 //LED控制低电平为7毫秒

}

else if(a==11)

{

a=0

}

}

}

//可见变亮开关按下LED控制PWM脉宽比为7:3

//变暗开关按下LED控制PWM脉宽比为3:7

//这样就达到了控制LED亮暗的目的,这个程序没有实现亮到按的逐步变化。

CYCLE=10;在初始化中,在程序中不会改变;pwm周期

PWM_ON只在主循环来改变;延时程序很长delay(1000)中断函数执行很多次,第一次count=0时,就把led灭了,当PWM_ON=2时,有了亮度,此亮度保持到,PWM_ON=2,加亮,直到PWM_ON=10,最亮,开始执行变暗程序。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/11018348.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存