求助,if条件判断执行不了,请问那里有问题?3个条件判断。

qq_32339877 2018-09-15 01:29:59
if(scdl>6&&scdy<=860&&wd<=820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}

else if(scdl>6&&scdy<=860&&820<wd&&wd<=909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
else if(scdl>6&&scdy<=860&&wd>909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(scdl>6&&scdy>860&&wd<=820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(scdl>6&&scdy>860&&820<wd&&wd<=909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
else if(scdl>6&&scdy>860&&wd>909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(scdl<=6)
{
CHONGDIAN=0;
GONGZUO=1;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=0;
}
...全文
430 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-09-17
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
qq_32339877 2018-09-17
  • 打赏
  • 举报
回复
引用 8 楼 赵4老师 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
谢谢,指导。
qq_32339877 2018-09-17
  • 打赏
  • 举报
回复
引用 10 楼 zangfong 的回复:
unsigned char bufscdy[16];
unsigned char bufscdl[16];
unsigned char bufscdwd[16];
改成
unsigned int bufscdy[16];
unsigned int bufscdl[16];
unsigned int bufscdwd[16];
试试?
意思是定义成16位类型,我晚上试试,谢谢。
zangfong 2018-09-17
  • 打赏
  • 举报
回复
看了你的源代码,我觉得应该不是if判断的问题,应该是出在你的get_ad函数里。
你看下,你定义的unsigned char bufscdy[16];那么bufscdy也就1个字节,但你后来还是准备塞2个字节 (bufscdl[l]=ADRESH*256+ADRESL;)
所以我猜会不会是因为这个原因,所以你获得的 bufscdl都没有获取到你想要的结果,所以if判断才只能走else?
unsigned char bufscdl[16];
unsigned char bufscdwd[16];
也是同理。
引用 6 楼 qq_32339877 的回复:
#include <pic.h>
__CONFIG(HS&WDTDIS&LVPDIS);
#define GONGZUO RD0
#define CHONGDIAN RD1
#define GUANJI RD2
#define JIANGGONGLV RD3
#define JIANGDIBAOHUDIANLIU RD4
void Delay(unsigned int i)
{
unsigned int k;
for(k=0;k<i;k++);
}
void init()
{
TRISA=0b11111111;
TRISD=0b00000000;
PORTA=0b00000000;
PORTD=0b00000000;
ADCON1=0b10000000;
ADIE=0;
}
unsigned int get_ad(unsigned char m)
{
if(m==0)
{
unsigned char bufscdy[16];
unsigned char j;
unsigned int ADbufscdy;
for(j=0;j<16;j++)
{
ADCON0=0b00000001;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
bufscdy[j]=ADRESH*256+ADRESL;
}
ADbufscdy=0;
for(j=0;j<16;j++)
{
ADbufscdy+=bufscdy[j];
}
ADbufscdy=ADbufscdy/16;
return(ADbufscdy);
}
else if(m==1)
{
unsigned char bufscdl[16];
unsigned char l;
unsigned int ADbufscdl;
for(l=0;l<16;l++)
{
ADCON0=0b00001001;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
bufscdl[l]=ADRESH*256+ADRESL;
}
ADbufscdl=0;
for(l=0;l<16;l++)
{
ADbufscdl+=bufscdl[l];
}
ADbufscdl=ADbufscdl/16;
return(ADbufscdl);
}
else if(m==2)
{
unsigned char bufscdwd[16];
unsigned char t;
unsigned int ADbufscdwd;
for(t=0;t<16;t++)
{
ADCON0=0b00010001;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
bufscdwd[t]=ADRESH*256+ADRESL;
}
ADbufscdwd=0;
for(t=0;t<16;t++)
{
ADbufscdwd+=bufscdwd[t];
}
ADbufscdwd=ADbufscdwd/16;
return(ADbufscdwd);
}
}
void main(void)
{
unsigned int scdy;
unsigned int scdl;
unsigned int wd;
init();
while(1)
{
scdy=get_ad(0);
scdl=get_ad(1);
wd=get_ad(2);
if(scdl > 6)
{
if(scdy<=860)
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}
else
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}

}
else
{
CHONGDIAN=0;
GONGZUO=1;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=0;
}
}
}
这是我全部的程序,大致意思是3个AD转换的结果出来,判断,符合什么条件就执行什么语句。我目前是用ISIS仿真软件仿真的,结果都不是想要的结果。各位大神看看我这程序那里要改的。万分感谢。
zangfong 2018-09-17
  • 打赏
  • 举报
回复
unsigned char bufscdy[16];
unsigned char bufscdl[16];
unsigned char bufscdwd[16];
改成
unsigned int bufscdy[16];
unsigned int bufscdl[16];
unsigned int bufscdwd[16];
试试?
qq_32339877 2018-09-16
  • 打赏
  • 举报
回复
引用 1 楼 zangfong 的回复:
我试了下,你这段代码也可以运行的呀。你自己再调试一下看看。另外,作为强迫症患者,帮你整理了一下,不知道有没有复制粘贴错:
    if(scdl > 6)
{
if(scdy<=860)
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}
else
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}

}
else
{
CHONGDIAN=0;
GONGZUO=1;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=0;
}
谢谢,指导,但是我改成你写的还是不执行,每次到if判断就直接跳过,跳到else这里执行里面的语句。
qq_32339877 2018-09-15
  • 打赏
  • 举报
回复
#include <pic.h>
__CONFIG(HS&WDTDIS&LVPDIS);
#define GONGZUO RD0
#define CHONGDIAN RD1
#define GUANJI RD2
#define JIANGGONGLV RD3
#define JIANGDIBAOHUDIANLIU RD4
void Delay(unsigned int i)
{
unsigned int k;
for(k=0;k<i;k++);
}
void init()
{
TRISA=0b11111111;
TRISD=0b00000000;
PORTA=0b00000000;
PORTD=0b00000000;
ADCON1=0b10000000;
ADIE=0;
}
unsigned int get_ad(unsigned char m)
{
if(m==0)
{
unsigned char bufscdy[16];
unsigned char j;
unsigned int ADbufscdy;
for(j=0;j<16;j++)
{
ADCON0=0b00000001;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
bufscdy[j]=ADRESH*256+ADRESL;
}
ADbufscdy=0;
for(j=0;j<16;j++)
{
ADbufscdy+=bufscdy[j];
}
ADbufscdy=ADbufscdy/16;
return(ADbufscdy);
}
else if(m==1)
{
unsigned char bufscdl[16];
unsigned char l;
unsigned int ADbufscdl;
for(l=0;l<16;l++)
{
ADCON0=0b00001001;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
bufscdl[l]=ADRESH*256+ADRESL;
}
ADbufscdl=0;
for(l=0;l<16;l++)
{
ADbufscdl+=bufscdl[l];
}
ADbufscdl=ADbufscdl/16;
return(ADbufscdl);
}
else if(m==2)
{
unsigned char bufscdwd[16];
unsigned char t;
unsigned int ADbufscdwd;
for(t=0;t<16;t++)
{
ADCON0=0b00010001;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
bufscdwd[t]=ADRESH*256+ADRESL;
}
ADbufscdwd=0;
for(t=0;t<16;t++)
{
ADbufscdwd+=bufscdwd[t];
}
ADbufscdwd=ADbufscdwd/16;
return(ADbufscdwd);
}
}
void main(void)
{
unsigned int scdy;
unsigned int scdl;
unsigned int wd;
init();
while(1)
{
scdy=get_ad(0);
scdl=get_ad(1);
wd=get_ad(2);
if(scdl > 6)
{
if(scdy<=860)
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}
else
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}

}
else
{
CHONGDIAN=0;
GONGZUO=1;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=0;
}
}
}
这是我全部的程序,大致意思是3个AD转换的结果出来,判断,符合什么条件就执行什么语句。我目前是用ISIS仿真软件仿真的,结果都不是想要的结果。各位大神看看我这程序那里要改的。万分感谢。
qq_32339877 2018-09-15
  • 打赏
  • 举报
