找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1689|回复: 17
收起左侧

51单片机C语言if判断语句执行问题

  [复制链接]
ID:398219 发表于 2023-5-18 21:52 | 显示全部楼层 |阅读模式
程序大概意思:称重传感器连续发送重量c(假设重量是12),然后进行重量的上下限判断 ,满足条件后进行下一步。

unsigned int Ul=15,Ud=8;//上限14,下限10
unsigned int count1;//称重值
假设count1是12,在程序中进行上下限判断
if((count1 > Ud) && (count1 < Ul))
{
}
在程序中老是进入不到判断条件,将程序改成数字就正常了,求大神指导一下。
if((count1 > 8) && (count1 < 15))
{
}


【STC15W408AS】物流称重项目.rar

103.17 KB, 下载次数: 3

回复

使用道具 举报

ID:94031 发表于 2023-5-19 05:53 | 显示全部楼层
做判断数据类型要一致,a,b,c要设置成同一数据类型。
回复

使用道具 举报

ID:213173 发表于 2023-5-19 07:07 | 显示全部楼层
unsigned char a=14,b=10;//上限14,下限10
if(c>b && c<a)
回复

使用道具 举报

ID:227393 发表于 2023-5-19 08:38 来自手机 | 显示全部楼层
加小括号,if((a>c)&&(a<b))
回复

使用道具 举报

ID:123289 发表于 2023-5-19 08:51 | 显示全部楼层
a=14,b=10,你要求a<b,不知道是如何想的。
a>14 && a<10,你能找出这样的a吗。
晕……
回复

使用道具 举报

ID:824490 发表于 2023-5-19 09:11 | 显示全部楼层
一个数不能大于14的同时又小于10;所以这里是逻辑错乱了!
if(a>c && a<b)//是c<a<b?这里的实际逻辑必需是b>c,否则if永不成立。

&& 是多个条件同时判断,只要有一个“假”总结果就“假”,是“乘”的关系:有0出0,全1出1;
||  是多个条件同时判断,只要有一个“真”总结果就“真”,是“加”的关系:有1出1,全0出0;
回复

使用道具 举报

ID:161164 发表于 2023-5-19 09:37 | 显示全部楼层
你看看你写的是甚么
a是上限,b是下限,c是变量
if(a>c && a<b) >>> if(上限>变量 && 上限<下限)
if(a>14 && a<10) >>> if(上限>14 && 上限<10)
回复

使用道具 举报

ID:398219 发表于 2023-5-19 11:27 | 显示全部楼层
yzwzfyz 发表于 2023-5-19 08:51
a=14,b=10,你要求a14 && a

不好意思,打错了。
意思是a>c>b,判断c中间值。
回复

使用道具 举报

ID:398219 发表于 2023-5-19 11:28 | 显示全部楼层
lkc8210 发表于 2023-5-19 09:37
你看看你写的是甚么
a是上限,b是下限,c是变量
if(a>c && a>> if(上限>变量 && 上限14 && a>> if(上限>1 ...

打错了。
不好意思,打错了。
意思是a>c>b,判断c中间值。
回复

使用道具 举报

ID:77589 发表于 2023-5-19 14:15 | 显示全部楼层
wulin 发表于 2023-5-19 07:07
unsigned char a=14,b=10;//上限14,下限10
if(c>b && c

这才是对的
回复

使用道具 举报

ID:398219 发表于 2023-5-19 15:02 | 显示全部楼层
if((count1 > Ud) && (count1 < Ul))
目前就卡在这里,请大神帮忙看看这个判断这里。
把Ud和Ul换成数字,就正常了。换成变量就不行了

【STC15W408AS】物流称重项目.rar

103.17 KB, 下载次数: 5

回复

使用道具 举报

ID:908826 发表于 2023-5-19 22:19 | 显示全部楼层
herui2128 发表于 2023-5-19 15:02
if((count1 > Ud) && (count1 < Ul))
目前就卡在这里,请大神帮忙看看这个判断这里。
把Ud和Ul换成数字, ...

你这代码真不能运行吗?我在Lightly编译器上跑的没问题哎
回复

使用道具 举报

ID:398219 发表于 2023-5-20 07:36 | 显示全部楼层
13205495918 发表于 2023-5-19 22:19
你这代码真不能运行吗?我在Lightly编译器上跑的没问题哎

能下载进单片机,进行称重数据显示,但是不能进入判断分支进行数量计数。在判断那里把变量改成数字就正常了。
回复

使用道具 举报

ID:1073939 发表于 2023-5-20 10:40 | 显示全部楼层
herui2128 发表于 2023-5-20 07:36
能下载进单片机,进行称重数据显示,但是不能进入判断分支进行数量计数。在判断那里把变量改成数字就正常 ...
在判断那里把变量改成数字就正常了。

判断这部分是没有问题的。
数组越界会造成这种现象。
你代码编译后有大量警告,你先把这部分问题解决了,说不定问题就解决了。
回复

使用道具 举报

ID:398219 发表于 2023-5-21 08:59 | 显示全部楼层
ydatou 发表于 2023-5-20 10:40
判断这部分是没有问题的。
数组越界会造成这种现象。
你代码编译后有大量警告,你先把这部分问题解决 ...

收到,谢谢。明天仔细去看看。
回复

使用道具 举报

ID:398219 发表于 2023-5-22 10:41 | 显示全部楼层
ydatou 发表于 2023-5-20 10:40
判断这部分是没有问题的。
数组越界会造成这种现象。
你代码编译后有大量警告,你先把这部分问题解决 ...

谢谢,问题已经找到了,就是路组越界了。
回复

使用道具 举报

ID:526543 发表于 2023-5-22 13:27 | 显示全部楼层
根据你提供的代码和描述,我注意到一个潜在的问题可能导致判断条件不满足的情况。

在你的代码中,你定义了Ul和Ud作为上限和下限的阈值,类型为unsigned int。然后,在判断条件中,你使用这些变量进行比较。

然而,注意到你给出的判断条件是(count1 > Ud) && (count1 < Ul),这可能导致问题。因为unsigned int类型的变量是无符号整数类型,所以当count1为12时,它既不大于8也不小于15,因为在无符号整数类型中,不允许出现负数。

解决这个问题的方法是修改判断条件为(count1 >= Ud) && (count1 <= Ul),使用大于等于和小于等于的比较操作符,确保边界值也被包括在内。
unsigned int Ul = 15, Ud = 8;  // 上限14,下限10
unsigned int count1;  // 称重值

// ...

if ((count1 >= Ud) && (count1 <= Ul))
{
    // 满足上下限条件,执行下一步操作
}
这样修改后,判断条件将包括边界值,并在count1为12时正确判断为满足上下限条件。

请注意,根据具体的需求和数据类型,你可能需要调整阈值和判断条件,确保它们适合你的应用场景。
回复

使用道具 举报

ID:1074206 发表于 2023-5-22 14:54 | 显示全部楼层
1、数组不能越界
2、逻辑要符合常理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表