本帖最后由 上弦月ゝ 于 2012-12-14 21:07 编辑
这是声光控智能开关的
电路原理图,不知道为什么
仿真总之跟理论上的不同。检查了下电路。发现灯电路那块不管P点电压高还是低。灯总是亮的。正常情况灯应该是低的亮高时灭。另外。
单片机还总是输出高电平,影响到了光控电路与声控电路的电平接受。本人菜鸟求大神指点呀。另附单片机中c程序
#include<reg52.h> //头文件
#define uint unsigned int //宏定义
#define uchar unsigned char
/*******************************************************
端口定义
********************************************************/
sbit guang=P1^0; //光敏电阻接的IO口
sbit deng= P3^5; //灯接的IO口
/*******************************************************/
uchar num=0;
uint num1=0;
bit flag=0;
/***************************************************
函数名称:主函数
函数功能:
****************************************************/
void main()
{
TMOD=0x01; //设置定时器0工作方式0
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=0; //启动定时器0
deng=1; //控制灯的IO口置1
EX0=1; //开外部中断0
IT0=1; //设置中断方式为下降沿出发方式
while(1)
{
if(flag==1)
{
deng=1;
flag=0;
}
}
}
/******************************************************
函数名称:定时器/计时器0中断子函数
函数功能:
******************************************************/
void T0_
time() interrupt 1 //打开定时器
{
TH0=(65536-50000)/256; //重装初值
TL0=(65536-50000)%256;
num++; //50ms num加1
if(num>=20) //等于20 一秒时间到
{
num=0; //num清0
num1++; //num1++
if(num1>=60) //一分钟到
{
TR0=0; //定时器关闭
num1=0; //num1清0
flag=1; //标志位flag置1
} //一秒自加一次
}
}
void int1() interrupt 0 //有声音 声音IO口出现一个低电平 引起外部中断
{
if(guang==1) //光暗的时候
{
TR0=1; //开定时器
deng=0; //开灯
}
}
-
总电路
-
灯电路
一周热门 更多>