标题: MCU IO怎么样运用C语言结构体? [打印本页]

作者: 开心就好hhhh    时间: 2021-7-23 14:37
标题: MCU IO怎么样运用C语言结构体?
    很多MCU单片机IO口都需调用一个类似的子函数,但是如果都用不同的子函数代码又太长了,有什么好的方法解决这个问题,隐约记得可以用结构体或者宏参数,但是没有用过,不知道怎么用,有没有大佬指点一下,谢谢

作者: 黄youhui    时间: 2021-7-23 15:24
有啊,结构体内成员可以是函数,就是指针。
作者: 开心就好hhhh    时间: 2021-7-23 15:41
黄youhui 发表于 2021-7-23 15:24
有啊,结构体内成员可以是函数,就是指针。

可是io口的地址不知道呢怎么办,比如说P1^1这样子,我该怎么用呢
作者: yzwzfyz    时间: 2021-7-23 17:19
就象做乘法一样,提取公因式。
将公共部门做成子程序,不同部分做成参数变量。

作者: 开心就好hhhh    时间: 2021-7-23 17:21
yzwzfyz 发表于 2021-7-23 17:19
就象做乘法一样,提取公因式。
将公共部门做成子程序,不同部分做成参数变量。

我知道大概意思,但是不知如何操作,感谢回答
作者: gain    时间: 2021-7-23 18:33
开心就好hhhh 发表于 2021-7-23 15:41
可是io口的地址不知道呢怎么办,比如说P1^1这样子,我该怎么用呢

地址都在reg51.h这个文件里有声明
作者: 开心就好hhhh    时间: 2021-7-27 10:13
gain 发表于 2021-7-23 18:33
地址都在reg51.h这个文件里有声明

这个头文件里有P1,P2等的地址,但是没有看到P1^1之类的具体地址,感谢回答

作者: robinsonlin    时间: 2021-7-27 10:18
看一下STM32的库函数例程就清楚了。
作者: munuc_w    时间: 2021-7-27 15:33
51中的位操作已经做不能再简单了,不知楼主想如何操作。
作者: 开心就好hhhh    时间: 2021-7-27 15:52
munuc_w 发表于 2021-7-27 15:33
51中的位操作已经做不能再简单了,不知楼主想如何操作。

比如说把这三个整合到一起,因为数码管的一些函数是一样的,只是不一样的io口驱动不一样的数码管而已

0.png (5.75 KB, 下载次数: 60)

0.png

作者: 效果也很好    时间: 2021-7-27 17:09
看st的库函数封装API或者NXP的封装
作者: bbxyliyang    时间: 2021-7-28 07:23
typedef struct
{
  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.
                                      This parameter can be any value of @ref GPIO_pins_define */

  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.
                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */

  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.
                                      This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;

作者: munuc_w    时间: 2021-7-28 08:50
开心就好hhhh 发表于 2021-7-27 15:52
比如说把这三个整合到一起,因为数码管的一些函数是一样的,只是不一样的io口驱动不一样的数码管而已

选用具有片选信号的数码管驱动器,如TA6932,DIO和CLK共用,数据流向由片选信号控制。
作者: 开心就好hhhh    时间: 2021-7-28 11:01
munuc_w 发表于 2021-7-28 08:50
选用具有片选信号的数码管驱动器,如TA6932,DIO和CLK共用,数据流向由片选信号控制。

我就是用了三个数码管驱动芯片,所以才希望将代码写的更简洁一点
作者: munuc_w    时间: 2021-7-28 12:43
开心就好hhhh 发表于 2021-7-28 11:01
我就是用了三个数码管驱动芯片,所以才希望将代码写的更简洁一点

我以前也遇到过你的情况,要写好多函数,内容一样,就是IO分配不同。后来整合到一个函数里,函数增加一个形参,由形参决定片选,用于区别不同的驱动芯片。
作者: 开心就好hhhh    时间: 2021-7-28 13:06
munuc_w 发表于 2021-7-28 12:43
我以前也遇到过你的情况,要写好多函数,内容一样,就是IO分配不同。后来整合到一个函数里,函数增加一个 ...

是的是的,我就是想写一个这样的,但是没有写过,就不知道该怎么写,我想参照32的库函数来着,但是感觉又不一样,大佬能不能提点一下?谢谢
作者: munuc_w    时间: 2021-7-28 15:00
开心就好hhhh 发表于 2021-7-28 13:06
是的是的,我就是想写一个这样的,但是没有写过,就不知道该怎么写,我想参照32的库函数来着,但是感觉又 ...

很简单的函数,在原函数里只是增加一个决定片选的形参,由这个参数决定片选信号即可,如:

xxx(xxx,xxx,xCS)
{
  if(xCS==1)
     cs1=0;
else if(xCS==2)
     cs2=0;
else if(xCS==3)
      cs3=0;
//下面就是原来的函数,写入地址,写入数据
  。。。。

}
注意退出函数前各个使用的CS信号要拉高。

作者: 开心就好hhhh    时间: 2021-7-28 17:24
munuc_w 发表于 2021-7-28 15:00
很简单的函数,在原函数里只是增加一个决定片选的形参,由这个参数决定片选信号即可,如:

xxx(xxx, ...

好的,好的,有思路了,非常感谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1