基于AC78013FDLA单片机CAN口使用pwm控制占空比实现扬声器三级不同声音的代码
时间: 2023-11-27 17:49:34 浏览: 35
以下是基于AC78013FDLA单片机CAN口使用PWM控制占空比实现扬声器三级不同声音的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include "ac780x_adc.h"
#include "ac780x_can.h"
#include "ac780x_gpio.h"
#include "ac780x_pwm.h"
#define CAN_ID 0x123
#define CAN_DATA_LEN 8
#define PWM_FREQ 20000
#define PWM_DUTY_1 20
#define PWM_DUTY_2 50
#define PWM_DUTY_3 80
void can_rx_callback(uint16_t id, uint8_t len, uint8_t *data)
{
if (id == CAN_ID && len == CAN_DATA_LEN) {
uint8_t level = data[0];
uint8_t duty;
switch (level) {
case 1:
duty = PWM_DUTY_1;
break;
case 2:
duty = PWM_DUTY_2;
break;
case 3:
duty = PWM_DUTY_3;
break;
default:
return;
}
pwm_set_duty(PWM_CH0, duty);
}
}
int main()
{
can_init(CAN_SPEED_500K, CAN_MODE_NORMAL);
can_set_rx_callback(can_rx_callback);
pwm_init(PWM_CH0, PWM_FREQ);
pwm_set_duty(PWM_CH0, 0);
while (1) {
can_poll();
}
return 0;
}
```
在该代码中,我们设置了CAN ID为0x123,并且定义了三个不同的PWM占空比,分别对应三个不同的声音级别。当接收到CAN消息时,我们检查其数据长度是否为8字节,并且检查数据的第一个字节,判断声音级别。然后根据声音级别设置相应的PWM占空比。
在主循环中,我们调用了can_poll()函数,用于轮询CAN消息。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)