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

}

}

#include<reg52.h>  

//端口定义

sbit RED    =    P2^0//红光控制端,0点亮 

sbit GREEN  =    P2^1//绿光控制端,0点亮 

sbit BLUE   =    P2^2//蓝光控制端,0点亮

//函数声明

void Delay(unsigned int t)  

void RGB(unsigned char R ,unsigned char G ,unsigned char B) 

//主函数

void main (void)

{   

    RED = 1  GREEN = 1  BLUE = 1 

    //开始时先关闭LED,当然由于单片机上电就输出 1 ,所以可不写               

    while (1)         //主循环

    {

        //7色光依陵坦次逐渐变亮

        //改变调用顺序可以改变颜色先后次序

        RGB(1,1,0)

        RGB(1,0,1)

        RGB(1,0,0)

        RGB(0,1,1)

        RGB(0,1,0)

        RGB(0,0,1)

        RGB(0,0,0)

    }

}

 

void Delay(unsigned int t)

{

 while(--t)

}

//7色光依次逐渐变亮

RGB(unsigned char R ,unsigned char G ,unsigned char B)

{

    unsigned int pwm , set = 500         

    for(pwm=1pwm<setpwm++)

    { 

             RED    = 1        //熄灭LED 

             GREEN  = 1

             BLUE   = 1 

             Delay(set-pwm)//延时长度,500次循环中从599减至1

             RED    = R        逗汪皮

             GREEN  = G

             BLUE   = B        

             Delay(pwm)//延时长度,500次循环中从1加至599

    }

}

//改变set可以改变变化快慢

//同理你可以写出7色逐渐变暗的程序

这里的程序只是提供一个思路,你如果直接复制粘贴的话会出现格式错误

把每两行中间的空行删掉一般就可消除格式错误

如果再有什么小问题根据编译信息提示稍作修改就行

串电阻的话一般这样算:

R = [ U - U(LED) ] / I

U是LED和电阻总的电压,U(LED)是LED工作电压,I 是LED工作电流,一般10--20mA

电流大小取的适山差中就行了,再计算要串联的电阻值

#include<氏镇笑reg51.h>歼含

#define uchar unsigned char

uchar pwm=50,cnt

sbit pluse=P1^0

sbit keyu=P1^4

sbit keyd=P1^5

void t0isr() interrupt 1

{

TH0=(65536-100)/256

TL0=(65536-100)%256

cnt++

if(pwm>0)

{

if(cnt>旅滑100)cnt=0

if(cnt<=pwm)pluse=1

else pluse=0

}

else pluse=0

}

main()

{

TMOD=0x01

TH0=(65536-100)/256

TL0=(65536-100)%256

TR0=1

ET0=1

EA=1

while(1)

{

if(keyu==0)

{

while(keyu==0)

pwm++

if(pwm>100)pwm=100

}

if(keyd==0)

{

while(keyd==0)

if(pwm>0)pwm--

}

}

}


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

原文地址: http://outofmemory.cn/yw/12553875.html

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

发表评论

登录后才能评论

评论列表(0条)

保存