贪狼lyb 发表于 2014-3-24 13:24:04

51单片机读引脚问题

#include <reg52.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>

#define uchar unsigned char
#define uint unsigned int

#define MAXCHAR 90
ucharaa;

sbit fire=P0^0;                                  //火焰
sbit shake=P0^1;                                //震动

sbit dianshiji=P0^2;                        //电视机
sbit dianfanguo=P0^3;                  //电冰箱
sbit reshuiqi=P0^4;                                //热水器
sbit xiyiji=P0^5;                                //洗衣机
sbit men=P0^6;                                        //门
sbit buffer=P0^7;                                //蜂鸣器

void main()
{
               

        fire=1;                                  //火焰          检测IO口
        shake=1;                                //震动          检测IO口

        dihiji=1;                        //电视机
        dianfuo=1;                  /        eshuiqi=1;                                //热水器
        xiyiji=1;                                //洗衣机
        men=1;                                  //门

        flag=0;
        buffer=0;

        P10=1;
        P11=1;
        P12=1;
        P13=1;                  

           while(1)
    {       
                if(P10==0)
                {
                        //发送中文短信李四
                   send_english_3();
                   delay(1000);
                }
                if(P11==0)
                {
                        //发送中文短信赵五
                   send_english_4();
                }               
                if(strstr(aa,"+CMTI")!=NULL)    //缓存中有+CMTI字符
      {
            
                        clearBuff();
            Print_Str(CMGF1);
            delay(10);
                        Print_Str(CMGF1);
            delay(10);
                        Print_Str(CMGF1);
            delay(10);
            while(Hand()==0);
            clearBuff();
            Print_Str(CMGR);            //读取1号位置的短信
            delay(10);
                        Print_Str(CMGR);            //读取1号位置的短信
            delay(10);
                        Print_Str(CMGR);            //读取1号位置的短信
            delay(10);


                        if(strstr(aa,"hn")!=NULL)               //户内模式
            {       
                send_english();
                                flag=1;
            }
                        if(strstr(aa,"out")!=NULL)               //户外模式
            {       
                send_english();
                                flag=2;
            }
                        if(flag==2)                                                           //户外模式
                        {
                                if(strstr(aa,"men")!=NULL)                  
                    {       
                                        flag1++;
                                        if(flag1==1)
                                                men=0;
                                        if(flag1==2)
                                        {
                                                flag1=0;
                                                men=1;       
                                        }
                      send_english();               
                    }
                                if(strstr(aa,"dfg")!=NULL)                  
                    {
                                        flag2++;
                                        if(flag2==1)
                                                dianfanguo=0;
                                        if(flag2==2)
                                        {
                                                flag2=0;
                                                dianfanguo=1;       
                                        }
                      send_english();                       
                    }
       
                                if(strstr(aa,"rsq")!=NULL)                  
                    {       
                                        flag3++;
                                        if(flag3==1)
                                                reshuiqi=0;
                                        if(flag3==2)
                                        {
                                                flag3=0;
                                                reshuiqi=1;       
                                        }
                      send_english();                       
                    }
       
                                if(strstr(aa,"tv")!=NULL)                  
                    {       
                                        flag4++;
                                        if(flag4==1)
                                                dianshiji=0;
                                        if(flag4==2)
                                        {
                                                flag4=0;
                                                dianshiji=1;       
                                        }
                      send_english();                       
                    }
       
                                if(strstr(aa,"xyj")!=NULL)                  
                    {       
                                        flag5++;
                                        if(flag5==1)
                                                xiyiji=0;
                                        if(flag5==2)
                                        {
                                                flag5=0;
                                                xiyiji=1;       
                                        }
                      send_english();                       
                    }
       
                                if(fire==1)
                                {       
                                        fire=0;
                                        send_english_1();
                                        for(i=5;i>0;i--)                  //蜂鸣器响5次报警
                                        {
                                                buffer=0;
                                                delay(100);
                                                buffer=1;
                                                delay(100);
                                        }
                                }
                                                                                                        //户外模式
                                if(shake==0)
                                {       
                                        shake=1;
                                        send_english_2();
                                        for(i=3;i>0;i--)                  //蜂鸣器响3次报警
                                        {
                                                buffer=0;
                                                delay(100);
                                                buffer=1;
                                                delay(100);
                                        }
                                }                       
                        }
      }
                if(flag==1)                                                           //户内模式
                        {
                               if(shake==0)
                                {       
                                        shake=1;
                               
                                        for(i=3;i>0;i--)            //蜂鸣器响3次报警
                                        {
                                                buffer=0;
                                                delay(100);
                                                buffer=1;
                                                delay(100);
                                        }
                                }
                                if(fire==1)
                                {
                                        fire=0;
                                        for(i=5;i>0;i--)             //蜂鸣器响5次报警
                                        {
                                                buffer=0;
                                                delay(100);
                                                buffer=1;
                                                delay(100);
                                        }
                                }
       
                        }
                               
哪位大侠帮小弟看一下,为啥火焰传感器和震动传感器无法检测到

lcw_swust 发表于 2014-3-24 14:28:14

if(fire==1){fire=0;
为什么要这样写呢?
最后貌似少了几个大括号,建议把该对齐的地方对齐。

贪狼lyb 发表于 2014-3-24 17:31:40

lcw_swust 发表于 2014-3-24 14:28
if(fire==1){fire=0;
为什么要这样写呢?
最后貌似少了几个大括号,建议把该对齐的地方对齐。 ...

奥奥,我把IO口检测的那段程序放在一进while(1)时能都执行相应的程序,为啥一放在flag1或者flag2条件之下再进行扫描IO口就不执行了呢?

eva015401 发表于 2014-3-24 18:32:45

这个程序排序好乱      

syauxwm 发表于 2014-3-24 19:00:12

想法跟踪下不就可以了了么?

lcw_swust 发表于 2014-3-24 21:18:05

贪狼lyb 发表于 2014-3-24 17:31
奥奥,我把IO口检测的那段程序放在一进while(1)时能都执行相应的程序,为啥一放在flag1或者flag2条件之下 ...

看来楼主不明白
if(fire==1){fire=0;
应当替换为
if(fire==0){

JohnsonTan 发表于 2014-3-24 22:37:53

你这通过编译了吗?最好源程序贴出来吧

JohnsonTan 发表于 2014-3-25 08:58:59

早上起来细看了一下一的程序,缺少两个“}”
这两个“}”分别是while(1)和main()的
如果你的while(1)的右打开括号实在if(flag==2)   //户外模式
这肯定是你现在的现象因为while(1)不可能执行后面的代码

贪狼lyb 发表于 2014-3-25 13:14:44

JohnsonTan 发表于 2014-3-25 08:58
早上起来细看了一下一的程序,缺少两个“}”
这两个“}”分别是while(1)和main()的
如果你的while(1)的右 ...

恩呢是的,谢谢指点

wildone 发表于 2014-4-10 14:26:26

其实以后出现问题 ,可以用一个LED灯,做为程序的检测作用
页: [1]
查看完整版本: 51单片机读引脚问题