找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4795|回復(fù): 17
收起左側(cè)

MCU IO怎么樣運(yùn)用C語(yǔ)言結(jié)構(gòu)體?

[復(fù)制鏈接]
ID:934353 發(fā)表于 2021-7-23 14:37 | 顯示全部樓層 |閱讀模式
    很多MCU單片機(jī)IO口都需調(diào)用一個(gè)類似的子函數(shù),但是如果都用不同的子函數(shù)代碼又太長(zhǎng)了,有什么好的方法解決這個(gè)問題,隱約記得可以用結(jié)構(gòu)體或者宏參數(shù),但是沒有用過(guò),不知道怎么用,有沒有大佬指點(diǎn)一下,謝謝
回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2021-7-23 15:24 | 顯示全部樓層
有啊,結(jié)構(gòu)體內(nèi)成員可以是函數(shù),就是指針。
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-23 15:41 | 顯示全部樓層
黃youhui 發(fā)表于 2021-7-23 15:24
有啊,結(jié)構(gòu)體內(nèi)成員可以是函數(shù),就是指針。

可是io口的地址不知道呢怎么辦,比如說(shuō)P1^1這樣子,我該怎么用呢
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2021-7-23 17:19 | 顯示全部樓層
就象做乘法一樣,提取公因式。
將公共部門做成子程序,不同部分做成參數(shù)變量。
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-23 17:21 | 顯示全部樓層
yzwzfyz 發(fā)表于 2021-7-23 17:19
就象做乘法一樣,提取公因式。
將公共部門做成子程序,不同部分做成參數(shù)變量。

我知道大概意思,但是不知如何操作,感謝回答
回復(fù)

使用道具 舉報(bào)

ID:950257 發(fā)表于 2021-7-23 18:33 | 顯示全部樓層
開心就好hhhh 發(fā)表于 2021-7-23 15:41
可是io口的地址不知道呢怎么辦,比如說(shuō)P1^1這樣子,我該怎么用呢

地址都在reg51.h這個(gè)文件里有聲明
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-27 10:13 | 顯示全部樓層
gain 發(fā)表于 2021-7-23 18:33
地址都在reg51.h這個(gè)文件里有聲明

這個(gè)頭文件里有P1,P2等的地址,但是沒有看到P1^1之類的具體地址,感謝回答
回復(fù)

使用道具 舉報(bào)

ID:451718 發(fā)表于 2021-7-27 10:18 | 顯示全部樓層
看一下STM32的庫(kù)函數(shù)例程就清楚了。
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-7-27 15:33 | 顯示全部樓層
51中的位操作已經(jīng)做不能再簡(jiǎn)單了,不知樓主想如何操作。
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-27 15:52 | 顯示全部樓層
munuc_w 發(fā)表于 2021-7-27 15:33
51中的位操作已經(jīng)做不能再簡(jiǎn)單了,不知樓主想如何操作。

比如說(shuō)把這三個(gè)整合到一起,因?yàn)閿?shù)碼管的一些函數(shù)是一樣的,只是不一樣的io口驅(qū)動(dòng)不一樣的數(shù)碼管而已
0.png
回復(fù)

使用道具 舉報(bào)

ID:956553 發(fā)表于 2021-7-27 17:09 | 顯示全部樓層
看st的庫(kù)函數(shù)封裝API或者NXP的封裝
回復(fù)

使用道具 舉報(bào)

ID:190577 發(fā)表于 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;
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-7-28 08:50 | 顯示全部樓層
開心就好hhhh 發(fā)表于 2021-7-27 15:52
比如說(shuō)把這三個(gè)整合到一起,因?yàn)閿?shù)碼管的一些函數(shù)是一樣的,只是不一樣的io口驅(qū)動(dòng)不一樣的數(shù)碼管而已

選用具有片選信號(hào)的數(shù)碼管驅(qū)動(dòng)器,如TA6932,DIO和CLK共用,數(shù)據(jù)流向由片選信號(hào)控制。
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-28 11:01 | 顯示全部樓層
munuc_w 發(fā)表于 2021-7-28 08:50
選用具有片選信號(hào)的數(shù)碼管驅(qū)動(dòng)器,如TA6932,DIO和CLK共用,數(shù)據(jù)流向由片選信號(hào)控制。

我就是用了三個(gè)數(shù)碼管驅(qū)動(dòng)芯片,所以才希望將代碼寫的更簡(jiǎn)潔一點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-7-28 12:43 | 顯示全部樓層
開心就好hhhh 發(fā)表于 2021-7-28 11:01
我就是用了三個(gè)數(shù)碼管驅(qū)動(dòng)芯片,所以才希望將代碼寫的更簡(jiǎn)潔一點(diǎn)

我以前也遇到過(guò)你的情況,要寫好多函數(shù),內(nèi)容一樣,就是IO分配不同。后來(lái)整合到一個(gè)函數(shù)里,函數(shù)增加一個(gè)形參,由形參決定片選,用于區(qū)別不同的驅(qū)動(dòng)芯片。
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-28 13:06 | 顯示全部樓層
munuc_w 發(fā)表于 2021-7-28 12:43
我以前也遇到過(guò)你的情況,要寫好多函數(shù),內(nèi)容一樣,就是IO分配不同。后來(lái)整合到一個(gè)函數(shù)里,函數(shù)增加一個(gè) ...

是的是的,我就是想寫一個(gè)這樣的,但是沒有寫過(guò),就不知道該怎么寫,我想?yún)⒄?2的庫(kù)函數(shù)來(lái)著,但是感覺又不一樣,大佬能不能提點(diǎn)一下?謝謝
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-7-28 15:00 | 顯示全部樓層
開心就好hhhh 發(fā)表于 2021-7-28 13:06
是的是的,我就是想寫一個(gè)這樣的,但是沒有寫過(guò),就不知道該怎么寫,我想?yún)⒄?2的庫(kù)函數(shù)來(lái)著,但是感覺又 ...

很簡(jiǎn)單的函數(shù),在原函數(shù)里只是增加一個(gè)決定片選的形參,由這個(gè)參數(shù)決定片選信號(hào)即可,如:

xxx(xxx,xxx,xCS)
{
  if(xCS==1)
     cs1=0;
else if(xCS==2)
     cs2=0;
else if(xCS==3)
      cs3=0;
//下面就是原來(lái)的函數(shù),寫入地址,寫入數(shù)據(jù)
  。。。。

}
注意退出函數(shù)前各個(gè)使用的CS信號(hào)要拉高。
回復(fù)

使用道具 舉報(bào)

ID:934353 發(fā)表于 2021-7-28 17:24 | 顯示全部樓層
munuc_w 發(fā)表于 2021-7-28 15:00
很簡(jiǎn)單的函數(shù),在原函數(shù)里只是增加一個(gè)決定片選的形參,由這個(gè)參數(shù)決定片選信號(hào)即可,如:

xxx(xxx, ...

好的,好的,有思路了,非常感謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表