13
06月
2023
/**
* @file stm32_battery_measurement.c
* @author yourname
* @date 2020-07-17
*/
#include "stm32f10x.h" // 包含头文件
// 电池电量状态定义
#define BATTERY_LEVEL_0 0 // 电量低于20%
#define BATTERY_LEVEL_1 1 // 电量在20%-50%之间
#define BATTERY_LEVEL_2 2 // 电量在50%-80%之间
#define BATTERY_LEVEL_3 3 // 电量高于80%
/** * @brief 初始化ADC通道,用于测量电池的电压 * @param None * @retval None */ void ADC1 Init(void) { RCC->APB2ENR |= 1 << 9;//使能ADC时钟 GPIOA->CRL &= 0XFFFFF00F;//PA4模式设置为AIN ADC1->CR1 &= 0XF0FFFF;//工作模式设置为单通道单次转换 ADC1->CR2 |= 1<<20;//使能内部参考电压 ADON = 1;//打开ADC } /** *@brief 根据不同的电压水平显示不同的颜色 *@param voltage:当前测得的电压值 *@retval None */ void displayColor(uint16 voltage){ uint8 batteryLevel = getBatteryLevel(voltage); switch (batteryLevel){ case BATTERY LEVEL 0: displayScreenColor(RED); break; case BATTERY LEVEL 1: displayScreenColor(ORANGE); break; case BATTERY LEVEL 2: displayScreenColor(GREEN); break; case BATTERY LEVEL 3: displayScreenColor(BLUE); break; default:break ; } } /** *@brief 根据当前测得的电压判断当前的电量水平,返回相应数字代表不同水平 *@param voltage:当前测得的电压值 *@retval batteryLevel:返回该数字代表不同水平 */ uint8 getBatteryLevel (uint16 voltage){ uint8 batteryLevel = -1 ; if (voltage < 2000 ) { batteryLevel =BATTERY LEVEL 0 ;} else if (voltage > 2000 && voltage < 3000 ){ batteryLevel =BATTERY LEVEL 1 ;} else if (voltage > 3000 && voltage < 4000 ){ batteryLevel =BATTERY LEVEL 2 ;} else if (voltage > 4000 ){ batteryLevel =BATTERY LEVEL 3 ;} return battery Level; }
免责声明:本内容由金宣创作助手生成,可能存在逻辑不清、乱码等问题,点这里>>使用AI金宣助手高级版(Super),更聪明、更完整、无乱码!
以上内容除特别注明外均来源于网友提问、金宣助手回答,权益归原著者所有,本站仅作效果演示和欣赏之用;
本文标题: 嵌入式中stm32测量电池的电量程,不同电量用不同颜色在显示屏显示的代码
本文网址: https://www.nhwlfw.com/news-read-2514.html
直通道: 金宣助手
延伸阅读
- 如何应对全球范围内的恐怖主义和极端主义威胁?
- 驱动模块的代码注释
color module_6(
.clk (clk_0 ),
.rst_n (rst_n ),
.hys (lcd_hs ),
.vys (
- 如何进行推荐系统和个性化推荐?
- Go语言中如何实现集群管理?
- 提高创造力的10个方法,激发你的思维能力