#define HC165_CE_0 PBout(0) #define HC165_PL_0 PAout(11) #define HC165_CP_0 PAout(12) #define HC165_Q7_0 PBin(1) #define HC165_CE_1 PBout(8) #define HC165_PL_1 PBout(6) #define HC165_CP_1 PBout(7) #define HC165_Q7_1 PBin(9) uint8_t readVoltageGroup0() { uint8_t i = 0; uint8_t temp = 0; HC165_PL_0 = 0; HC165_PL_0 = 1; if(HC165_Q7_0 == 1) temp |= 0x01; for(i = 0; i < 7; i ++) { temp = temp << 1; HC165_CP_0 = 0; delayUs(1); HC165_CP_0 = 1; if(HC165_Q7_0 == 1) temp |= 0x01; } return temp; } uint8_t readVoltageGroup1(void) { uint8_t i = 0; uint8_t temp = 0; HC165_PL_1 = 0; HC165_PL_1 = 1; if(HC165_Q7_1 == 1) temp |= 0x01; for(i = 0; i < 7; i ++) { temp = temp << 1; HC165_CP_1 = 0; delayUs(1); HC165_CP_1 = 1; if(HC165_Q7_1 == 1) temp |= 0x01; } return temp; } 如何简化这部分代码与定义
时间: 2024-04-26 19:22:31 浏览: 67
可以将HC165_CE、HC165_PL、HC165_CP、HC165_Q7定义为一个结构体或者宏定义数组,然后用readVoltage函数来代替readVoltageGroup0和readVoltageGroup1函数,并将需要传入的参数作为结构体或宏定义数组的索引,实现代码复用。同时,也可以将重复的代码提取出来,减少代码冗余。
相关问题
#define HC165_CE_0 PBout(0) #define HC165_PL_0 PAout(11) #define HC165_CP_0 PAout(12) #define HC165_Q7_0 PBin(1) #define HC165_CE_1 PBout(8) #define HC165_PL_1 PBout(6) #define HC165_CP_1 PBout(7) #define HC165_Q7_1 PBin(9) 如何做成宏定义数组
可以将HC165_CE、HC165_PL、HC165_CP、HC165_Q7定义为宏定义数组,如下所示:
```
#define HC165_CE {PBout(0), PBout(8)}
#define HC165_PL {PAout(11), PBout(6)}
#define HC165_CP {PAout(12), PBout(7)}
#define HC165_Q7 {PBin(1), PBin(9)}
```
然后在readVoltage函数中通过传入参数来确定使用哪一组HC165引脚,如下所示:
```
uint8_t readVoltage(uint8_t group) {
uint8_t i = 0;
uint8_t temp = 0;
HC165_PL[group] = 0;
HC165_PL[group] = 1;
if(HC165_Q7[group] == 1)
temp |= 0x01;
for(i = 0; i < 7; i ++)
{
temp = temp << 1;
HC165_CP[group] = 0;
delayUs(1);
HC165_CP[group] = 1;
if(HC165_Q7[group] == 1)
temp |= 0x01;
}
return temp;
}
```
这样可以大大简化代码,提高代码的可读性和可维护性。同时,如果需要添加更多的HC165引脚组,只需要在宏定义数组中添加对应的引脚即可。
#define HC165_PL_0 PAout(11) #define HC165_CP_0 PAout(12) #define HC165_Q7_0 PBin(1) #define HC165_PL_1 PBout(6) #define HC165_CP_1 PBout(7) #define HC165_Q7_1 PBin(9) #define HC165_PL_2 PEout(2) #define HC165_CP_2 PEout(3) #define HC165_Q7_2 PEin(5) #define HC165_PL_3 PEout(6) #define HC165_CP_3 PEout(7) #define HC165_Q7_3 PEin(9) #define HC165_PL_4 PEout(10) #define HC165_CP_4 PEout(11) #define HC165_Q7_4 PEin(13) 如何简化这些定义呢?
可以使用宏定义和循环来简化这些定义,比如可以定义如下的宏:
```c
#define HC165_PIN_CONFIG(port, pl, cp, q7) \
#define HC165_PL_##port pl \
#define HC165_CP_##port cp \
#define HC165_Q7_##port q7
#define HC165_PIN_CONFIG_ALL \
HC165_PIN_CONFIG(0, PAout(11), PAout(12), PBin(1)), \
HC165_PIN_CONFIG(1, PBout(6), PBout(7), PBin(9)), \
HC165_PIN_CONFIG(2, PEout(2), PEout(3), PEin(5)), \
HC165_PIN_CONFIG(3, PEout(6), PEout(7), PEin(9)), \
HC165_PIN_CONFIG(4, PEout(10), PEout(11), PEin(13))
```
然后可以使用循环来定义这些宏:
```c
#define HC165_PIN_CONFIG_LOOP(port) \
HC165_PL_##port; \
HC165_CP_##port; \
HC165_Q7_##port;
#define HC165_PIN_CONFIG_DEFINE(port) \
HC165_PIN_CONFIG(port, HC165_PIN_CONFIG_LOOP(port))
#define HC165_PIN_CONFIG_DEFINE_ALL \
HC165_PIN_CONFIG_DEFINE(0) \
HC165_PIN_CONFIG_DEFINE(1) \
HC165_PIN_CONFIG_DEFINE(2) \
HC165_PIN_CONFIG_DEFINE(3) \
HC165_PIN_CONFIG_DEFINE(4)
```
这样就可以用 `HC165_PIN_CONFIG_DEFINE_ALL` 来简化定义了,代码就会变得更加简洁和易于维护。
阅读全文