查看: 2842|回复: 15

[提问] 不连续IO口怎么输出7led显示 [复制链接]

haosheng (离线)
积分
1123
帖子
7
发表于 2009-11-25 14:37:08 |显示全部楼层
关键词: 输出
大家好:   小弟初学KEIL,看到很多流水灯例子都是用连续的IO,比方:P0,P1等,   由于PCB布线的原因,不连续的IO(比方说:7LED用到的段为P1.5,P1.6,P3.7,P1.7,P3.4,P1.4,P1.3)通过什么方法(也就是像操作P1口那样)输出7LED数码管显示呢?谢谢
uushuo (离线)
积分
2
帖子
2
发表于 2009-11-25 22:27:41 |显示全部楼层
不知道这样可以不?用“P4(x);”代替“P4 = (x);”
#include <regx52.h>

#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 (离线)
积分
1123
帖子
7
发表于 2009-11-27 20:53:37 |显示全部楼层
楼上的好像不行的。
alpha321 (离线)
积分
4631
帖子
209
发表于 2010-5-19 01:01:14 |显示全部楼层
感谢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 (离线)
积分
4631
帖子
209
发表于 2010-5-19 01:02:14 |显示全部楼层
1楼高手, 有空多交流!
oksmn (离线)
积分
6
帖子
10
发表于 2010-5-26 01:48:55 |显示全部楼层
哈哈。真的要感谢uushuo,这个问题也困扰我很久了 ,
alpha321 (离线)
积分
4631
帖子
209
发表于 2010-5-29 10:04:05 |显示全部楼层
要是写成类似这样会更好:
#define P4((x))         P1_2 = 0x01&(x);\
.....

这里的x可以是一个常数表达式, 如 0x01<<2.
lyong2002 (离线)
积分
3293
帖子
57
发表于 2010-5-30 14:08:30 |显示全部楼层
初学者,看不明白.用(X)是表示什么意思
kobeast (离线)
积分
18
帖子
6
发表于 2010-6-1 23:16:05 |显示全部楼层
1楼高手 ,好久不用51了
daw85 (离线)
积分
8
帖子
39
发表于 2010-6-7 23:30:20 |显示全部楼层
还真没想到这个问题呢
eastljd (离线)
积分
1466
帖子
334
发表于 2011-6-12 11:23:55 |显示全部楼层
按位赋值
eastljd (离线)
积分
1466
帖子
334
发表于 2011-6-12 11:24:14 |显示全部楼层
按位赋值
MCU_NEWER (离线)
积分
6836
帖子
107
发表于 2011-7-4 08:27:09 |显示全部楼层
自己做个枚举列表,犹如数组一样,这样看着也方便。
500 字节以内
不支持自定义 Discuz! 代码
积分
5112
帖子
3
发表于 2011-7-4 09:06:48 |显示全部楼层
学习
thunderccx (离线)
积分
1768
帖子
12
发表于 2011-7-11 16:05:22 |显示全部楼层
简单的数据处理,没什么不同
hyfcl (离线)
积分
58
帖子
7
发表于 2011-7-14 18:28:58 |显示全部楼层
先查出欲显示信息的字段码,再按位赋值
您需要登录后才可以发表评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备11013910号 | 京公网安备11010502021702
回顶部