設(shè)計一個聲、光、紅外同時控制的門燈系統(tǒng):
1、光敏控制燈在白天不亮,只在晚上聲控檢測到聲音或者紅外檢測到人靠近時燈亮;
2、聲音消失或人離開后延時30秒燈熄滅。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ADCLK= P1^0;//時鐘,初始狀態(tài)為0
sbit ADDI= P1^1;//數(shù)據(jù)輸入
sbit ADDO = P1^2; // 數(shù)據(jù)輸出
sbit ADCS= P1^3;
sbit led=P3^3;//燈
sbit man=P3^2;//人體
sbit voice=P3^1;//聲音
uint miao=0;//計時
//將AD轉(zhuǎn)換來的二進制數(shù)轉(zhuǎn)換為十進制數(shù)
unsigned int zhuanhuan() //AD轉(zhuǎn)換,返回結(jié)果
{
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++) //循環(huán)8次
{
dat |= ADDO;//讀取引腳
ADCLK = 1; //拉高時鐘
_nop_();//延時1us
_nop_();//延時1us
ADCLK = 0;//拉低時鐘
_nop_();//延時1us
_nop_();//延時1us
dat <<= 1;//左移
if (i == 7) dat |= ADDO;//讀取引腳
}
?
閱讀全文