找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1852|回复: 11
打印 上一主题 下一主题
收起左侧

新人在使用单片机的时候碰到了一个问题

  [复制链接]
跳转到指定楼层
楼主
ID:917597 发表于 2021-8-24 17:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
新手玩单片机,在写C程序的时候使用到一个变量flag作为标志位,设想的是赋初值为0,按键每按下一次进行取反,使得标志位在0和1之间切换。实际调试的时候发现flag定义的时候是无符号整型变量,按位取反之后并不是1。后来想到标志位flag可以用位定义,就可以实现按下按键后标志位取反。

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

使用道具 举报

12#
ID:584195 发表于 2021-8-25 12:39 | 只看该作者
你按位取反就可以了呀!
回复

使用道具 举报

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

也可以使用结构体来定义
回复

使用道具 举报

10#
ID:917597 发表于 2021-8-25 10:17 | 只看该作者
之前学过C语言,我用的那本单片机教材里面是直接以例程讲解知识点的里面没讲单片机和C语言的区别,我之前只知道sbit来定义引脚,不知道可以用bit直接定义位变量。[捂脸哭.jpg]谢谢各位大佬,我现在知道该怎么做了。
回复

使用道具 举报

9#
ID:115923 发表于 2021-8-25 08:36 | 只看该作者
bool 型 变量,   是不是这个意思?     C语言没有学好 ,  哈哈哈哈.
STM32这类的 ,   就不要担心浪费的问题.    C51要考虑.
回复

使用道具 举报

8#
ID:477532 发表于 2021-8-25 08:13 | 只看该作者
注意~与!的不同
回复

使用道具 举报

7#
ID:161164 发表于 2021-8-25 07:41 | 只看该作者
jsezcyc 发表于 2021-8-25 00:33
我直接sbit flag=P1^0了......这就是我想出来的办法

bit flag = 0;不行吗?
回复

使用道具 举报

6#
ID:917597 发表于 2021-8-25 00:33 | 只看该作者
ssk7793 发表于 2021-8-24 19:36
不明白你在说什么,为什么会占io口呢?取反变量用bit定义

我直接sbit flag=P1^0了......这就是我想出来的办法
回复

使用道具 举报

5#
ID:94657 发表于 2021-8-24 21:35 | 只看该作者
1.按位定义flag,不存在浪费一个IO的问题;
2.不按位来定义flag, 如果初值为0,按键后取反,应为0xff,C语言中非0为真,你用if(flag)..... 去做按下键做什么就可以了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:57657 发表于 2021-8-24 20:32 | 只看该作者
你要用逻辑取反,而不是按位取反,位变量用bit定义。
回复

使用道具 举报

板凳
ID:94031 发表于 2021-8-24 20:24 | 只看该作者
可以用 bit 定义位变量,比如 bit   Flag_M,Flag_F;
回复

使用道具 举报

沙发
ID:424598 发表于 2021-8-24 19:36 | 只看该作者
本帖最后由 ssk7793 于 2021-8-24 19:43 编辑

不明白你在说什么,为什么会占io口呢?取反变量用bit定义
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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