找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2798|回復(fù): 11
收起左側(cè)

新人在使用單片機(jī)的時(shí)候碰到了一個(gè)問題

  [復(fù)制鏈接]
ID:917597 發(fā)表于 2021-8-24 17:27 | 顯示全部樓層 |閱讀模式
新手玩單片機(jī),在寫C程序的時(shí)候使用到一個(gè)變量flag作為標(biāo)志位,設(shè)想的是賦初值為0,按鍵每按下一次進(jìn)行取反,使得標(biāo)志位在0和1之間切換。實(shí)際調(diào)試的時(shí)候發(fā)現(xiàn)flag定義的時(shí)候是無符號(hào)整型變量,按位取反之后并不是1。后來想到標(biāo)志位flag可以用位定義,就可以實(shí)現(xiàn)按下按鍵后標(biāo)志位取反。

雖然達(dá)成了目的,但是我想到一個(gè)問題:普通的變量由于位數(shù)無法實(shí)現(xiàn)0和1的取反,如果使用位定義那會(huì)平白占用一個(gè)IO口,過于浪費(fèi),這肯定不是正常的方法。那么一般51單片機(jī)在使用的時(shí)候是如何實(shí)現(xiàn)這一目的的呢?這個(gè)問題百度不知道如何描述,只能上論壇上面來詢問一下各位大佬,煩請(qǐng)各位為我答疑解惑。
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2021-8-24 19:36 | 顯示全部樓層
本帖最后由 ssk7793 于 2021-8-24 19:43 編輯

不明白你在說什么,為什么會(huì)占io口呢?取反變量用bit定義
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2021-8-24 20:24 | 顯示全部樓層
可以用 bit 定義位變量,比如 bit   Flag_M,Flag_F;
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2021-8-24 20:32 | 顯示全部樓層
你要用邏輯取反,而不是按位取反,位變量用bit定義。
回復(fù)

使用道具 舉報(bào)

ID:94657 發(fā)表于 2021-8-24 21:35 | 顯示全部樓層
1.按位定義flag,不存在浪費(fèi)一個(gè)IO的問題;
2.不按位來定義flag, 如果初值為0,按鍵后取反,應(yīng)為0xff,C語言中非0為真,你用if(flag)..... 去做按下鍵做什么就可以了

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:917597 發(fā)表于 2021-8-25 00:33 | 顯示全部樓層
ssk7793 發(fā)表于 2021-8-24 19:36
不明白你在說什么,為什么會(huì)占io口呢?取反變量用bit定義

我直接sbit flag=P1^0了......這就是我想出來的辦法
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-8-25 07:41 | 顯示全部樓層
jsezcyc 發(fā)表于 2021-8-25 00:33
我直接sbit flag=P1^0了......這就是我想出來的辦法

bit flag = 0;不行嗎?
回復(fù)

使用道具 舉報(bào)

ID:477532 發(fā)表于 2021-8-25 08:13 | 顯示全部樓層
注意~與!的不同
回復(fù)

使用道具 舉報(bào)

ID:115923 發(fā)表于 2021-8-25 08:36 | 顯示全部樓層
bool 型 變量,   是不是這個(gè)意思?     C語言沒有學(xué)好 ,  哈哈哈哈.
STM32這類的 ,   就不要擔(dān)心浪費(fèi)的問題.    C51要考慮.
回復(fù)

使用道具 舉報(bào)

ID:917597 發(fā)表于 2021-8-25 10:17 | 顯示全部樓層
之前學(xué)過C語言,我用的那本單片機(jī)教材里面是直接以例程講解知識(shí)點(diǎn)的里面沒講單片機(jī)和C語言的區(qū)別,我之前只知道sbit來定義引腳,不知道可以用bit直接定義位變量。[捂臉哭.jpg]謝謝各位大佬,我現(xiàn)在知道該怎么做了。
回復(fù)

使用道具 舉報(bào)

ID:609524 發(fā)表于 2021-8-25 11:44 | 顯示全部樓層
jsezcyc 發(fā)表于 2021-8-25 10:17
之前學(xué)過C語言,我用的那本單片機(jī)教材里面是直接以例程講解知識(shí)點(diǎn)的里面沒講單片機(jī)和C語言的區(qū)別,我之前只 ...

也可以使用結(jié)構(gòu)體來定義
回復(fù)

使用道具 舉報(bào)

ID:584195 發(fā)表于 2021-8-25 12:39 | 顯示全部樓層
你按位取反就可以了呀!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表