原创STC15F104W3个按键控制3路PWM驱动全彩LED
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
原创STC15F104W3个按键控制3路PWM驱动全彩LED
/*程序说明*/
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波// //P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%
//短按加1%占空比
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit red=P3^3; //红色LED输出口
sbit green=P3^4; //绿色LED输出口
sbit blue=P3^5; //蓝色LED输出口
sbit k1=P3^0; //红色LEDpwm控制
sbit k2=P3^1; //绿色LEDpwm控制
sbit k3=P3^2; //蓝色LEDpwm控制
uchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存uchar flag; //定时器T2定时次数标志
//延时函数,大约延时10ms.
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
//按键扫描程序
void key()
{
uchar num1=0,num2=0,num3=0;
if(k1==0) //按键K1处理程序
{
Delay10ms();
if(k1==0)
{
if(r_temp<99)
{
r_temp++;
while(!k1)
{
num1++; //长按标志位加到10约100ms Delay10ms();
if(num1==10&&r_temp<95)
{
r_temp+=5;
num1=0;
}
if(r_temp>=95) r_temp=1;
}
}
else r_temp=1;
}
}
if(k2==0) //按键K2处理程序
{
Delay10ms();
if(k2==0)
{
if(g_temp<99)
{
g_temp++;
while(!k2)
{
num2++; //长按标志位加到10约100ms Delay10ms();
if(num2==10&&g_temp<95)
{
g_temp+=5;
num2=0;
}
if (g_temp>=95) g_temp=1;
}
}
else g_temp =1;
}
}
if(k3==0) //按键K3处理程序
{
Delay10ms();
if(k3==0)
{
if(b_temp<99)
{
b_temp++;
while(!k3)
{
num3++; //长按标志位加到10约100ms
Delay10ms();
if(num3==10&&b_temp<95)
{
b_temp+=5;
num3=0;
}
if(b_temp>=95) b_temp=1;
}
}
else b_temp =1;
}
}
}
//定时器T0 16位自动模式定时1ms 控制灯灭时间
void InitTimer0() interrupt 1 // 1毫秒@11.0592MHz {
IE2 = 0x00; //关闭定时器2中断
AUXR=0XE4; //关闭定时器2计数
TL0 = 0xCD;
TH0 = 0xD4;
red=1;
green=1;
flag=1;
AUXR=0xF4; //开启定时器2计数
IE2=0x04; //开启定时器2中断允许
}
//定时器T2 16位自动模式定时10us 控制等亮时间
void InitTimer2() interrupt 12 // 10微秒@11.0592MHz {
flag++;
T2L = 0x91; //设置定时初值
T2H = 0xFF; //设置定时初值
if(r_temp==flag) red=0;
if(g_temp==flag) green=0;
if(b_temp==flag) blue=0;
}
void init()
{
AUXR =0XE4;//设置定时器0和2为1T模式
TMOD= 0x00;
TL0 = 0xCD;
TH0 = 0xD4;
T2L = 0x91; //设置定时初值
T2H = 0xFF; //设置定时初值
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
init();
{ key(); }
}。