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);
}
}
}
哪位大侠帮小弟看一下,为啥火焰传感器和震动传感器无法检测到 if(fire==1){fire=0;
为什么要这样写呢?
最后貌似少了几个大括号,建议把该对齐的地方对齐。 lcw_swust 发表于 2014-3-24 14:28
if(fire==1){fire=0;
为什么要这样写呢?
最后貌似少了几个大括号,建议把该对齐的地方对齐。 ...
奥奥,我把IO口检测的那段程序放在一进while(1)时能都执行相应的程序,为啥一放在flag1或者flag2条件之下再进行扫描IO口就不执行了呢? 这个程序排序好乱 想法跟踪下不就可以了了么? 贪狼lyb 发表于 2014-3-24 17:31
奥奥,我把IO口检测的那段程序放在一进while(1)时能都执行相应的程序,为啥一放在flag1或者flag2条件之下 ...
看来楼主不明白
if(fire==1){fire=0;
应当替换为
if(fire==0){ 你这通过编译了吗?最好源程序贴出来吧 早上起来细看了一下一的程序,缺少两个“}”
这两个“}”分别是while(1)和main()的
如果你的while(1)的右打开括号实在if(flag==2) //户外模式
这肯定是你现在的现象因为while(1)不可能执行后面的代码
JohnsonTan 发表于 2014-3-25 08:58
早上起来细看了一下一的程序,缺少两个“}”
这两个“}”分别是while(1)和main()的
如果你的while(1)的右 ...
恩呢是的,谢谢指点 其实以后出现问题 ,可以用一个LED灯,做为程序的检测作用
页:
[1]