標(biāo)題: 51單片機人體紅外感應(yīng) 照明控制系統(tǒng)主程序設(shè)計 [打印本頁]
作者: miaoyamin 時間: 2017-5-23 00:54
標(biāo)題: 51單片機人體紅外感應(yīng) 照明控制系統(tǒng)主程序設(shè)計
#include<reg52.h>
#include<intrins.h>
#defineuint unsigned int
#defineuchar unsigned char
sbitIR=P1^0; //人體紅外信號輸入
sbitLAMP=P2^0; //照明燈控制接口
bitfIR=0; //人體紅外信號標(biāo)志位
unsignedint times=0;
unsignedchar SetSecond=10;
unsignedint SetTime=0;
voiddelayms(uint ms) //延時xx毫秒
{
uchari;
while(ms--)
{
for(i=0;i<123;i++);
}
}
voidTimer0() interrupt 1 //定時器0中斷,開啟定時器中斷后,每50ms中斷1次。
{
TH0 = (65535-50000)/256;
TL0 =(65535-50000)%256; //定時器重新加載初始值
if(fIR==0) //人體紅外信號標(biāo)志位為0,人體已經(jīng)離開房間
{
if(++times==SetTime) //倒計時時間累計,每次中斷50ms,20次為1秒,200次為10秒
{
times = 0; ////倒計時時間累計清0
TR0=0; //停止計時
LAMP=1; //照明燈熄滅
}
}
}
voidmain(void) //主程序
{
P2=0xff;P3=0xff;P1=0xff;
SetTime=SetSecond*20; //計算倒計時時間,每次中斷50ms,20次為1秒,200次為10秒
TMOD = 0x01; //設(shè)置定時器0模式
TH0 =(65535-50000)/256;
TL0 =(65535-50000)%256; //定時器加載初始值
EA=1; //允許中斷觸發(fā)
ET0=1; //允許定時器0中斷
TR0=0; //停止定時器0計時
while(1)
{
if(IR==0) //有人體信號
{
delayms(20); //延時,防止誤觸發(fā)
if(IR==0) //有人體信號
{
fIR=1;TR0=1; //啟動定時器0,設(shè)置人體紅外信號標(biāo)志位為1
LAMP=0; //照明燈點亮
}
}
else fIR=0; //沒有人體紅外信號,設(shè)置人體紅外信號標(biāo)志位為0
}
}
作者: 笑點滴 時間: 2017-5-23 18:10
請問一下 這個模塊是不是不太穩(wěn)定,我試了一下 有時候靠近了沒反應(yīng)
作者: HUANGHFS 時間: 2017-5-23 21:28
你有一些地方寫錯了,只是缺少空格或多了一些:例如IR,你寫成fIR。#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit IR=P1^0; //人體紅外信號輸入 sbit LAMP=P2^0; //照明燈控制接口 bitfIR=0; //人體紅外信號標(biāo)志位 unsigned int times=0; unsigned char SetSecond=10; unsigned int SetTime=0; void delayms(uint ms) //延時xx毫秒 { uchar i; while(ms--) { for(i=0;i<123;i++); } } voidTimer0() interrupt 1 //定時器0中斷,開啟定時器中斷后,每50ms中斷1次。 { TH0 = (65535-50000)/256; TL0 =(65535-50000)%256; //定時器重新加載初始值 if(IR==0) //人體紅外信號標(biāo)志位為0,人體已經(jīng)離開房間 { if(++times==SetTime) //倒計時時間累計,每次中斷50ms,20次為1秒,200次為10秒 { times = 0; ////倒計時時間累計清0 TR0=0; //停止計時 LAMP=1; //照明燈熄滅 } } } void main(void) //主程序 { P2=0xff; P3=0xff; P1=0xff; SetTime=SetSecond*20; //計算倒計時時間,每次中斷50ms,20次為1秒,200次為10秒 TMOD = 0x01; //設(shè)置定時器0模式 TH0 =(65535-50000)/256; TL0 =(65535-50000)%256; //定時器加載初始值 EA=1; //允許中斷觸發(fā) ET0=1; //允許定時器0中斷 TR0=0; //停止定時器0計時 while(1) { if(IR==0) //有人體信號 { delayms(20); //延時,防止誤觸發(fā) if(IR==0) //有人體信號 { IR=1; TR0=1; //啟動定時器0,設(shè)置人體紅外信號標(biāo)志位為1 LAMP=0; //照明燈點亮 } } else IR=0; //沒有人體紅外信號,設(shè)置人體紅外信號標(biāo)志位為0 } }
作者: xhz 時間: 2017-5-24 14:47
謝謝,正是需要樓主就發(fā)來了,請問有電路圖嗎?
作者: 立致T5T8廚柜燈 時間: 2018-1-25 17:57
樓主你好!我是做感應(yīng)燈的,可以微信溝通?我的微信18022012218
作者: 陳張浩 時間: 2018-3-20 18:18
你好,我想問下,為什么我的LED燈一直亮呢
作者: 1656997475 時間: 2018-4-17 09:10
能詳細點微信 1656997475
作者: 1656997475 時間: 2018-4-17 09:11
這很多錯誤能搞好一點嗎 謝謝 微信 1656997475
作者: 小白帆 時間: 2018-5-1 14:10
我感覺你幫樓主改錯了吧,main函數(shù)中在確定IR==0時,樓主的目的是為了給出一個標(biāo)志標(biāo)明IR==0,即感應(yīng)到有人(FIR=1),這沒有寫錯,是你寫錯了
作者: 2239789937 時間: 2018-6-5 23:13
樓主我的也是一直亮著 你解決了嗎
作者: zfys6868 時間: 2018-12-9 22:35
樓主我這個也是再亮,不知道怎么修改,您能否指點一下呢
作者: 1234566W 時間: 2019-1-31 18:45
像這種畢業(yè)設(shè)計的實物材料可以在哪里買
作者: 2026076977 時間: 2020-6-3 21:16
人體感應(yīng)控制 舵機 程序是怎樣的呢
作者: aking991 時間: 2020-6-4 08:16
有時候看你們的程序可點醒我一些想法,謝謝分享
作者: oooppj 時間: 2020-6-13 03:54
大佬 有電路圖嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |