标题: 新人在使用单片机的时候碰到了一个问题 [打印本页]

作者: jsezcyc    时间: 2021-8-24 17:27
标题: 新人在使用单片机的时候碰到了一个问题
新手玩单片机,在写C程序的时候使用到一个变量flag作为标志位,设想的是赋初值为0,按键每按下一次进行取反,使得标志位在0和1之间切换。实际调试的时候发现flag定义的时候是无符号整型变量,按位取反之后并不是1。后来想到标志位flag可以用位定义,就可以实现按下按键后标志位取反。

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

作者: ssk7793    时间: 2021-8-24 19:36
本帖最后由 ssk7793 于 2021-8-24 19:43 编辑

不明白你在说什么,为什么会占io口呢?取反变量用bit定义
作者: xuyaqi    时间: 2021-8-24 20:24
可以用 bit 定义位变量,比如 bit   Flag_M,Flag_F;
作者: npn    时间: 2021-8-24 20:32
你要用逻辑取反,而不是按位取反,位变量用bit定义。
作者: anchor8583    时间: 2021-8-24 21:35
1.按位定义flag,不存在浪费一个IO的问题;
2.不按位来定义flag, 如果初值为0,按键后取反,应为0xff,C语言中非0为真,你用if(flag)..... 去做按下键做什么就可以了
作者: jsezcyc    时间: 2021-8-25 00:33
ssk7793 发表于 2021-8-24 19:36
不明白你在说什么,为什么会占io口呢?取反变量用bit定义

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

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

也可以使用结构体来定义
作者: zyluglugl    时间: 2021-8-25 12:39
你按位取反就可以了呀!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1