设计一个声、光、红外同时控制的门灯系统:
1、光敏控制灯在白天不亮,只在晚上声控检测到声音或者红外检测到人靠近时灯亮;
2、声音消失或人离开后延时30秒灯熄灭。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ADCLK= P1^0;//时钟,初始状态为0
sbit ADDI= P1^1;//数据输入
sbit ADDO = P1^2; // 数据输出
sbit ADCS= P1^3;
sbit led=P3^3;//灯
sbit man=P3^2;//人体
sbit voice=P3^1;//声音
uint miao=0;//计时
//将AD转换来的二进制数转换为十进制数
unsigned int zhuanhuan() //AD转换,返回结果
{
unsigned char i = 0,channel=2;
unsigned char j;
unsigned int dat = 0;
unsigned char ndat = 0;
ADDI = 1;//输入引脚拉高
_nop_();//延时1us
_nop_();//延时1us
ADCS = 0;//片选
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 1;//拉高时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 1;//拉高时钟
ADDI = channel & 0x1;
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 1;//拉高时钟
ADDI = (channel >> 1) & 0x1;
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
ADDI = 1;//输出1
_nop_();//延时1us
_nop_();//延时1us
dat = 0; //存储清零
for (i = 0; i < 8; i++) //循环8次
{
dat |= ADDO;//读取引脚
ADCLK = 1; //拉高时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
_nop_();//延时1us
_nop_();//延时1us
dat <<= 1;//左移
if (i == 7) dat |= ADDO;//读取引脚
}
阅读全文