ad0832.c

来自「此程序是一个关于A/D转化芯片0832的程序」· C语言 代码 · 共 120 行

C
120
字号
#include "AT89X52.H"
#define uchar unsigned char
#define uint  unsigned int

#define ADCLK P3_4     //时钟接口
#define ADDI P3_5     //数据输入接口
#define ADDO P3_5     //数据输出接口
#define ADCS P3_0     //使能接口

void Delay35U();
void Delay2U();



uchar AD(uchar n)
{
uchar temp=0;
uchar temp1=0;
uchar temp2=0;
uchar i=0;
 switch(n)
	{
	case 0:n=1;break;
	case 1:n=3;break;
	case 2:n=9;break;
	case 3:n=11;break;
	case 4:n=5;break;
	case 5:n=7;break;
	case 6:n=13;break;
	case 7:n=1;break;
	case 8:n=15;break;
	}
ADCS=1;
Delay2U();
ADCLK=0;

ADDI=1;            /*在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号*/
ADCS=0;            //使能ADC0838
Delay2U();

ADCLK=1;
Delay2U();
ADCLK=0;
Delay2U();

for(i=0;i<4;i++)             
{
ADDI=n&1;
n=n>>1;
Delay2U();
ADCLK=1;
Delay2U();
ADCLK=0;
Delay2U();
}

ADDI=1;

Delay35U();


//***************接收********************
for(i=0; i < 8; i++)
{
ADCLK=1;
Delay2U();
ADCLK=0;
Delay2U();
temp1=temp1 << 1;
if(ADDO)temp1|= 0x01;              
else temp1|= 0x00;
}

/*for(i=0; i < 8; i++)
{
if(ADDO)temp=0x01;
else temp=0x00;
temp=temp << i;
temp2 |= temp;
ADCLK=1;
Delay2U();
ADCLK=0;
Delay2U();
}
if(temp1 == temp2);
*/
ADDI=1;
ADCS=1;
return temp1;
}


void Delay2U()
{
uchar x=4;
while(x--);
}

void Delay35U()
{
uchar x=40;
while(x--);
}


void main()
{uint yscs;
int ys;

while(1){P0=AD(1);



    for(ys =200;ys>0;ys--)
    {  for(yscs=0;yscs<124;yscs++) 
       {;}
    }
     } 
}

⌨️ 快捷键说明

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