//单片机STC15W2K16.
//晶振11.0592.
//LED红绿蓝三色共阳。
//PWM输出在第四脚(P1.0)
#include<intrins.h>
#include "stch15.h"//这个头文件是STC15.H
#define uchar unsigned char
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
sbit bled=P2^3;//蓝色LED.
sbit rled=P2^4;//红色LED
sbit gled=P2^5;//绿色LED
uchar u;
uchar zhanko=0xff;//占空比
void pwmint()//这是PCA初始化函数
{
CMOD=0X02;
CL=0X00;
CH=0X00;
CCAPM0=0X42;
CCAP0H=0Xff;
CCAP0L=0Xff;
CR=1;
}
void pwmshe(uchar t)//这是占空比调节函数
{
CCAP0H=t;
CCAP0L=t;
}
void yan(int q)//延时函数
{
char a,b;
for(a=100;a>0;a--)
for(b=q;b>0;b--);
}
void anjian()//按键扫描
{
if(k1==0)//占空比增加按键
{
yan(100);
if(k1==0)
yan(100);
if(k1==1)
yan(100);
if(zhanko<255)
{
zhanko=zhanko+1;
pwmshe(zhanko);//占空比设置函数
}
}
if(k2==0)//占空比减小按键
{
yan(100);
if(k2==0)
{
yan(100);
}
if(k2==1)
yan(100);
if(zhanko>0)
{
zhanko=zhanko-1;
pwmshe(zhanko);
}
}
if(k3==0)//红绿蓝三色LED选择按键
{
yan(1000);
if(k3==0)
{
yan(1000);
if(k3==1)
{
yan(1000);
u++;
}
if(u==1)
yan(500);
{
bled=1;//蓝色LED
rled=1;//红色LED
gled=0;//绿色LED
}
if(u==2)
{
bled=0;
rled=1;
gled=1;
}
if(u==3)
{
bled=1;
rled=0;
gled=1;
}
if(u==4)
{
u=1;
}
}
}
}
void main()
{
pwmint();
while(1)
{
anjian();
}
}
|