c-函数-表驱动法

驱动是一种编程模式(Scheme),从表里面查找信息而不使用逻辑语句(if 和case) 它的好处是消除代码里面到处出现的if、else、swith语句,让凌乱代码变得简明和清晰。

例如:需要一个可以返回每个月中天数的函数

使用if

int year_leap(int year)

if((year%4 == 0 && year%100 != 0)||year % 400 == 0)

}

int iGetMonthDays(int iMonth)

{

int iDays;

if(1 == iMonth) {iDays = 31;}

else if(2 == iMonth) {iDays = 28;}

else if(3 == iMonth) {iDays = 31;}

else if(4 == iMonth) {iDays = 30;}

else if(5 == iMonth) {iDays = 31;}

else if(6 == iMonth) {iDays = 30;}

else if(7 == iMonth) {iDays = 31;}

else if(8 == iMonth) {iDays = 31;}

else if(9 == iMonth) {iDays = 30;}

else if(10 == iMonth) {iDays = 31;}

else if(11 == iMonth) {iDays = 30;}

else if(12 == iMonth) {iDays = 31;}

return iDays;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
非常感谢您的提问!以下是一个简单的C语言AD9832驱动的示例代码,函数命名使用了驼峰命名: ```c #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stdbool.h> // AD9832寄存器地址 #define AD9832_REG_FREQ0 0x4000 #define AD9832_REG_FREQ1 0x8000 #define AD9832_REG_PHASE0 0xC000 #define AD9832_REG_PHASE1 0xE000 #define AD9832_REG_CONTROL 0x2000 // AD9832控制寄存器位定义 #define AD9832_CTRL_B28 13 #define AD9832_CTRL_HLB 12 #define AD9832_CTRL_FSELECT 11 #define AD9832_CTRL_PSELECT 10 #define AD9832_CTRL_RESET 8 #define AD9832_CTRL_SLEEP1 7 #define AD9832_CTRL_SLEEP12 6 #define AD9832_CTRL_OPBITEN 5 #define AD9832_CTRL_DIV2 3 #define AD9832_CTRL_MODE 1 // AD9832控制寄存器值定义 #define AD9832_CTRL_RESET_VAL (1 << AD9832_CTRL_RESET) #define AD9832_CTRL_B28_VAL (1 << AD9832_CTRL_B28) #define AD9832_CTRL_HLB_VAL (1 << AD9832_CTRL_HLB) #define AD9832_CTRL_FSELECT_VAL (1 << AD9832_CTRL_FSELECT) #define AD9832_CTRL_PSELECT_VAL (1 << AD9832_CTRL_PSELECT) #define AD9832_CTRL_OPBITEN_VAL (1 << AD9832_CTRL_OPBITEN) #define AD9832_CTRL_DIV2_VAL (1 << AD9832_CTRL_DIV2) #define AD9832_CTRL_MODE_VAL (1 << AD9832_CTRL_MODE) // AD9832时钟频率 #define AD9832_CLK_FREQ 25000000 // AD9832频率寄存器值计算宏定义 #define AD9832_FREQ_REG_VAL(freq) ((uint32_t)((freq) * (1 << 28) / AD9832_CLK_FREQ)) #define AD9832_PHASE_REG_VAL(phase) ((uint16_t)((phase) * (1 << 12) / 360.0)) // AD9832驱动结构体定义 typedef struct { uint32_t freq; // 频率 uint16_t phase; // 相位 bool enable; // 使能 } ad9832_t; // AD9832初始化函数 void ad9832_init(void) { // 初始化SPI接口 // ... // 复位AD9832 uint16_t ctrl_reg = AD9832_CTRL_RESET_VAL; // 写入控制寄存器 // ... } // AD9832设置频率函数 void ad9832_set_freq(ad9832_t *ad, uint32_t freq) { ad->freq = freq; uint32_t freq_reg_val = AD9832_FREQ_REG_VAL(freq); // 写入频率寄存器0 // ... // 写入频率寄存器1 // ... } // AD9832设置相位函数 void ad9832_set_phase(ad9832_t *ad, uint16_t phase) { ad->phase = phase; uint16_t phase_reg_val = AD9832_PHASE_REG_VAL(phase); // 写入相位寄存器0 // ... // 写入相位寄存器1 // ... } // AD9832使能函数 void ad9832_enable(ad9832_t *ad, bool enable) { ad->enable = enable; uint16_t ctrl_reg = 0; if (enable) { ctrl_reg |= AD9832_CTRL_B28_VAL; ctrl_reg |= AD9832_CTRL_FSELECT_VAL; ctrl_reg |= AD9832_CTRL_PSELECT_VAL; ctrl_reg |= AD9832_CTRL_OPBITEN_VAL; ctrl_reg |= AD9832_CTRL_MODE_VAL; } // 写入控制寄存器 // ... } ``` 希望这个示例代码能够帮助您完成AD9832的驱动开发!如果您有任何问题或需要进一步的帮助,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小趴菜学习记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值