智能臺燈:
1、系統(tǒng)具有自動模式和手動模式。
2、自動模式:傳感器檢測到有人時,根據環(huán)境亮度控制臺燈的亮度(PWM控制)。
3、手動模式:可手動控制啟停。
4、具有定時關閉功能,定時時間可調。
sbit smg3=P2^2;
//--定義使用的IO口--// P1數據口
sbit adc0808_start=P2^6;
sbit adc0808_eoc =P2^5;
sbit adc0808_oe =P2^4;
sbit led=P3^6;//led
sbit ir_in=P3^7;
sbit k1=P3^0;//按鈕
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit k5=P3^4;
sbit k6=P3^5;
sbit beep=P2^3;//蜂鳴器
sbit out=P2^7;//臺燈
//數碼管編碼
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar time=0,mode=0;//系統(tǒng)變量
uchar miao=0,fen=1,set=1;//時間
uchar light=0;//光照
uchar start=0;//啟停
uchar pwm=0;//亮度
uchar beep_time=0;//蜂鳴器計時
//延時
void delay(uint i)
{
while(i--);
}
uchar adc0808_read()//讀取
{
uchar i;
_nop_();
adc0808_start=1;//啟動轉換
_nop_();
adc0808_start=0;
while(!adc0808_eoc)//等待轉換結束
{
}
adc0808_oe=1;//讀取
_nop_();
i=P1;
adc0808_oe=0;
return i;
}
//主函數
void main()
{
uchar k=0,i=0;
uint j=0;
adc0808_start=0;
adc0808_oe=0;
TMOD|=0X01;//初始化定時器
TH0=0X3C;
TL0=0XB0;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
while(1)
{
//顯示時間
if(start==1)//啟動模式
{
P0=0XFF;
smg3=0;smg2=0;smg1=0;
P0=smgduan[fen/10];
delay(100);
P0=0XFF;
smg3=0;smg2=0;smg1=1;
P0=smgduan[fen%10]+0x80;
delay(100);
P0=0XFF;
smg3=0;smg2=1;smg1=0;
P0=smgduan[miao/10];
delay(100);
P0=0XFF;
smg3=0;smg2=1;smg1=1;
P0=smgduan[miao%10];
delay(100);
}
else //停止模式
{
P0=0XFF;
smg3=0;smg2=0;smg1=0;
P0=smgduan[set/10];
delay(100);
P0=0XFF;
smg3=0;smg2=0;smg1=1;
P0=smgduan[set%10]+0x80;
delay(100);
P0=0XFF;
smg3=0;smg2=1;smg1=0;
P0=smgduan[0];
delay(100);
P0=0XFF;
smg3=0;smg2=1;smg1=1;
P0=smgduan[0];
delay(100);
}
//顯示光照
P0=0XFF;
smg3=1;smg2=0;smg1=0;
P0=smgduan[light/10];
delay(100);
P0=0XFF;
smg3=1;smg2=0;smg1=1;
P0=smgduan[light%10];
delay(100);
//啟停指示
if(start)
{
P0=0XFF;
smg3=1;smg2=1;smg1=0;
P0=0xbf;
delay(100);
}
//顯示亮度
P0=0XFF;
smg3=1;smg2=1;smg1=1;
P0=smgduan[pwm];
delay(100);
if(!k1 &&(k!=1) &&(start==0))//啟動
{
k=1;
start=1;
fen=set;
miao=0;
}
if(!k2 &&(k!=2))//停止
{
k=2;
start=0;
}
if(!k3 &&(k!=3))//手動,自動
{
k=3;
mode=!mode;
}
if(start==0)
{
if(!k4 &&(k!=4))//時間加
{
k=4;
if(set<99)
set++;
}
if(!k5 &&(k!=5))//時間減
{
k=5;
if(set>1)
set--;
}
}
if(mode==1)
{
if(!k6 &&(k!=6))//亮度切換
{
k=6;
if(pwm<9)
pwm++;
else
pwm=1;
}
}
if(k1 && k2 && k3 && k4 && k5 && k6)
k=0;
資料借鑒于此紛傳
閱讀全文