登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2834|回11|收藏
楼主 ID:917597 只看他
2021-8-24 17:27
新手玩单片机,在写C程序的时候使用到一个变量flag作为标志位,设想的是赋初值为0,按键每按下一次进行取反,使得标志位在0和1之间切换。实际调试的时候发现flag定义的时候是无符号整型变量,按位取反之后并不是1。后来想到标志位flag可以用位定义,就可以实现按下按键后标志位取反。

虽然达成了目的,但是我想到一个问题:普通的变量由于位数无法实现0和1的取反,如果使用位定义那会平白占用一个IO口,过于浪费,这肯定不是正常的方法。那么一般51单片机在使用的时候是如何实现这一目的的呢?这个问题百度不知道如何描述,只能上论坛上面来询问一下各位大佬,烦请各位为我答疑解惑。
沙发 ID:424598 只看他
2021-8-24 19:36
本帖最后由 ssk7793 于 2021-8-24 19:43 编辑

不明白你在说什么,为什么会占io口呢?取反变量用bit定义
板凳 ID:94031 只看他
2021-8-24 20:24
可以用 bit 定义位变量,比如 bit   Flag_M,Flag_F;
地板 ID:57657 只看他
2021-8-24 20:32
你要用逻辑取反,而不是按位取反,位变量用bit定义。
5# ID:94657 只看他
2021-8-24 21:35
1.按位定义flag,不存在浪费一个IO的问题;
2.不按位来定义flag, 如果初值为0,按键后取反,应为0xff,C语言中非0为真,你用if(flag)..... 去做按下键做什么就可以了
6# ID:917597 只看他
2021-8-25 00:33

引用:

ssk7793 发表于 2021-8-24 19:36
不明白你在说什么,为什么会占io口呢?取反变量用bit定义

我直接sbit flag=P1^0了......这就是我想出来的办法
7# ID:161164 只看他
2021-8-25 07:41

引用:

jsezcyc 发表于 2021-8-25 00:33
我直接sbit flag=P1^0了......这就是我想出来的办法

bit flag = 0;不行吗?
8# ID:477532 只看他
2021-8-25 08:13
注意~与!的不同
9# ID:115923 只看他
2021-8-25 08:36
bool 型 变量,   是不是这个意思?     C语言没有学好 ,  哈哈哈哈.
STM32这类的 ,   就不要担心浪费的问题.    C51要考虑.
10# ID:917597 只看他
2021-8-25 10:17
之前学过C语言,我用的那本单片机教材里面是直接以例程讲解知识点的里面没讲单片机和C语言的区别,我之前只知道sbit来定义引脚,不知道可以用bit直接定义位变量。[捂脸哭.jpg]谢谢各位大佬,我现在知道该怎么做了。
11# ID:609524 只看他
2021-8-25 11:44

引用:

jsezcyc 发表于 2021-8-25 10:17
之前学过C语言,我用的那本单片机教材里面是直接以例程讲解知识点的里面没讲单片机和C语言的区别,我之前只 ...

也可以使用结构体来定义
12# ID:584195 只看他
2021-8-25 12:39
你按位取反就可以了呀!

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版