智能臺(tái)燈:
1、系統(tǒng)具有自動(dòng)模式和手動(dòng)模式。
2、自動(dòng)模式:傳感器檢測(cè)到有人時(shí),根據(jù)環(huán)境亮度控制臺(tái)燈的亮度(PWM控制)。
3、手動(dòng)模式:可手動(dòng)控制啟停。
4、具有定時(shí)關(guān)閉功能,定時(shí)時(shí)間可調(diào)。
sbit smg3=P2^2;
//--定義使用的IO口--// P1數(shù)據(jù)口
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;//臺(tái)燈
//數(shù)碼管編碼
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;//時(shí)間
uchar light=0;//光照
uchar start=0;//啟停
uchar pwm=0;//亮度
uchar beep_time=0;//蜂鳴器計(jì)時(shí)
//延時(shí)
void delay(uint i)
{
while(i--);
}
uchar adc0808_read()//讀取
{
uchar i;
_nop_();
adc0808_start=1;//啟動(dòng)轉(zhuǎn)換
_nop_();
adc0808_start=0;
while(!adc0808_eoc)//等待轉(zhuǎn)換結(jié)束
{
}
adc0808_oe=1;//讀取
_nop_();
i=P1;
adc0808_oe=0;
return i;
}
//主函數(shù)
void main()
{
uchar k=0,i=0;
uint j=0;
adc0808_start=0;
adc0808_oe=0;
TMOD|=0X01;//初始化定時(shí)器
TH0=0X3C;
TL0=0XB0;
ET0=1;//打開(kāi)定時(shí)器0中斷允許
EA=1;//打開(kāi)總中斷
TR0=1;//打開(kāi)定時(shí)器
while(1)
{
//顯示時(shí)間
if(start==1)//啟動(dòng)模式
{
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))//啟動(dòng)
{
k=1;
start=1;
fen=set;
miao=0;
}
if(!k2 &&(k!=2))//停止
{
k=2;
start=0;
}
if(!k3 &&(k!=3))//手動(dòng),自動(dòng)
{
k=3;
mode=!mode;
}
if(start==0)
{
if(!k4 &&(k!=4))//時(shí)間加
{
k=4;
if(set<99)
set++;
}
if(!k5 &&(k!=5))//時(shí)間減
{
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;
資料借鑒于此紛傳
閱讀全文