STC8H8K蓝牙智能巡线小车——4.ADC电压检测

电路分析
  • 串联分压,并联分流,所以P01的电压并不是这条线的总电压,应乘3
编程思路
  • 需要用到ADC(模拟信号转数字信号),初始化GPIO_P0引脚和ADC配置
  • 电压计算公式:调用Get_ADCResult可得出结果,公式为Vol=result*2.5/4096
代码示例

Battery.h

#ifndef	__BATTERY_H
#define	__BATTERY_H
#include "GPIO.h"

#define VOL_PIN P01

void VOL_GPIO_init();
void VOL_ADC_init();
void Get_Voltage(float *voltage);

#endif

Battery.c

#include "Battery.h"
#include "ADC.h"
#include "NVIC.h"

	
void VOL_GPIO_init(void) {
	GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义
	GPIO_InitStructure.Pin  = GPIO_Pin_1;		//指定要初始化的IO,
	GPIO_InitStructure.Mode = GPIO_HighZ;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P0, &GPIO_InitStructure);//初始化
}
void VOL_ADC_init(){
	ADC_InitTypeDef init;
	init.ADC_SMPduty=31;		//ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
	init.ADC_Speed=ADC_SPEED_2X1T;			//设置 ADC 工作时钟频率	ADC_SPEED_2X1T~ADC_SPEED_2X16T
	init.ADC_AdjResult=ADC_RIGHT_JUSTIFIED;	//ADC结果调整,	ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
	init.ADC_CsSetup=0;		//ADC 通道选择时间控制 0(默认),1
	init.ADC_CsHold=1;			//ADC 通道选择保持时间控制 0,1(默认),2,3
	
	ADC_Inilize(&init);
	ADC_PowerControl(ENABLE); //ADC电源开关:ENABLE,DISABLE
	NVIC_ADC_Init(DISABLE, Priority_1);

}
void Get_Voltage(float * voltage){
	u16 result;
	result = Get_ADCResult(ADC_CH9);
	* voltage=(result*2.5/4096)*3;
}

main.c

#include "RTX51TNY.h"
#include "GPIO.h"
#include "NVIC.h"
#include "UART.h"
#include "Switch.h"
#include "LED.h"
#include "Key.h"
#include "Battery.h"


#define TASK_MAIN 0
#define TASK_LED 1
#define TASK_KEY 2
#define TASK_VOLTAGE 3


void task_voltage() _task_ TASK_VOLTAGE{
	float vol;
	while(1){
		Get_Voltage(&vol);
		printf("vol %.2f",vol);
		os_wait2(K_TMO, 200);
	}

}

void task_main() _task_ TASK_MAIN{
	EA=1;
	//LED_init();
	UART_config();
	VOL_GPIO_init();
	VOL_ADC_init();
	
	// os_create_task(TASK_LED);
	//os_create_task(TASK_KEY);
	os_create_task(TASK_VOLTAGE);

	os_delete_task(0);
}
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值