回复
这种写法我也写过,但是我通过ISIS仿真,仿真不出我要的结果。
Z_Ascll 2018-09-15
  • 打赏
  • 举报
回复
先不说你的语句有么有问题,我们就先说你的逻辑吧,你设计的逻辑是存在很大的问题的,区分不清楚,在判断的时候多次重复“scdl>6&&scdy>860”,这样会使程序出现不必要的运行,也会使你的思维逻辑出现错误(也就是思维误区),if语句是可以嵌套的,
你可以一个一个区分的,优化代码我帮你整理了,这样的话就可以根据语句的结构来识别思维逻辑。程序是一小部分,思维逻辑是一大部分。
if(scdl>6)
{
if(scdy<=860)
{
if(wd<=820)
{

}else if(820<wd&&<=909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
}else
{
if(wd<=820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}else if(820<wd&&<=909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
}
}else
{
CHONGDIAN=0;
GONGZUO=1;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=0;
}
帅得不敢出门 2018-09-15
  • 打赏
  • 举报
回复
建议把数字换成enum或者define,magic number对理解不好。
zangfong 2018-09-15
  • 打赏
  • 举报
回复
我试了下,你这段代码也可以运行的呀。你自己再调试一下看看。另外,作为强迫症患者,帮你整理了一下,不知道有没有复制粘贴错:
    if(scdl > 6)
{
if(scdy<=860)
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=0;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}
else
{
if(wd <= 820)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else if(wd > 909)
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=1;
}
else
{
CHONGDIAN=1;
GONGZUO=0;
GUANJI=1;
JIANGGONGLV=1;
JIANGDIBAOHUDIANLIU=1;
}
}

}
else
{
CHONGDIAN=0;
GONGZUO=1;
GUANJI=0;
JIANGGONGLV=0;
JIANGDIBAOHUDIANLIU=0;
}
幻夢之葉 2018-09-15
  • 打赏
  • 举报
回复
条件不符合当然不执行
你是想实现如下?
if(scdl>6)
{
if(scdy<=860)
{
if(wd...)...
}
else
{
if(wd ...)...
}
}
else
{
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