📄 adc0832.h
字号:
/*******************************************************************/
// CAI
// 08.03.08
/*******************************************************************/
#ifndef __ADC0832_H__
#define __ADC0832_H__
sbit ADC_CS =P2^4;
sbit ADC_CLK=P2^5;
sbit ADC_DO =P2^6;
sbit ADC_DI =P2^7;
/*******************************************************************/
unsigned int vollage(bit bi);
/*******************************************************************/
void Delays(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++); //延时,脉冲一位持续的时间
}
/*******************************************************************/
unsigned char ReadADC(bit dat) //把模拟电压值转换成8位二进制数并返回,dat为通道选择。
{
unsigned char i,ch=0;
ADC_CS=0;
ADC_DO=0;//片选,DO为高阻态
Delays(10);
ADC_CLK=0;
Delays(2);
ADC_DI=1;
ADC_CLK=1;
Delays(2);//第一个脉冲,起始位
ADC_CLK=0;
Delays(2);
ADC_DI=1;
ADC_CLK=1;
Delays(2);//第二个脉冲,DI=1表示双通道单极性输入
ADC_CLK=0;
Delays(2);
ADC_DI=dat; /*******************************/
ADC_CLK=1;
Delays(2);//第三个脉冲,DI=1表示选择通道1(CH2)
ADC_DI=0;
ADC_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备
ADC_CLK=1;
Delays(2);
ADC_CLK=0;
Delays(2);//经实验,这里加一个脉冲AD便能正确读出数据,
//不加的话读出的数据少一位(最低位d0读不出)
for(i=0;i<8;i++)
{
ADC_CLK=1;
Delays(2);
ADC_CLK=0;
Delays(2);
ch=(ch<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数
}
ADC_CS=1;//取消片选,一个转换周期结束
return(ch);//把转换结果返回
}
/*******************************************************************/
unsigned int vollage(bit bi)
{
unsigned char vol;
unsigned int dat;
vol=ReadADC(bi);
dat=(int)(100*vol)/51; //51是由5/255的倒数得来的,5是5V,255是8位AD。
return(dat);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -