Proteus仿真为什么总是不成功呀??求大神相助

2019-07-18 10:39发布

本帖最后由 上弦月ゝ 于 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;                         //开灯
                }

}

总电路 总电路
灯电路 灯电路
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。