51单片机 类似数组调用的方法控制一组IO口 for循环语句控制多个IO口 30

51单片机类似数组调用的方法控制一组IO口for循环语句控制多个IO口如何才能使用for循环语句控制多个IO;达到类似数组的效果,比如就像这样:intnum[4]={1,... 51单片机 类似数组调用的方法控制一组IO口 for循环语句控制多个IO口

如何才能使用for循环语句控制多个IO;达到类似数组的效果,比如就像这样:
int num[4]={1,0,1,1}
for(i=0;i++;i<4)
{
IO[i]=num[i];

}
做完后让四个IO分别为高、低、高、高 电平。
其中IO[0]、IO[1]、IO[2]、IO[3] 分别表示一个IO口
例如:IO[0]代表P2^0、IO[1]代表P2^1、IO[2]代表P2^2、IO[3]代表P2^3。

求高人指教!!!
如果谁能写一小段可执行的代码,那悬赏就归谁了。
展开
 我来答
做而论道
高能答主

2014-08-11 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
很简单的。
用序号0~7,可以对一个 8 位的 IO 口,随意操作。

iunsigned char num[8]={1, 2, 4, 8, 16, 32, 64, 128};

P2 |= num[3]; //P2.3 = 1

P2 &= ~num[5]; //P2.5 = 0

P2 ^= num[7]; //P2.7 取非

编写循环程序,也可。
ATF144X
2014-08-11 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4643万
展开全部
标准端口位操作,读-操作-写的方式。

int num[4]={1,0,1,1}
char tmp
for(i=0;i++;i<4)
{
tmp=P1;
tmp&=~(1<<i);
tmp|=num[i]<<i;
P1=tmp;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuandinghai0
2014-08-11 · TA获得超过108个赞
知道答主
回答量:76
采纳率:0%
帮助的人:27.5万
展开全部
你可以这样写P2=num[i],你把数组都定义成十六进制,就OK了,比如你定义数组num[4]={0xfe,0xfd,0xfb,0xf7}
for(i=0;i++;i<4)
{
P2=num[i];

}这样输出就分别为i=0,代表P2^0=0,i=1,代表P2^1=0,i=2,代表P2^2=0,以此内推
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小兆86
推荐于2018-03-15 · TA获得超过802个赞
知道小有建树答主
回答量:990
采纳率:25%
帮助的人:869万
展开全部
很庆幸,在51里面按位操作的寄存器每一位都有个内存地址。比如P2口的端口寄存器地址是0xA0。其中每一位的地址依次为0xA0、0xA1、0xA2...所以,只要将按位操作的地址指向0xA0就可以,这个可以使用指针。
bool (*IO)[4] = P2;
int num[4]={1,0,1,1};

for(i=0;i++;i<4)
{
IO[i]=num[i]; // 这里编译器既知道是位操作,同时也知道位地址。
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2014-08-11 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38384
国家科技进步奖

向TA提问 私信TA
展开全部
可以实现,得这样处理。
unsigned char IO[4];
sbit IO[0]=P2^0;
sbit IO[1]=P2^1;
sbit IO[2]=P2^2;
sbit IO[3]=P2^3;
追问

追答
嗯,KEIL看来是不行,语法不符。其实有其他编译器可以进行位操作的,比如瑞萨的编译器就可以通过结构和联合的组合来实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式