標(biāo)題: 51單片機(jī)C語言if判斷語句執(zhí)行問題 [打印本頁]

作者: herui2128    時(shí)間: 2023-5-18 21:52
標(biāo)題: 51單片機(jī)C語言if判斷語句執(zhí)行問題
程序大概意思:稱重傳感器連續(xù)發(fā)送重量c(假設(shè)重量是12),然后進(jìn)行重量的上下限判斷 ,滿足條件后進(jìn)行下一步。

unsigned int Ul=15,Ud=8;//上限14,下限10
unsigned int count1;//稱重值
假設(shè)count1是12,在程序中進(jìn)行上下限判斷
if((count1 > Ud) && (count1 < Ul))
{
}
在程序中老是進(jìn)入不到判斷條件,將程序改成數(shù)字就正常了,求大神指導(dǎo)一下。
if((count1 > 8) && (count1 < 15))
{
}


【STC15W408AS】物流稱重項(xiàng)目.rar

103.17 KB, 下載次數(shù): 3


作者: xuyaqi    時(shí)間: 2023-5-19 05:53
做判斷數(shù)據(jù)類型要一致,a,b,c要設(shè)置成同一數(shù)據(jù)類型。
作者: wulin    時(shí)間: 2023-5-19 07:07
unsigned char a=14,b=10;//上限14,下限10
if(c>b && c<a)
作者: sgq657785    時(shí)間: 2023-5-19 08:38
加小括號(hào),if((a>c)&&(a<b))
作者: yzwzfyz    時(shí)間: 2023-5-19 08:51
a=14,b=10,你要求a<b,不知道是如何想的。
a>14 && a<10,你能找出這樣的a嗎。
暈……

作者: 名字不是重點(diǎn)    時(shí)間: 2023-5-19 09:11
一個(gè)數(shù)不能大于14的同時(shí)又小于10;所以這里是邏輯錯(cuò)亂了!
if(a>c && a<b)//是c<a<b?這里的實(shí)際邏輯必需是b>c,否則if永不成立。

&& 是多個(gè)條件同時(shí)判斷,只要有一個(gè)“假”總結(jié)果就“假”,是“乘”的關(guān)系:有0出0,全1出1;
||  是多個(gè)條件同時(shí)判斷,只要有一個(gè)“真”總結(jié)果就“真”,是“加”的關(guān)系:有1出1,全0出0;
作者: lkc8210    時(shí)間: 2023-5-19 09:37
你看看你寫的是甚么
a是上限,b是下限,c是變量
if(a>c && a<b) >>> if(上限>變量 && 上限<下限)
if(a>14 && a<10) >>> if(上限>14 && 上限<10)
作者: herui2128    時(shí)間: 2023-5-19 11:27
yzwzfyz 發(fā)表于 2023-5-19 08:51
a=14,b=10,你要求a14 && a

