打印

GPIO灵活控制

[复制链接]
2660|46
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
淘宝上买了一个硬汉科技的开发板,里面有LCD1602的例程。发现他控制并行数据有点复杂,在IO口上的选取要取巧。我现在的问题是:能否把任意的几个GPIO拿过来,正常类似51单片机的P0口一样来操作,例如要给数据,直接PO=data;一直不知道怎么把GPIO灵活的利用起来,请大神们指导下,如何操作。

相关帖子

沙发
清枫城主|  楼主 | 2015-10-25 21:07 | 只看该作者
如图一所画出来的,数据IO刚好是在A组的连续8个。如果我没办法凑到连续的8个GPIO做为数据接口呢,那我要从A、B、C三组中凑出8个IO作为数据接口。我要如何操作呢?

1.png (44.88 KB )

1.png

2.png (14.84 KB )

2.png

使用特权

评论回复
板凳
清枫城主|  楼主 | 2015-10-25 21:12 | 只看该作者
就像51操作一样,直接就是P0=com;假设我要GPIO13、14、15和GPIO32、33、34和GPIO65、66这8个GPIO来做LCD1602的8位并行数据接口,改如何操作,把他们整个类似51那样P0=com;

3.png (61.16 KB )

3.png

使用特权

评论回复
地板
清枫城主|  楼主 | 2015-10-25 21:15 | 只看该作者
有大神可以帮忙吗?有什么不懂的可以提问下。

使用特权

评论回复
5
zhangmangui| | 2015-10-25 22:50 | 只看该作者
.all就相当于你单片机中的P0啊    .bit就相当于你的P0.0
要整体操作   肯定就是.all = .all  & 0x*****     或者.all = .all | 0x****

使用特权

评论回复
6
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;

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

使用特权

评论回复
评论
gmm2015 2015-10-26 09:16 回复TA
答案在此 
7
justtest111| | 2015-10-26 08:30 | 只看该作者
针对每个IO单独 位与 赋值就可以了啊。

使用特权

评论回复
8
shenmu2012| | 2015-10-26 19:44 | 只看该作者
相关寄存器的控制很重要的,注意配置的。

使用特权

评论回复
9
haolaishi| | 2015-10-26 22:36 | 只看该作者
可以的。可以用软件实现。把几个并为一个虚拟的IO组。

使用特权

评论回复
10
haolaishi| | 2015-10-26 22:37 | 只看该作者
如果有类似M3的位带的功能的话,也可以实现的。

使用特权

评论回复
11
清枫城主|  楼主 | 2015-10-27 07:53 | 只看该作者
haolaishi 发表于 2015-10-26 22:36
可以的。可以用软件实现。把几个并为一个虚拟的IO组。

如何操作成虚拟的IO组呢?

使用特权

评论回复
12
清枫城主|  楼主 | 2015-10-27 07:55 | 只看该作者
shenmu2012 发表于 2015-10-26 19:44
相关寄存器的控制很重要的,注意配置的。

嗯。这个知道,所有才在这个地方纠结,没办法测地弄懂。那个GPIO的底层结果是结构体嵌套结构体,结构体嵌套共用体,共用体嵌套结构体等,晕了。。。。

使用特权

评论回复
13
清枫城主|  楼主 | 2015-10-27 07:56 | 只看该作者
justtest111 发表于 2015-10-26 08:30
针对每个IO单独 位与 赋值就可以了啊。

这样很麻烦啊,药快速操作,类似总体8为一起操作速度快很多,也比较容易理解

使用特权

评论回复
14
清枫城主|  楼主 | 2015-10-27 22:33 | 只看该作者
xujihu 发表于 2015-10-26 01:22
要在同一个端口上才能直接P0操作吧,如果是任意IO就用个函数,根据需要在函数里面操作相应IO; lcd_data(ui ...

我说的是32位的28335的GPIO操作。51的那个我懂啊,现在是如何把32位任意的GPIO组合成类似的P0口来操作

使用特权

评论回复
15
xujihu| | 2015-10-28 21:57 | 只看该作者
清枫城主 发表于 2015-10-27 22:33
我说的是32位的28335的GPIO操作。51的那个我懂啊,现在是如何把32位任意的GPIO组合成类似的P0口来操作 ...

用我那个函数不就可以了吗,入口参数改成32位,p0.1改成你用的芯片的置1或0操作。

使用特权

评论回复
16
稳稳の幸福| | 2015-10-29 16:03 | 只看该作者
就像51操作一样,直接就是P0=com

使用特权

评论回复
17
李香兰| | 2015-10-30 20:43 | 只看该作者
清枫城主 发表于 2015-10-25 21:15
有大神可以帮忙吗?有什么不懂的可以提问下。

帮你顶一下吧,好不

使用特权

评论回复
18
309030| | 2015-10-31 10:16 | 只看该作者
虚拟的IO组怎么做呢

使用特权

评论回复
19
lwsn| | 2015-10-31 10:57 | 只看该作者
.all相当于P0  
.bit相当于P0.0

使用特权

评论回复
20
裁定心生| | 2015-10-31 17:02 | 只看该作者
可以,C++就有类似的操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

70

帖子

1

粉丝