找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4869|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

簡易單片機人體感應(yīng)燈光控制器程序設(shè)計

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:300212 發(fā)表于 2020-4-28 16:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
功能介紹
簡易人體感應(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)

實物圖

實物圖

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:282710 發(fā)表于 2022-6-9 17:36 | 只看該作者
你好,感謝你的分享,本人是新手,想問問,可不可發(fā)一份可以用在stc15w401as上面的程序文件嗎?或者如果要怎么設(shè)定參數(shù)才合適呢
回復(fù)

使用道具 舉報

板凳
ID:282710 發(fā)表于 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上面呢?非常感謝
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表