text1

来自「ADC0832 和 LCD1602 的测试程序」· 代码 · 共 109 行

TXT
109
字号
				   #include<reg52.h>

 

sbit ADC_CS =P3^3;

sbit ADC_CLK=P3^2;

sbit ADC_DO =P3^7;

sbit ADC_DI =P3^6;

/*******************************************************************/

 

void Delay(unsigned char x)

{ 

 unsigned char i; 

 for(i=0;i<x;i++); //延时,脉冲一位持续的时间

}

unsigned char ReadADC(void) //把模拟电压值转换成8位二进制数并返回

{ 

 unsigned char i,ch;

 ch=0;

 ADC_CS=0;

 ADC_DO=0;//片选,DO为高阻态

 for(i=0;i<10;i++)

    {;}

 ADC_CLK=0;

 Delay(2);

 ADC_DI=1; 

 ADC_CLK=1; 

 Delay(2); //第一个脉冲,起始位 

 ADC_CLK=0; 

 Delay(2); 

 ADC_DI=1; 

 ADC_CLK=1;

 Delay(2); //第二个脉冲,DI=1表示双通道单极性输入

 ADC_CLK=0;

 Delay(2);

 ADC_DI=1; 

 ADC_CLK=1;

 Delay(2); //第三个脉冲,DI=1表示选择通道1(CH2)

 ADC_DI=0; 

 ADC_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备

 ADC_CLK=1;

 Delay(2);

 ADC_CLK=0; 

 Delay(2);//经实验,这里加一个脉冲AD便能正确读出数据,

           //不加的话读出的数据少一位(最低位d0读不出)

for (i=0; i<8; i++)

    { 

     ADC_CLK=1; 

        Delay(2); 

 ADC_CLK=0; 

 Delay(2);

     ch=(ch<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数

   }

   ADC_CS=1;//取消片选,一个转换周期结束

 return(ch);//把转换结果返回

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?