#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Cs0832 =P2^0; //ADC0832 片选
sbit Clk0832 =P2^2; //ADC0832 时钟
sbit Di0832 =P2^1; //ADC0832 数据输入 /*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,
sbit Do0832 =P2^1; //ADC0832 数据输出 /*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上
sbit D1 = P0^0;
sbit D2 = P0^1;
sbit D3 = P0^2;
sbit D4 = P0^3;
uint yushe_dy=3;
uint dy;
void delay(uint z)
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar ADC0832(uchar Channel) //入口:通道0或1 出口:数值。
{
uchar i,Dat1=0,Dat2=0;
Clk0832=0;
Di0832=1;
Cs0832=0;
Clk0832=1;
Clk0832=0; //第一脉冲,开始位
Di0832=1;
Clk0832=1;
Clk0832=0; //第二脉冲,模式选择
Di0832=Channel;//通道选择,0或1
Clk0832=1;
Clk0832=0; //第三脉冲,通道选择
Di0832=1; //释放输入线
for(i=0;i<8;i++) //从高到低取一次数
{
Clk0832=1; //下降沿有效
Clk0832=0;
if(Do0832) Dat1|=0x80>>i;
}
for(i=0;i<8;i++) //从低到高取一次数
{
if(Do0832) Dat2|=0x01<<i;
Clk0832=1; //下降沿有效
Clk0832=0;
}
Cs0832=1;
Di0832=1;
Clk0832=1; //数据读取完成,释放所有数据线
if(Dat1==Dat2)
return Dat1; //校验两次数相等,输出
}
void main()
{ dy=ADC0832(0);
dy=(5*dy/256);
while(1)
{if(dy<yushe_dy){
D2=0;
}
else{
D2=1;
}
}
} |