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