GPIO灵活控制

[复制链接]
3400|46
 楼主| 清枫城主 发表于 2015-10-25 21:03 | 显示全部楼层 |阅读模式
淘宝上买了一个硬汉科技的开发板,里面有LCD1602的例程。发现他控制并行数据有点复杂,在IO口上的选取要取巧。我现在的问题是:能否把任意的几个GPIO拿过来,正常类似51单片机的P0口一样来操作,例如要给数据,直接PO=data;一直不知道怎么把GPIO灵活的利用起来,请大神们指导下,如何操作。
 楼主| 清枫城主 发表于 2015-10-25 21:07 | 显示全部楼层
如图一所画出来的,数据IO刚好是在A组的连续8个。如果我没办法凑到连续的8个GPIO做为数据接口呢,那我要从A、B、C三组中凑出8个IO作为数据接口。我要如何操作呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 清枫城主 发表于 2015-10-25 21:12 | 显示全部楼层
就像51操作一样,直接就是P0=com;假设我要GPIO13、14、15和GPIO32、33、34和GPIO65、66这8个GPIO来做LCD1602的8位并行数据接口,改如何操作,把他们整个类似51那样P0=com;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 清枫城主 发表于 2015-10-25 21:15 | 显示全部楼层
有大神可以帮忙吗?有什么不懂的可以提问下。
zhangmangui 发表于 2015-10-25 22:50 | 显示全部楼层
.all就相当于你单片机中的P0啊    .bit就相当于你的P0.0
要整体操作   肯定就是.all = .all  & 0x*****     或者.all = .all | 0x****
xujihu 发表于 2015-10-26 01:22 | 显示全部楼层
要在同一个端口上才能直接P0操作吧,如果是任意IO就用个函数,根据需要在函数里面操作相应IO; lcd_data(uint8_t SegCmd)
{
   uint16_t  IO_Status;
   uint16_t  segcmd_tmp;

   segcmd_tmp=SegCmd;
   IO_Status=(segcmd_tmp>>7)&0x01;
  if(IO_Status==1)
   P1.1=1;
   else
   P1.1=0;

   segcmd_tmp=SegCmd;
   IO_Status=(segcmd_tmp>>6)&0x01;
    if(IO_Status==1)
     P2.5=1;
    else
     P2.5=0;

...........................
}

评论

答案在此  发表于 2015-10-26 09:16
justtest111 发表于 2015-10-26 08:30 | 显示全部楼层
针对每个IO单独 位与 赋值就可以了啊。
shenmu2012 发表于 2015-10-26 19:44 | 显示全部楼层
相关寄存器的控制很重要的,注意配置的。
haolaishi 发表于 2015-10-26 22:36 | 显示全部楼层
可以的。可以用软件实现。把几个并为一个虚拟的IO组。
haolaishi 发表于 2015-10-26 22:37 | 显示全部楼层
如果有类似M3的位带的功能的话,也可以实现的。
 楼主| 清枫城主 发表于 2015-10-27 07:53 | 显示全部楼层
haolaishi 发表于 2015-10-26 22:36
可以的。可以用软件实现。把几个并为一个虚拟的IO组。

如何操作成虚拟的IO组呢?
 楼主| 清枫城主 发表于 2015-10-27 07:55 | 显示全部楼层
shenmu2012 发表于 2015-10-26 19:44
相关寄存器的控制很重要的,注意配置的。

嗯。这个知道,所有才在这个地方纠结,没办法测地弄懂。那个GPIO的底层结果是结构体嵌套结构体,结构体嵌套共用体,共用体嵌套结构体等,晕了。。。。
 楼主| 清枫城主 发表于 2015-10-27 07:56 | 显示全部楼层
justtest111 发表于 2015-10-26 08:30
针对每个IO单独 位与 赋值就可以了啊。

这样很麻烦啊,药快速操作,类似总体8为一起操作速度快很多,也比较容易理解
 楼主| 清枫城主 发表于 2015-10-27 22:33 | 显示全部楼层
xujihu 发表于 2015-10-26 01:22
要在同一个端口上才能直接P0操作吧,如果是任意IO就用个函数,根据需要在函数里面操作相应IO; lcd_data(ui ...

我说的是32位的28335的GPIO操作。51的那个我懂啊,现在是如何把32位任意的GPIO组合成类似的P0口来操作
xujihu 发表于 2015-10-28 21:57 | 显示全部楼层
清枫城主 发表于 2015-10-27 22:33
我说的是32位的28335的GPIO操作。51的那个我懂啊,现在是如何把32位任意的GPIO组合成类似的P0口来操作 ...

用我那个函数不就可以了吗,入口参数改成32位,p0.1改成你用的芯片的置1或0操作。
稳稳の幸福 发表于 2015-10-29 16:03 | 显示全部楼层
就像51操作一样,直接就是P0=com
李香兰 发表于 2015-10-30 20:43 | 显示全部楼层
清枫城主 发表于 2015-10-25 21:15
有大神可以帮忙吗?有什么不懂的可以提问下。

帮你顶一下吧,好不
309030 发表于 2015-10-31 10:16 | 显示全部楼层
虚拟的IO组怎么做呢
lwsn 发表于 2015-10-31 10:57 | 显示全部楼层
.all相当于P0  
.bit相当于P0.0
裁定心生 发表于 2015-10-31 17:02 | 显示全部楼层
可以,C++就有类似的操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

70

帖子

1

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