最后进行调试时候,为什么这个发光二极管led就总是一闪一闪的,加1时候,led闪得越来越快?
这算是调整亮度吗?我要是亮和暗那种样子。
程序都编辑好了
sbit led1=P2^0;
sbit led2=P2^2;
sbit PWM=P3^7;
sbit key1=P2^6;//A加
sbit key2=P2^7;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
u8 fenpin=1;
u16 chuzhi=500;
u16 timer0;
void delay(u16 i)
{
while(i--);
}
void key()
{
if(key1==0) //A加
{
delay(100);
if(key1==0)
{
if(fenpin<16)
{
fenpin++;
beep=0;
}else
{
beep=1;
}
}
while(!key1);
}
if(key2==0) //A减
{
delay(100);
if(key2==0)
{
if(fenpin>=2)
{
fenpin--;
beep=0;
}else
{
beep=1;
}
}
while(!key2);
}
}
void timer_init(void) //定时器初始化函数
{
TMOD=0X51; //设置定时器工作模式
PT0=1;
TH0 = (65536 -chuzhi)/256;//给定时器赋初值
TL0 = (65536 -chuzhi)%256;
TH1=0; //不设初值
TL1=0;
ET0=1; //开中断
ET1=1;
TR0=1; //开定时器
TR1=1;
EA=1; //开总中断
}
void main()
{
timer_init();
beep=0;
while(1)
{
key();
}
}
void timer() interrupt 1 //定时器0中断函数
{
TH0 = (65536 - chuzhi)/256;//给定时器赋初值
TL0 = (65536 - chuzhi)%256;
timer0=!timer0; //时间变量
if(TL1>=fenpin)
{
TL1=0;
PWM=!PWM;
}
if(timer0)
{
P1=0x00;
led1=0;
led2=1;
P1=smgduan[fenpin/10];
}else
{
P1=0x00;
led1=1;
led2=0;
P1=smgduan[fenpin%10];
}
}
|