10级可调的STC11F01单片机控制的led
时间:10-02
整理:3721RD
点击:
#include <REG51.H>
//#include <absacc.H>
#define uint unsigned int
#define uchar unsigned char
char t0_val=0;
unsigned char code tabltl0[] ={0x18,0x04,0x18,0x0c
};
unsigned char code tablth0[] ={0xc7,0xd1,0xc0,0xf0
};
unsigned char code tabltl1[] ={0x18,0x0c,0x18,0x04
};
unsigned char code tablth1[] ={0xf9,0xf0,0xc0,0xd1
};
sbit key_h = P3^2;
sbit key_l = P3^3;
sbit output = P1^7;
void my_delay10nms(unsigned int n) //延时函数
{
unsigned i,j;
while(n --)
{
for(i = 128;i > 0;i --)
for(j = 10;j > 0;j --);
}
}
void tcosrv (void) interrupt 3
{ TR1=0;TR0=1;
TH1=tablth1[t0_val];
TL1=tabltl1[t0_val];
output=1;
}
void tc0_srv(void) interrupt 1
{ TR0=1;TR1=1;
TH0=tablth0[t0_val];
TL0=tabltl0[t0_val];
output=0;
}
void main()
{
TMOD=0X00;
TH1=tablth1[t0_val];
TL1=tabltl1[t0_val];
TH0=tablth0[t0_val];
TL0=tabltl0[t0_val];
ET1=1;
ET0 = 1;
TR0 = 1;
TR1=1;
EA=1;
while(1)
{
if(key_h==0)
{
my_delay10nms(10);
if(key_h==0)
{
while(key_h==0);
t0_val++;
if( t0_val>3)
t0_val=3;
}
}
if(key_l==0)
{
my_delay10nms(10);
if(key_l==0)
{
while(key_l==0);
t0_val--;
if(t0_val<0)
t0_val=0;
}
}
}
}
不知道对不对
//#include <absacc.H>
#define uint unsigned int
#define uchar unsigned char
char t0_val=0;
unsigned char code tabltl0[] ={0x18,0x04,0x18,0x0c
};
unsigned char code tablth0[] ={0xc7,0xd1,0xc0,0xf0
};
unsigned char code tabltl1[] ={0x18,0x0c,0x18,0x04
};
unsigned char code tablth1[] ={0xf9,0xf0,0xc0,0xd1
};
sbit key_h = P3^2;
sbit key_l = P3^3;
sbit output = P1^7;
void my_delay10nms(unsigned int n) //延时函数
{
unsigned i,j;
while(n --)
{
for(i = 128;i > 0;i --)
for(j = 10;j > 0;j --);
}
}
void tcosrv (void) interrupt 3
{ TR1=0;TR0=1;
TH1=tablth1[t0_val];
TL1=tabltl1[t0_val];
output=1;
}
void tc0_srv(void) interrupt 1
{ TR0=1;TR1=1;
TH0=tablth0[t0_val];
TL0=tabltl0[t0_val];
output=0;
}
void main()
{
TMOD=0X00;
TH1=tablth1[t0_val];
TL1=tabltl1[t0_val];
TH0=tablth0[t0_val];
TL0=tabltl0[t0_val];
ET1=1;
ET0 = 1;
TR0 = 1;
TR1=1;
EA=1;
while(1)
{
if(key_h==0)
{
my_delay10nms(10);
if(key_h==0)
{
while(key_h==0);
t0_val++;
if( t0_val>3)
t0_val=3;
}
}
if(key_l==0)
{
my_delay10nms(10);
if(key_l==0)
{
while(key_l==0);
t0_val--;
if(t0_val<0)
t0_val=0;
}
}
}
}
不知道对不对
用PWM的占空比比较好吧
这个我不太懂,刚接触这玩意。您能具体讲下嘛?
我说具体点,现在这个板子上大概有70几个LED,一个船型开关控制他的亮度,接通电源后是最亮,然后按开关由亮变暗,总共有十级。片子用的11F01
没有免费的午餐
提一点建议:可以用串口来模拟PWM。用方式1,可以产生占空比10%~90%、以10%递进的PWM信号,发送0x00占空比为10%(最后一位停止位为1,其余9位为0),发送0x01为20%,0x03为30%,发送0x07为40%,发送0x0f为50%,发送0x1f为60%,发送0x3f为70%,发送0x7f为80%,发送0xff为90%。如果想要0%或100%,就关闭串口,直接写P3^1 = 0或P3^1 = 1;因为视觉暂留效应,PWM频率有30Hz肉眼就几乎看不出有闪烁了,所以对波特率的要求的不高(压根就没什么要求),用T1作波特率发生器的话,不管时钟频率是多少,直接在方式2下写一个TH1 = TH0 = 100就可以了。
希望对你有所帮助。
TH1 = TL1 = 100,写错了
嗯,现在调光用PWM确实是主流
谢谢~我再试试这个,找程序调出来了可是还不太懂
不错的文件,值得收藏