AD stc12c5410ad 模数转换 单片机

#include"include.h"

void main()
{
InitADC(); //AD初始化函数
InitUART(); //串口初始化函数
while(1)
{
ShowResult(0); //显示8通道的转换结果
// ShowResult(1);
// ShowResult(2);
// ShowResult(3);
// ShowResult(4);
// ShowResult(5);
// ShowResult(6);
// ShowResult(7);
}
}
//==============================================================================
//|文件名称|adc.h
//|--------|--------------------------------------------------------------------
//|描 述|8路10位AD转换 0通道采集 延时函数自己写就可以了
//|--------|--------------------------------------------------------------------
//|调用文件|stc12c5410ad.h
//|--------|--------------------------------------------------------------------
//|作 者|鞠明泽
//|--------|--------------------------------------------------------------------
//|时 间|2011.7.27
//|--------|--------------------------------------------------------------------
//|E-mail |a582531983@https://www.360docs.net/doc/9d14274291.html,
//|--------|--------------------------------------------------------------------
//|开发环境|KEIL3.0
//==============================================================================
#include"include.h"
void InitADC()
{
P1M0=0xff; //P1 开漏模式 AD转换需要配置的IO口
P1M1=0xff;
ADC_DATA=0; //清除线上数据
ADC_CONTR=ADC_POWER|ADC_SPEEDLL; //AD供电 转换采用最低速
delay_ms(5); //等待模拟电源稳定
}
void InitUART(void) //19200bps@12MHz
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xEC; //设定定时初值
TH1 = 0xEC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1

}

void ShowResult(uchar ch) //将ADC转换结果发送到串口
{
uint result; //定义一个整形变量来保存转换后的10位2进制数
result=GetADCResult(ch)*4+ADC_LOW2;
//---------------------SendData常规发送串口方法----------------------------
// SendData(ch); 发送所选择的频道号 十六进制显示
// SendData(GetADCResult(ch)); 发送高八位转换结果
// SendData(ADC_LOW2); 发送低二位转换结果
//-------------------------------------------------------------------------
//---------------------printf发送方法----前置必须置1-----------------------------
TI=1;
printf("电压是:%f\r\n",(float)result*5/1024);
//-------------------------------------------------------------------------
}
void SendData(uchar date) //Send one byte data to PC
{
SBUF=date;
while(!TI);
TI=0;
}
unsigned char GetADCResult(uchar ch) //返回高8位AD转换结果 字符型 //unsigned int GetADC

Result (uchar ch)
{ //{ int result;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START; // ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
delay_ms(10); //查询前需要延时 // delay_ms(10);
while(!(ADC_CONTR&ADC_FLAG)); //转换结束标志位FLAG硬件置1跳出循环 // while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG; //软件清除标志位置0 // ADC_CONTR&=~ADC_FLAG;
return ADC_DATA; //返回高8位转换结果 // result=ADC_DATA*4+ADC_LOW2;
} // return result;
//}
//==============================================================================
//|文件名称|adc.h
//|--------|--------------------------------------------------------------------
//|描 述|8路10位AD转换
//|--------|--------------------------------------------------------------------
//|调用文件|stc12c5410ad.h
//|--------|--------------------------------------------------------------------
//|作 者|鞠明泽
//|--------|--------------------------------------------------------------------
//|时 间|2011.7.27
//|--------|--------------------------------------------------------------------
//|E-mail |a582531983@https://www.360docs.net/doc/9d14274291.html,
//|--------|--------------------------------------------------------------------
//|开发环境|KEIL3.0
//==============================================================================
#ifndef _ADC_H
#define _ADC_H
#define uchar unsigned char
#define uint unsigned int
//=========与AD控制有关的寄存器=================================================
//ADC_CONTR ADC控制寄存器
//ADC_DATA ADC转换结果寄存器高八位
//ADC_LOW2 ADC转换结果寄存器低二位
//AUXR 辅助寄存器
//IE 中断使能
#define ADC_POWER 0x80
#define ADC_FLAG 0x10 //AD转换结束标志位 转换完成置1 应由软件清0
#define ADC_START 0x08 //AD转换启动控制位
#define ADC_SPEEDLL 0x00 //低低 AD四种转换速率
#define ADC_SPEEDL 0x20 //低
#define ADC_SPEEDH 0x40 //高
#define ADC_SPEEDHH 0x60 //高高
//=========与AD中断有关的寄存器=================================================
#define EADCI_ON 0x10 //单独允许AD转换中断 不可位寻址 辅助寄存器
#define EADCI_OFF 0x00 //单独禁止AD转换中断

#define EADC_SPI_ON 0x20 //允许AD转换中断和SPI中断
#define EADC_SPI_OFF 0x00 //禁止AD转换中断和SPI中断
//AD初始化函数
void InitUART();
//串口初始化函数
void InitADC();
//Send one byte data to PC
void SendData(uchar date);
//获得ADC转换结果
unsigned char GetADCResult(uchar ch);
//显示结果
void ShowResult(uchar ch);
#endif
#ifndef _INCLUDE_H
#define _INCLUDE_H

#include"stc12c5410ad.h"
#include"adc.h"
#include"delay.h"
#include"stdio.h" //printf 头文件

#endif

相关文档
最新文档