不连续IO口怎么输出7led显示

2009年11月25日 14:37    发布者:haosheng
大家好:   小弟初学KEIL,看到很多流水灯例子都是用连续的IO,比方:P0,P1等,   由于PCB布线的原因,不连续的IO(比方说:7LED用到的段为P1.5,P1.6,P3.7,P1.7,P3.4,P1.4,P1.3)通过什么方法(也就是像操作P1口那样)输出7LED数码管显示呢?谢谢

网友评论

uushuo 2009年11月25日
不知道这样可以不?用“P4(x);”代替“P4 = (x);”
#include

#define P4(x)         P1_2 = 0x01&x;\
                                P1_5 = 0X02&x;\
                                P1_6 = 0x04&x;\
                                P3_7 = 0x08&x;\
                                P1_7 = 0x10&x;\
                                P3_4 = 0x20&x;\
                                P1_4 = 0x40&x;\
                                P1_3 = 0x80&x
haosheng 2009年11月27日
楼上的好像不行的。
alpha321 2010年05月19日
感谢1楼! 你的代码是可以的, 列表为证:
  12          void main(void)
  13          {
  14   1          P4(5);
  15   1         
  16   1          while(1);
  17   1      }
C51 COMPILER V8.02   TES1                                                                  05/19/2010 00:59:30 PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION main (BEGIN)
                                           ; SOURCE LINE # 12
                                           ; SOURCE LINE # 13
                                           ; SOURCE LINE # 14
0000 D292              SETB    P1_2
0002 C295              CLR     P1_5
0004 D296              SETB    P1_6
0006 C2B7              CLR     P3_7
0008 C297              CLR     P1_7
000A C2B4              CLR     P3_4
000C C294              CLR     P1_4
000E C293              CLR     P1_3
0010         ?C0001:
alpha321 2010年05月19日
1楼高手, 有空多交流!
oksmn 2010年05月26日
哈哈。真的要感谢uushuo,这个问题也困扰我很久了 ,
alpha321 2010年05月29日
要是写成类似这样会更好:
#define P4((x))         P1_2 = 0x01&(x);\
.....

这里的x可以是一个常数表达式, 如 0x01<<2.
lyong2002 2010年05月30日
初学者,看不明白.用(X)是表示什么意思
kobeast 2010年06月01日
1楼高手 ,好久不用51了
daw85 2010年06月07日
还真没想到这个问题呢
eastljd 2011年06月12日
按位赋值
eastljd 2011年06月12日
按位赋值
MCU_NEWER 2011年07月04日
自己做个枚举列表,犹如数组一样,这样看着也方便。
michelle_qi1234 2011年07月04日
学习
thunderccx 2011年07月11日
简单的数据处理,没什么不同
hyfcl 2011年07月14日
先查出欲显示信息的字段码,再按位赋值