找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16002|回复: 14
打印 上一主题 下一主题
收起左侧

51单片机人体红外感应 照明控制系统主程序设计

  [复制链接]
跳转到指定楼层
楼主
ID:203714 发表于 2017-5-23 00:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#defineuint unsigned int
#defineuchar unsigned char

sbitIR=P1^0;           //人体红外信号输入
sbitLAMP=P2^0;     //照明灯控制接口

bitfIR=0;            //人体红外信号标志位

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)  //人体红外信号标志位为0,人体已经离开房间
    {
        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;    //设置定时器0模式
    TH0  =(65535-50000)/256;
    TL0  =(65535-50000)%256; //定时器加载初始值
    EA=1;   //允许中断触发
    ET0=1;  //允许定时器0中断
    TR0=0;  //停止定时器0计时
    while(1)
    {
        if(IR==0)   //有人体信号
        {
            delayms(20);    //延时,防止误触发
            if(IR==0)   //有人体信号
            {
                fIR=1;TR0=1;    //启动定时器0,设置人体红外信号标志位为1
                LAMP=0;     //照明灯点亮
            }
        }
        else fIR=0; //没有人体红外信号,设置人体红外信号标志位为0
    }
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:108380 发表于 2017-5-23 18:10 | 只看该作者
请问一下 这个模块是不是不太稳定,我试了一下 有时候靠近了没反应
回复

使用道具 举报

板凳
ID:191024 发表于 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;            //人体红外信号标志位  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)  //人体红外信号标志位为0,人体已经离开房间     {         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;    //设置定时器0模式     TH0  =(65535-50000)/256;     TL0  =(65535-50000)%256; //定时器加载初始值     EA=1;   //允许中断触发     ET0=1;  //允许定时器0中断     TR0=0;  //停止定时器0计时     while(1)     {         if(IR==0)   //有人体信号         {             delayms(20);    //延时,防止误触发             if(IR==0)   //有人体信号             {                 IR=1;                                 TR0=1;    //启动定时器0,设置人体红外信号标志位为1                 LAMP=0;     //照明灯点亮             }         }         else IR=0; //没有人体红外信号,设置人体红外信号标志位为0     } }
回复

使用道具 举报

地板
ID:204026 发表于 2017-5-24 14:47 | 只看该作者
谢谢,正是需要楼主就发来了,请问有电路图吗?
回复

使用道具 举报

5#
ID:279710 发表于 2018-1-25 17:57 来自手机 | 只看该作者
楼主你好!我是做感应灯的,可以微信沟通?我的微信18022012218
回复

使用道具 举报

6#
ID:278493 发表于 2018-3-20 18:18 | 只看该作者
HUANGHFS 发表于 2017-5-23 21:28
你有一些地方写错了,只是缺少空格或多了一些:例如IR,你写成fIR。#include #include #define uint unsign ...

你好,我想问下,为什么我的LED灯一直亮呢
回复

使用道具 举报

7#
ID:309787 发表于 2018-4-17 09:10 | 只看该作者
立致T5T8厨柜灯 发表于 2018-1-25 17:57
楼主你好!我是做感应灯的,可以微信沟通?我的微信18022012218

能详细点微信 1656997475
回复

使用道具 举报

8#
ID:309787 发表于 2018-4-17 09:11 | 只看该作者
这很多错误能搞好一点吗  谢谢   微信 1656997475
回复

使用道具 举报

9#
ID:288202 发表于 2018-5-1 14:10 | 只看该作者
HUANGHFS 发表于 2017-5-23 21:28
你有一些地方写错了,只是缺少空格或多了一些:例如IR,你写成fIR。#include #include #define uint unsign ...

我感觉你帮楼主改错了吧,main函数中在确定IR==0时,楼主的目的是为了给出一个标志标明IR==0,即感应到有人(FIR=1),这没有写错,是你写错了
回复

使用道具 举报

10#
ID:260648 发表于 2018-6-5 23:13 | 只看该作者
楼主我的也是一直亮着 你解决了吗
回复

使用道具 举报

11#
ID:442930 发表于 2018-12-9 22:35 | 只看该作者
楼主我这个也是再亮,不知道怎么修改,您能否指点一下呢
回复

使用道具 举报

12#
ID:474424 发表于 2019-1-31 18:45 | 只看该作者
像这种毕业设计的实物材料可以在哪里买
回复

使用道具 举报

13#
ID:768873 发表于 2020-6-3 21:16 | 只看该作者
人体感应控制  舵机 程序是怎样的呢
回复

使用道具 举报

14#
ID:65956 发表于 2020-6-4 08:16 | 只看该作者
有时候看你们的程序可点醒我一些想法,谢谢分享
回复

使用道具 举报

15#
ID:777780 发表于 2020-6-13 03:54 | 只看该作者
笑点滴 发表于 2017-5-23 18:10
请问一下 这个模块是不是不太稳定,我试了一下 有时候靠近了没反应

大佬 有电路图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表