蓝桥杯_嵌入式:ADC的基础配置实验(库函数)

目录

前言

 代码:

1.adc.h:

2.adc.c:

3.main.c:

总结



前言

ADC也被称为模拟数字转换,是我们学习单片机和蓝桥杯比赛中的一个重要部分,

本文章将展示ADC代码的基本配置和一些代码解析。

ADC实验包括了ADC中的基本配置和LCD的显示模块。


头文件:

蓝桥杯_嵌入式:ADC的基础配置实验(库函数)_第1张图片

 在ADC的配置过程中注意需要添加需要的头文件。


 代码:

1.adc.h:

#ifndef __ADC_H
#define __ADC_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"


void adc_Init(void);

#endif /* __LCD_H */

2.adc.c:

#include "adc.h"


void adc_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	ADC_InitTypeDef ADC_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);//使能ADC1通道时钟
	
	//GPIOB__GPIO_Pin_0
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN; //模拟输入引脚
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	ADC_DeInit(ADC1); //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
	
	ADC_InitStruct.ADC_ContinuousConvMode=DISABLE; //模数转换工作在单通道模式
	ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right; //ADC数据右对齐
	ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
	ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在独立模式
	ADC_InitStruct.ADC_NbrOfChannel=1;//顺序进行规则转换的ADC通道的数目
	ADC_InitStruct.ADC_ScanConvMode=DISABLE;//模数转换工作在单通道模式
	ADC_Init(ADC1,&ADC_InitStruct);
	
	ADC_Cmd(ADC1,ENABLE); //使能指定的ADC1
	
	ADC_ResetCalibration(ADC1);//使能复位校准  
	
	while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束
	
	ADC_StartCalibration(ADC1);//开启AD校准
	
	while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
	
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的软件转换启动功能
}

3.main.c:

#include "stm32f10x.h"
#include "lcd.h"
#include "led.h"
#include "key.h"
#include "adc.h"
#include "stdio.h"
u32 TimingDelay = 0;

void Delay_Ms(u32 nTime);

u16 adc_val=0;
u8 str[20];
//Main Body
int main(void)
{
	SysTick_Config(SystemCoreClock/1000);
  STM3210B_LCD_Init();
	adc_Init();
	LCD_Clear(Black);
	LCD_SetBackColor(Black);//2
	LCD_SetTextColor(White);//3
	LCD_DisplayStringLine(Line1,(unsigned char *)"       ADC             ");	
	

	while(1)
	{  
       /*不停地读取ADC1的转换结果,比赛中可以这么写,但是工程中通常使用中断或者DMA的方式*/
		adc_val=ADC_GetConversionValue(ADC1)*3.3/4096;  //获得·ADC1规则组的转换结果
		sprintf((char*)str,"adc = %d",adc_val);
		LCD_DisplayStringLine(Line3,str);

	}
}

//
void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

 如需进一步了解如何在LCD中显示则可到蓝桥杯_嵌入式:LCD的使用教程(库函数)_m0_53512119的博客-CSDN博客

总结

这里对蓝桥杯嵌入式的ADC的主要代码做了部分描述.

注意:LED与LCD的冲突是否解决

初学者一定要实际操作烧入代码检查目标实现程度

文章若出现什么问题,谢谢及时反馈。


点个赞在走吧!!!!

你可能感兴趣的:(蓝桥杯_嵌入式(库函数),蓝桥杯,单片机,stm32,经验分享,嵌入式硬件)