欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5733|回復: 17
收起左側

MCU IO怎么樣運用C語言結構體?

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

使用道具 舉報

ID:592807 發表于 2021-7-23 15:24 | 顯示全部樓層
有啊,結構體內成員可以是函數,就是指針。
回復

使用道具 舉報

ID:934353 發表于 2021-7-23 15:41 | 顯示全部樓層
黃youhui 發表于 2021-7-23 15:24
有啊,結構體內成員可以是函數,就是指針。

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

地址都在reg51.h這個文件里有聲明
回復

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

ID:752974 發表于 2021-7-27 15:33 | 顯示全部樓層
51中的位操作已經做不能再簡單了,不知樓主想如何操作。
回復

使用道具 舉報

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

比如說把這三個整合到一起,因為數碼管的一些函數是一樣的,只是不一樣的io口驅動不一樣的數碼管而已
0.png
回復

使用道具 舉報

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

使用道具 舉報

ID:190577 發表于 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;
回復

使用道具 舉報

ID:752974 發表于 2021-7-28 08:50 | 顯示全部樓層
開心就好hhhh 發表于 2021-7-27 15:52
比如說把這三個整合到一起,因為數碼管的一些函數是一樣的,只是不一樣的io口驅動不一樣的數碼管而已

選用具有片選信號的數碼管驅動器,如TA6932,DIO和CLK共用,數據流向由片選信號控制。
回復

使用道具 舉報

ID:934353 發表于 2021-7-28 11:01 | 顯示全部樓層
munuc_w 發表于 2021-7-28 08:50
選用具有片選信號的數碼管驅動器,如TA6932,DIO和CLK共用,數據流向由片選信號控制。

我就是用了三個數碼管驅動芯片,所以才希望將代碼寫的更簡潔一點
回復

使用道具 舉報

ID:752974 發表于 2021-7-28 12:43 | 顯示全部樓層
開心就好hhhh 發表于 2021-7-28 11:01
我就是用了三個數碼管驅動芯片,所以才希望將代碼寫的更簡潔一點

我以前也遇到過你的情況,要寫好多函數,內容一樣,就是IO分配不同。后來整合到一個函數里,函數增加一個形參,由形參決定片選,用于區別不同的驅動芯片。
回復

使用道具 舉報

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

是的是的,我就是想寫一個這樣的,但是沒有寫過,就不知道該怎么寫,我想參照32的庫函數來著,但是感覺又不一樣,大佬能不能提點一下?謝謝
回復

使用道具 舉報

ID:752974 發表于 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信號要拉高。
回復

使用道具 舉報

ID:934353 發表于 2021-7-28 17:24 | 顯示全部樓層
munuc_w 發表于 2021-7-28 15:00
很簡單的函數,在原函數里只是增加一個決定片選的形參,由這個參數決定片選信號即可,如:

xxx(xxx, ...

好的,好的,有思路了,非常感謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表