📄 adconvert.c
字号:
#include "STC12C5410AD.H"
#include "adconvert.h"
uchar code display_AD_channel_ID[2] = {0x00,0x01};
void Delay1T(uint numb) //晶振=11059200,机器周期=1.085069444us,"加"的机器周期=1
{
int n=0;
for(;n<numb;n++);
}
/********************************************************************
* 名称:
* 功能: A/D转换
* 输入: channel为通道号 0:0通道;1:1通道(本程序中仅使用2个通道,即P1.0和P1.1,其余5个可根据需要自行添加)
* 返回值: AD_Result_Temp 即AD装换完成后得到的10位数据,用一个uint保存
********************************************************************/
uint startADC(uchar channel)
{
uint AD_Result_Temp = 0;
//P1 = 0xff; //将P1口置高,为A/D转换作准备
ADC_CONTR = ADC_CONTR|0x80; //1000 0000打开A/D转换电源
P1M0 = 0x03; //0000 0011用于A/D转换的P1.0--P1.1先设为开漏。断开内部上拉电阻
P1M1 = 0x03;
Delay1T(20); //延时20
ADC_CONTR = ADC_CONTR&0xE0; //1110 0000 清ADC_FLAG,ADC_START位和低3位
ADC_CONTR = ADC_CONTR|(display_AD_channel_ID[channel]&0x07); //设置当前通道号
Delay1T(1); //延时使输入电压达到稳定
ADC_DATA = 0; //清A/D转换结果寄存器高8位
ADC_LOW2 = 0; //清A/D转换结果寄存器低2位
/*启动AD转换*/
ADC_CONTR = ADC_CONTR|0x08; //0000 1000 ADC_START = 1,启动转换
do { ; } //等待A/D转换结束
while((ADC_CONTR & 0x10)==0); //0001 0000 ADC_FLAG为0时表示转换正在进行
/*ADC_FLAG=1时,执行到此*/
ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,同时ADC_START置零,停止A/D转换
/*AD转换结束*/
AD_Result_Temp = ((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);//保存AD转换的结果
return (AD_Result_Temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -