蓝桥杯嵌入式(G431)备赛笔记——MCP4017

目录

首先需要移植官方提供的I2C,参考这篇文章:

MCP驱动函数:

MCU4017的检测代码:

主函数:


首先需要移植官方提供的I2C,参考这篇文章:

蓝桥杯嵌入式(G431)备赛笔记——I2C

MCP驱动函数:


// MCP_write 函数用于向 MCP4017 数字电位器写入数据

void MCP_write(u8 dat)
{
    I2CStart(); // 发送起始信号
    I2CSendByte(0x5E); // 发送设备地址(写模式)
    I2CWaitAck(); // 等待应答信号

    I2CSendByte(dat); // 发送要写入的数据
    I2CWaitAck(); // 等待应答信号
    I2CStop(); // 发送停止信号
}

// MCP_read 函数用于从 MCP4017 数字电位器读取数据

u8 MCP_read()
{
    u8 dat;
    
    I2CStart(); // 发送起始信号
    I2CSendByte(0x5F); // 发送设备地址(读模式)
    I2CWaitAck(); // 等待应答信号
    dat = I2CReceiveByte(); // 读取从设备返回的数据
    I2CSendNotAck(); // 发送非应答信号
    I2CStop(); // 发送停止信号
    
    return(dat); // 返回读取的数据
}

打开ADC1的对应通道 chanl11对应滑变的ADC,chanle5对应MCP4017的adc通道

将转换通道数Number Of Conversion 从1变为2,产生2个ADC通道,并配置不同通道的检测周期(设为最大),和检测顺序,rank1先与rank2

MCU4017的检测代码:

// ADC_proc 函数用于执行ADC(模数转换器)的数据采集操作

void ADC_proc()
{
    //rank1: 开始ADC转换,采集R38的电压值
    HAL_ADC_Start(&hadc1); // 启动ADC1通道的转换
    volt_r38 = HAL_ADC_GetValue(&hadc1) / 4096.0f * 3.3f; // 获取ADC1转换结果并将其转换为电压值

    //rank2: 开始ADC转换,采集MCP的电压值
    HAL_ADC_Start(&hadc1); // 再次启动ADC1通道的转换,这里可能是因为需要对两个通道进行连续的数据采集
    volt_mcp = HAL_ADC_GetValue(&hadc1) / 4096.0f * 3.3f; // 获取ADC1转换结果并将其转换为电压值
}

主函数:

int main(void)
{
    /* USER CODE BEGIN 1 */
    
    /* USER CODE END 1 */
    
    /* MCU Configuration--------------------------------------------------------*/
    
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init(); // 初始化HAL库
    
    /* USER CODE BEGIN Init */
    
    /* USER CODE END Init */
    
    /* Configure the system clock */
    SystemClock_Config(); // 配置系统时钟
    
    /* USER CODE BEGIN SysInit */
    
    /* USER CODE END SysInit */
    
    /* Initialize all configured peripherals */
    MX_GPIO_Init(); // 初始化GPIO外设
    MX_ADC1_Init(); // 初始化ADC1外设
//  MX_ADC2_Init(); // 初始化ADC2外设,该行被注释掉了
    
    /* USER CODE BEGIN 2 */
    
    LCD_Init(); // LCD初始化
    
    I2CInit(); // I2C总线初始化
    
    start_value = EEP_read(0x30); // 从EEPROM读取数据
    EEP_write(0x30, ++start_value); // 向EEPROM写入数据
    
    //MCP4917
    MCP_write(0x00); // 向MCP4917写入数据
    mcp_value = MCP_read(); // 从MCP4917读取数据
    
    /* USER CODE END 2 */
    
    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    
    LED_Control(0x00); // 控制LED,初始化状态为关闭
    
    LCD_Clear(Blue); // 清屏,设置背景颜色为蓝色
    LCD_SetBackColor(Blue); // 设置文本背景颜色为蓝色
    LCD_SetTextColor(White); // 设置文本颜色为白色
    
    LCD_proc(); // LCD处理函数
    
    while (1)
    {
        /* USER CODE END WHILE */
        
        /* USER CODE BEGIN 3 */
//    LED_proc(); // LED处理函数,该行被注释掉了
//    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 0)
//    {
//      LED_Control(0x01);
//    }
//    if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0)
//    {
//      LED_Control(0x02);
//    }
//    KEY_proc(); // 按键处理函数,该行被注释掉了
//    HAL_ADC_Start(&hadc2); // 启动ADC2转换,该行被注释掉了
//    adc2_value = HAL_ADC_GetValue(&hadc2); // 从ADC2读取转换值,该行被注释掉了
//    volt_r37 = adc2_value /4096.0f*3.3; // 计算R37电压值,该行被注释掉了
        ADC_proc(); // ADC处理函数,获取ADC转换值并计算电压
        LCD_proc(); // LCD处理函数,更新LCD显示
    }
    
    /* USER CODE END 3 */
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 04:38:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 04:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 04:38:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 04:38:03       20 阅读

热门阅读

  1. shell编程-2

    2024-04-22 04:38:03       12 阅读
  2. 富格林:致用查明暗箱黑幕技巧

    2024-04-22 04:38:03       16 阅读
  3. listpack

    listpack

    2024-04-22 04:38:03      12 阅读
  4. 用pigeon kotlin swift写一个自己的插件

    2024-04-22 04:38:03       15 阅读
  5. 【Redis(2)】Redis的持久化方式RDB和AOF配置

    2024-04-22 04:38:03       13 阅读
  6. tcp网络编程(基础)

    2024-04-22 04:38:03       15 阅读
  7. app创建

    app创建

    2024-04-22 04:38:03      15 阅读
  8. Unity 计时任务管理器TimeHandle

    2024-04-22 04:38:03       14 阅读
  9. HashMap

    HashMap

    2024-04-22 04:38:03      15 阅读
  10. 【随手笔记】一个关于typedef定义的数组调用问题

    2024-04-22 04:38:03       18 阅读
  11. docker安装Elasticsearch

    2024-04-22 04:38:03       14 阅读
  12. SparkSQL允许左联接的数据量大于左表数据量?

    2024-04-22 04:38:03       14 阅读
  13. Gradle:安装、配置及基础使用指南

    2024-04-22 04:38:03       13 阅读