标题: 如何用C51单片机人体红外传感器控制一个简单的led灯 [打印本页]

作者: 谢禅    时间: 2018-4-29 19:58
标题: 如何用C51单片机人体红外传感器控制一个简单的led灯
如何用C51人体红外传感器控制一个简单的led灯

作者: 1057327346    时间: 2018-4-30 09:58
利用红外模块,检测输出电平即可
作者: 梦想天空    时间: 2018-5-27 14:22
#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char  sbit IR=P1^0;           //人体红外信号输入 sbit LAMP=P2^0;     //照明灯控制接口  bit fIR=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++);     } }  void Timer0() 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;     //照明灯熄灭         }     } }    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)   //有人体信号             {                 fIR=1;TR0=1;    //启动定时器0,设置人体红外信号标志位为1                 LAMP=0;     //照明灯点亮             }         }         else fIR=0; //没有人体红外信号,设置人体红外信号标志位为0     } }
作者: 五月525    时间: 2018-5-27 17:54
思路应该是这样的,首先你要清楚红外传感器的接法,这个的话你买的时候可以跟商家要资料,有详细讲解接法的。任何的传感器,检测到变化之后都会输出一个变化的电平,当红外传感器检测到人体发出来的红外线后吗,就会通过输出管脚输出一个电平,只要检测到这个电平后,产生外部中断,中断服务函数设置为LED闪烁即可
作者: 教教我单片机把    时间: 2019-3-11 18:13
梦想天空 发表于 2018-5-27 14:22
#include #include #define uint unsigned int #define uchar unsigned char  sbit IR=P1^0;           // ...

可以将灯泡换成小风扇吗?有啥注意事项吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1