STC8H8K64U_16路ADC采集

图片

#include	"config.h"
#include	"STC8G_H_ADC.h"
#include	"STC8G_H_GPIO.h"
#include	"STC8G_H_Delay.h"
#include	"STC8G_H_UART.h"
#include	"STC8G_H_NVIC.h"
#include	"STC8G_H_Switch.h"

/*************	本地常量声明	**************/


/*************	本地变量声明	**************/


/*************	本地函数声明	**************/


/*************  外部函数和变量声明 *****************/


/******************* IO配置函数 *******************/
void	GPIO_config(void)
{
	//P0.0~P0.6 设置为高阻输入
	P0_MODE_IN_HIZ(GPIO_Pin_LOW | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6); 
	P1_MODE_IN_HIZ(GPIO_Pin_All);		          //P1.0~P1.7 设置为高阻输入
	P3_MODE_IO_PU(GPIO_Pin_6 | GPIO_Pin_7);	      //P3.6,P3.7 设置为准双向口
	//ADC 采集引脚必须配置高阻输入(IN_HIZ),不能推挽输出、不能上拉输入,否则会影响电压采样精度
}

/******************* AD配置函数 *******************/
void	ADC_config(void)
{
	ADC_InitTypeDef		ADC_InitStructure;		                //结构定义

	ADC_InitStructure.ADC_SMPduty   = 31;		                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
	ADC_InitStructure.ADC_CsSetup   = 0;		                //ADC 通道选择时间控制 0(默认),1
	ADC_InitStructure.ADC_CsHold    = 1;		                //ADC 通道选择保持时间控制 0,1(默认),2,3
	ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X16T;		    //设置 ADC 工作时钟频率	ADC_SPEED_2X1T~ADC_SPEED_2X16T
	ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;	    //ADC结果调整,	ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
	ADC_Inilize(&ADC_InitStructure);		                    //初始化
	ADC_PowerControl(ENABLE);				                    //ADC电源开关, ENABLE或DISABLE
	NVIC_ADC_Init(DISABLE,Priority_0);		                    //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}

/***************  串口初始化函数 *****************/
void	UART_config(void)
{
	COMx_InitDefine		COMx_InitStructure;					    //结构定义

	COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;		    //模式,   UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
	COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;			    //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2, 所以不用选择)
	COMx_InitStructure.UART_BaudRate  = 115200ul;			    //波特率,     110 ~ 115200
	COMx_InitStructure.UART_RxEnable  = ENABLE;				    //接收允许,   ENABLE或DISABLE
	UART_Configuration(UART1, &COMx_InitStructure);		        //初始化串口2 USART1,USART2,USART3,USART4
	NVIC_UART1_Init(ENABLE,Priority_1);		                    //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
	UART1_SW(UART1_SW_P36_P37);	                                //通道切换,选择P3.6, P3.7引脚通信
}

/**********************************************/
void main(void)
{
	u8	i;
	u16	j;

	EAXSFR();		     /* 扩展寄存器访问使能 */
	GPIO_config();
	UART_config();
	ADC_config();
	EA = 1;

	PrintString1("STC8 AD to UART Test Programme!\r\n");	//UART2发送一个字符串

	while (1)
	{

		for(i=0; i<16; i++)                      //i从0~15,一共16路ADC通道
		{
			delay_ms(250);                       //每采集一路,等待250ms,采样电容已经充分充放电

			Get_ADCResult(i);		             //参数0~15,查询方式做一次ADC, 丢弃一次,做高速连续采集(无延时)需打开注释
			j = Get_ADCResult(i);	             //参数0~15,查询方式做一次ADC, 返回值就是结果,  4096 为错误
			printf("AD%02bd=%04d ",i,j);	     //打印采集结果,AD00=xxxx AD01=xxxx ...
			if((i & 7) == 7)	printf("\r\n");	 //每打印8个通道后换行

		}
		PrintString1("\r\n");                    //16路全部采集完,再换行
	}
}


// 多路ADC查询采样,通过串口发送给上位机,波特率115200,N,8,1。
// 下载时, 选择时钟 22.1184MHz (可以在配置文件"config.h"中修改).

// ADC 是 12 位,返回数值范围:0~4095;读到4096代表通道错误
// 电压 = j * (3.3/4095)



posted @ 2026-09-09 17:05  Q&25  阅读(18)  评论(0)    收藏  举报