不好意思,打錯(cuò)了。
意思是a>c>b,判斷c中間值。
作者: herui2128    時(shí)間: 2023-5-19 11:28
lkc8210 發(fā)表于 2023-5-19 09:37
你看看你寫的是甚么
a是上限,b是下限,c是變量
if(a>c && a>> if(上限>變量 && 上限14 && a>> if(上限>1 ...

打錯(cuò)了。
不好意思,打錯(cuò)了。
意思是a>c>b,判斷c中間值。
作者: Longan.Wang    時(shí)間: 2023-5-19 14:15
wulin 發(fā)表于 2023-5-19 07:07
unsigned char a=14,b=10;//上限14,下限10
if(c>b && c

這才是對(duì)的
作者: herui2128    時(shí)間: 2023-5-19 15:02
if((count1 > Ud) && (count1 < Ul))
目前就卡在這里,請(qǐng)大神幫忙看看這個(gè)判斷這里。
把Ud和Ul換成數(shù)字,就正常了。換成變量就不行了

【STC15W408AS】物流稱重項(xiàng)目.rar

103.17 KB, 下載次數(shù): 5


作者: 13205495918    時(shí)間: 2023-5-19 22:19
herui2128 發(fā)表于 2023-5-19 15:02
if((count1 > Ud) && (count1 < Ul))
目前就卡在這里,請(qǐng)大神幫忙看看這個(gè)判斷這里。
把Ud和Ul換成數(shù)字, ...

你這代碼真不能運(yùn)行嗎?我在Lightly編譯器上跑的沒問題哎
作者: herui2128    時(shí)間: 2023-5-20 07:36
13205495918 發(fā)表于 2023-5-19 22:19
你這代碼真不能運(yùn)行嗎?我在Lightly編譯器上跑的沒問題哎

能下載進(jìn)單片機(jī),進(jìn)行稱重?cái)?shù)據(jù)顯示,但是不能進(jìn)入判斷分支進(jìn)行數(shù)量計(jì)數(shù)。在判斷那里把變量改成數(shù)字就正常了。
作者: ydatou    時(shí)間: 2023-5-20 10:40
herui2128 發(fā)表于 2023-5-20 07:36
能下載進(jìn)單片機(jī),進(jìn)行稱重?cái)?shù)據(jù)顯示,但是不能進(jìn)入判斷分支進(jìn)行數(shù)量計(jì)數(shù)。在判斷那里把變量改成數(shù)字就正常 ...
在判斷那里把變量改成數(shù)字就正常了。

判斷這部分是沒有問題的。
數(shù)組越界會(huì)造成這種現(xiàn)象。
你代碼編譯后有大量警告,你先把這部分問題解決了,說不定問題就解決了。
作者: herui2128    時(shí)間: 2023-5-21 08:59
ydatou 發(fā)表于 2023-5-20 10:40
判斷這部分是沒有問題的。
數(shù)組越界會(huì)造成這種現(xiàn)象。
你代碼編譯后有大量警告,你先把這部分問題解決 ...

收到,謝謝。明天仔細(xì)去看看。
作者: herui2128    時(shí)間: 2023-5-22 10:41
ydatou 發(fā)表于 2023-5-20 10:40
判斷這部分是沒有問題的。
數(shù)組越界會(huì)造成這種現(xiàn)象。
你代碼編譯后有大量警告,你先把這部分問題解決 ...

謝謝,問題已經(jīng)找到了,就是路組越界了。
作者: 123456ZXC1    時(shí)間: 2023-5-22 13:27
根據(jù)你提供的代碼和描述,我注意到一個(gè)潛在的問題可能導(dǎo)致判斷條件不滿足的情況。

在你的代碼中,你定義了Ul和Ud作為上限和下限的閾值,類型為unsigned int。然后,在判斷條件中,你使用這些變量進(jìn)行比較。

然而,注意到你給出的判斷條件是(count1 > Ud) && (count1 < Ul),這可能導(dǎo)致問題。因?yàn)閡nsigned int類型的變量是無符號(hào)整數(shù)類型,所以當(dāng)count1為12時(shí),它既不大于8也不小于15,因?yàn)樵跓o符號(hào)整數(shù)類型中,不允許出現(xiàn)負(fù)數(shù)。

解決這個(gè)問題的方法是修改判斷條件為(count1 >= Ud) && (count1 <= Ul),使用大于等于和小于等于的比較操作符,確保邊界值也被包括在內(nèi)。
unsigned int Ul = 15, Ud = 8;  // 上限14,下限10
unsigned int count1;  // 稱重值

// ...

if ((count1 >= Ud) && (count1 <= Ul))
{
    // 滿足上下限條件,執(zhí)行下一步操作
}
這樣修改后,判斷條件將包括邊界值,并在count1為12時(shí)正確判斷為滿足上下限條件。

請(qǐng)注意,根據(jù)具體的需求和數(shù)據(jù)類型,你可能需要調(diào)整閾值和判斷條件,確保它們適合你的應(yīng)用場(chǎng)景。
作者: kk17328    時(shí)間: 2023-5-22 14:54
1、數(shù)組不能越界
2、邏輯要符合常理




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1