打印
[技术问答]

如何将8个不同IO口的电平状态转换成一个8位数据

[复制链接]
2619|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
/* 8路输入宏定义 */
#define INPUT1     P01
#define INPUT2     P02
#define INPUT3     P03
#define INPUT4     P05
#define INPUT5     P06
#define INPUT6     P07
#define INPUT7     P10
#define INPUT8     P11
8个IO作为输入想转成一个8位数据,根据不同的状态去处理。

谢谢!
沙发
niuyaliang| | 2013-12-25 19:55 | 只看该作者
#define                KEY_ROW_1                P63
#define                KEY_ROW_2                P61
#define                KEY_ROW_3                P36
#define                KEY_ROW_4                P06
#define                KEY_ROW_5                P04
#define                KEY_LINE_1                P45
#define                KEY_LINE_2                P27
#define                KEY_LINE_3                P25
#define         KEY_PORT_IN                (uint32_t)((KEY_LINE_3) | (KEY_LINE_2) << 1 | (KEY_LINE_1) << 2 | (KEY_ROW_5) << 3 |\
           (KEY_ROW_4) << 4 | (KEY_ROW_3) << 5 | (KEY_ROW_2) << 6 | (KEY_ROW_1) << 7 )


使用特权

评论回复
板凳
呆板书生| | 2013-12-25 22:14 | 只看该作者
可以用结构的位域和联合,直接操作就可以了

使用特权

评论回复
地板
niuyaliang| | 2013-12-25 22:48 | 只看该作者
呆板书生 发表于 2013-12-25 22:14
可以用结构的位域和联合,直接操作就可以了

不知道看哪本书上说来,用位域虽然会节省空间,但会降低效率,不知道是不是这样

使用特权

评论回复
5
huangxz| | 2013-12-25 23:41 | 只看该作者
niuyaliang 发表于 2013-12-25 22:48
不知道看哪本书上说来,用位域虽然会节省空间,但会降低效率,不知道是不是这样 ...

这个不一定,跟cpu的架构有关,我觉的如果cpu支持位操作,那效率应该是很高的

使用特权

评论回复
6
gaoyang9992006| | 2013-12-26 21:14 | 只看该作者
呆板书生 发表于 2013-12-25 22:14
可以用结构的位域和联合,直接操作就可以了

嗯,你说的方法很对,很多头文件都是这么定义的。

使用特权

评论回复
7
wenyong200|  楼主 | 2013-12-26 21:44 | 只看该作者
谢谢各位了,今天早上去公司突发灵感也是用的2楼的方法搞定了,小弟不才搞搞单片机不久,以后还望坛子里的前辈多指教。。。

使用特权

评论回复
8
wenyong200|  楼主 | 2013-12-26 21:55 | 只看该作者
file:///C:\Users\wenwen\AppData\Roaming\Tencent\Users\308670097\QQ\WinTemp\RichOle\MG_6XO$PNR(X1P@4%0E)_CD.jpgfile:///C:\Users\wenwen\AppData\Roaming\Tencent\Users\308670097\QQ\WinTemp\RichOle\MG_6XO$PNR(X1P@4%0E)_CD.jpg为什么结贴给不了分啊  郁闷!file:///C:\Users\wenwen\AppData\Roaming\Tencent\Users\308670097\QQ\WinTemp\RichOle\MG_6XO$PNR(X1P@4%0E)_CD.jpg

QQ图片20131226215317.jpg (10.79 KB )

QQ图片20131226215317.jpg

使用特权

评论回复
9
呆板书生| | 2013-12-28 09:02 | 只看该作者
niuyaliang 发表于 2013-12-25 22:48
不知道看哪本书上说来,用位域虽然会节省空间,但会降低效率,不知道是不是这样 ...

效率问题留给编译器设计者去解决,他们是很有办法的

使用特权

评论回复
10
ie谁是谁的谁| | 2016-3-24 16:34 | 只看该作者

你好,我看到你的这个回复,想问一下如果我定义了一个uchar com,将com的八位数据送入这八个不同的IO口怎么操作呢?因为宏定义KEY_PORT_IN没有数据类型,直接KEY_PORT_IN=com是不行的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

190

帖子

1

粉丝