#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define NOP() _nop_() sbit MOSIO=P3^3;sbit R_CLK=P3^5;sbit S_CLK=P3^6; //74HC595
芯片控制LED灯 sbit G=P2^0; //
室外光敏传感器sbit S=P2^1; //
走廊声敏传感器sbit H=P2^2; //
室内楼层一,红外热释电传感器sbit H1=P2^3; //
室内一楼到二楼,楼梯,红外热释电传感器sbit led0=P1^5; //
走廊声控sbit led=P1^6; //
室内楼层一,灯泡控制sbit led1=P1^7; //
走廊灯泡控制 //
变量定义 void ZL();void EL();void delay(uint i);void HC595SendData(uchar SendVal);void Com_Init();void DJ();void ERL();//
函数定义 void main(){ uchar Led=0xfe; uint l=0; uchar temp; Com_Init(); temp=0x00; //
初始化串口通讯为方式0 led0=0; led1=0; TMOD=0x06; TH0=1; TL0=1; EA=1; ET0=1; TR0=1; if(S==0&&G==1) { led0=1; delay(1000); //
走廊灯泡延时控制 } else led0=0; if(G==1&&H==1) //
触发条件 l=1; //
楼层一,天黑且有人时,灯一直亮,最后一人离场关灯。 while(l) { led=0; //
楼层一,灯全亮 ZL(); EL(); // if(G==0) // l=0; ERL(); } //led=1;//
外面已经天亮了 }//
主函数 void HC595SendData(uchar SendVal){ uchar i; for(i=0;i<8;i++) { if((SendVal<<i)&0x80) MOSIO=1; else MOSIO=0; S_CLK=0; NOP(); NOP(); S_CLK=1; } R_CLK=0; NOP(); NOP(); R_CLK=1;}//
灯泡驱动函数 1 void ZL(){ if(S==0&&G==1) { led0=1; delay(1000); //
进入循环后的走廊灯泡延时控制 } else led0=0; HC595SendData(0xff); }//
走廊工作函数 void EL(){ if(H1==1&&TL0>=3) { led1=1; //
一楼人数积满,二楼楼梯感应到有人时灯亮 delay(1000); } else led1=0;}//EL
二楼楼梯工作函数 void T0_
time() interrupt 1{ TL0++; //
对外部脉冲的计数}//
人数计数涵数 /*
功能:对串行端口进行初始化为方式0**********************************/void Com_Init(void){ SCON = 0x00; } void ERL(){ uchar temp; temp=0x00; //
初始化串口通讯为方式0 temp=0xff; SBUF = temp; while(!TI) //
如果发送完毕,硬件会置位TI { _nop_(); } TI = 0; //
软件清零TI // DJ();} void delay(uint i){ uint j; for(i;i>0;i--) for(j=300;j>0;j--);}//
延时函数,1毫秒
一周热门 更多>