標(biāo)題: 簡易單片機人體感應(yīng)燈光控制器程序設(shè)計 [打印本頁]

作者: kaixuan520    時間: 2020-4-28 16:21
標(biāo)題: 簡易單片機人體感應(yīng)燈光控制器程序設(shè)計
功能介紹
簡易人體感應(yīng)燈光控制器
在夜晚,控制器檢測黑暗中的人體,自動打開繼電器,開啟燈光,白天不響應(yīng),也可以作為普通燈控制器使用,開關(guān)使用并聯(lián)方式,方便多地控制燈的亮滅,采用220V供電,使用變壓器隔離,較開關(guān)電源更安全,開關(guān)使用5V供電,更安全


單片機代碼

void main() {
    SysInit();
        
    while(1) {
                key_event();
                HW_event();
               

    }
}

void HW_event(){
        if(countdown2>0)return;//手動控制亮滅
        if((!GM)&&(!JDQ))return;//白天
        
        
        if(GM_flag_t){
                countdown = 120;//120S
                LED3 = 0;
        }else {
                LED3 = 1;
        }
        if(countdown>0){//有人點亮,倒計時熄滅
                JDQ = 1;
        } else {
                JDQ = 0;
                key_flag = 0;
        }
}

u8 jdqf;
void key_event() {
        if(kf == 1){
                if(!JDQ)
                        jdqf = !jdqf;
                else {
                        countdown2 = 0;
                        countdown = 0;
                        jdqf = 0;
                }
                if(jdqf == 1){
                        countdown2 = 1800;
                }else {
                        countdown2 = 0;
                }
                kf = 0;
        }
    if(countdown2>0) {
        JDQ = 1;
    } else {
        JDQ = 0;
        key_flag = 0;
    }
}

u16 kn;
void key_scanf() {
    if(!KEY&&!kf)kn++;
    else {
        if(kn>50&&kn<1000)kf = 1;
        else if(kn>1000)kf = 2;
        kn = 0;
    }
}

u16 timer1s;
void tm0_isr() interrupt 1
{
    timer1s++;
    timer1s %= 1000;
    if(timer1s == 0) {
        if(countdown>0)
            countdown--;
        if(countdown2>0)
            countdown2 --;
    }

    key_scanf();//按鈕掃描
}


//人體紅外
void exint1() interrupt 2       //INT1中斷入口
{
    if(HW == 1)               //保存INT1口的狀態(tài), INT1=0(下降沿); INT1=1(上升沿)
        GM_flag_t = 1;
    else
        GM_flag_t = 0;
}

void SysInit() {

    P3M1 = 0xff;
    P3M0 = 0x00;
    P1M1 = 0x00;
    P1M0 = 0x02;
    P2M1 = 0x00;
    P2M0 = 0x00;

    LED3 = 1;        //熄滅LED
    JDQ = 0;        //關(guān)閉繼電器
    KEY = 1;
    GM = 0;
    HW = 0;

    AUXR = 0x80;                   //定時器0為1T模式
    TMOD = 0x00;                    //設(shè)置定時器為模式0(16位自動重裝載)
    TL0 = -(FOSC/1000);                     //初始化計時值
    TH0 = -(FOSC/1000) >> 8;
    TR0 = 1;                        //定時器0開始計時
    ET0 = 1;                        //使能定時器0中斷

    IT1 = 0;                    //設(shè)置INT1的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
    EX1 = 1;                    //使能INT1中斷

    EA = 1;
}


完整代碼請下載附件
感應(yīng)燈控制器.7z (17.51 KB, 下載次數(shù): 69)
PCB和原理圖鏈接(自行替換.): oshwhub點com/xkz49/ting-yuan-d

b.PNG (63.63 KB, 下載次數(shù): 125)

PCB

PCB

a.PNG (87.64 KB, 下載次數(shù): 130)

原理圖

原理圖

a1.jpg (3.55 MB, 下載次數(shù): 134)

實物圖

實物圖

作者: dreamoyjie    時間: 2022-6-9 17:36
你好,感謝你的分享,本人是新手,想問問,可不可發(fā)一份可以用在stc15w401as上面的程序文件嗎?或者如果要怎么設(shè)定參數(shù)才合適呢
作者: dreamoyjie    時間: 2022-6-9 17:49
你好,謝謝你的分享.本人是新手,手上有一片STC15W401AS開發(fā)板,按你的電路圖接好線,再按你的程序編了固件,JDQ P13 /LED P12/KEY P30/GM P36/HW P33,但功能實現(xiàn)不了,上電JDQ會亮,按一下開關(guān)K1,JDQ會滅,但p12總是高電平,GM ,HW接底電平也沒反應(yīng),請我要怎么做才能將功能移值到這片stc15w401as上面呢?非常感謝




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1