#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--
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)