本帖最后由 lids 于 2017-2-23 09:54 編輯
/*按S2按鍵LED1燈變暗,LED2變亮,按S3按鍵LED1變亮,LED2變亮;s4開關鍵。如果兩個LED一個用高色溫,一個用低色溫,裝在一個燈板上,就可以實現調光,調色溫
*/
#include <reg52.h>
unsigned char pwm_led_val = 25;//LED占空比值 0-50 0最亮,pwm_led_val值越大,調光的速度越慢。開始兩個LED一樣亮
unsigned char pwm_t;//周期
unsigned char num;
bit flag;
sbit key_s2 = P3^0; //減鍵
sbit key_s3 = P3^1; //加鍵
sbit key_s4 = P3^2; //開關鍵
sbit led1 = P1^0;
sbit led2 = P1^7;
void delay(unsigned int z)//毫秒級延時
{
unsigned int x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
//定時器0中斷
void timer0() interrupt 1
{
pwm_t++;
if(pwm_t == 50)
{
pwm_t = 0; led1 = 1; led2 = ~led1;
}
if(pwm_led_val == pwm_t)
{
led1 = 0; led2 = ~led1;
}
}
void main()
{
TMOD |= 0x02;//8位自動重裝模塊
TH0 = 240;
TL0 = 240;//11.0592M晶振下占空比最大比值是50,輸出約1150HZ
TR0 = 1;//啟動定時器0
ET0 = 1;//允許定時器0中斷
EA = 1;//總中斷允許
while(1)
{
if(flag==0)
{
if(key_s2 == 0) //S2按下LED變暗
{
delay(5);
if(key_s2 == 0)
{
if(pwm_led_val < 50)
{
pwm_led_val++;
}
// while(!key_s2);
}
}
if(key_s3 == 0) //S3按鍵LED變亮
{
delay(5);
if(key_s3 == 0)
{
if(pwm_led_val > 0)
{
pwm_led_val--;
}
// while(!key_s3);
}
}
}
else{
led1 = 1; led2 = 1;
}
/*開關燈程序,按1次燈亮,再按1次燈滅,如此循環*/
if(num==0)
{
if(key_s4==0)
{
delay(5);
if(key_s4==0)
{
num++;
flag=~flag;
TR0=0;
while(!key_s4);
}
}
}
if(num==1)
{
if(key_s4==0)
{
delay(5);
if(key_s4==0)
{
num=0;
flag=~flag;
TR0=1;
while(!key_s4);
}
}
}
}
}
|