[技术问答] 如何将8个不同IO口的电平状态转换成一个8位数据

[复制链接]
3154|9
 楼主| wenyong200 发表于 2013-12-25 18:15 | 显示全部楼层 |阅读模式
/* 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 | 显示全部楼层
  1. #define                KEY_ROW_1                P63
  2. #define                KEY_ROW_2                P61
  3. #define                KEY_ROW_3                P36
  4. #define                KEY_ROW_4                P06
  5. #define                KEY_ROW_5                P04
  6. #define                KEY_LINE_1                P45
  7. #define                KEY_LINE_2                P27
  8. #define                KEY_LINE_3                P25
  9. #define         KEY_PORT_IN                (uint32_t)((KEY_LINE_3) | (KEY_LINE_2) << 1 | (KEY_LINE_1) << 2 | (KEY_ROW_5) << 3 |\
  10.            (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
可以用结构的位域和联合,直接操作就可以了

不知道看哪本书上说来,用位域虽然会节省空间,但会降低效率,不知道是不是这样
huangxz 发表于 2013-12-25 23:41 | 显示全部楼层
niuyaliang 发表于 2013-12-25 22:48
不知道看哪本书上说来,用位域虽然会节省空间,但会降低效率,不知道是不是这样 ...

这个不一定,跟cpu的架构有关,我觉的如果cpu支持位操作,那效率应该是很高的
gaoyang9992006 发表于 2013-12-26 21:14 | 显示全部楼层
呆板书生 发表于 2013-12-25 22:14
可以用结构的位域和联合,直接操作就可以了

嗯,你说的方法很对,很多头文件都是这么定义的。
 楼主| wenyong200 发表于 2013-12-26 21:44 | 显示全部楼层
谢谢各位了,今天早上去公司突发灵感也是用的2楼的方法搞定了,小弟不才搞搞单片机不久,以后还望坛子里的前辈多指教。。。
 楼主| 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
呆板书生 发表于 2013-12-28 09:02 | 显示全部楼层
niuyaliang 发表于 2013-12-25 22:48
不知道看哪本书上说来,用位域虽然会节省空间,但会降低效率,不知道是不是这样 ...

效率问题留给编译器设计者去解决,他们是很有办法的
ie谁是谁的谁 发表于 2016-3-24 16:34 | 显示全部楼层

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

本版积分规则

34

主题

190

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部