|
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Cs0832 =P2^0; //ADC0832 片選
sbit Clk0832 =P2^2; //ADC0832 時(shí)鐘
sbit Di0832 =P2^1; //ADC0832 數(shù)據(jù)輸入 /*因?yàn)閱纹瑱C(jī)的管腳是雙向的,且ADC0832的數(shù)據(jù)輸入輸出不同時(shí)進(jìn)行,
sbit Do0832 =P2^1; //ADC0832 數(shù)據(jù)輸出 /*為節(jié)省單片機(jī)引腳,簡(jiǎn)化電路所以輸入輸出連接在同一個(gè)引腳上
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 出口:數(shù)值。
{
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++) //從高到低取一次數(shù)
{
Clk0832=1; //下降沿有效
Clk0832=0;
if(Do0832) Dat1|=0x80>>i;
}
for(i=0;i<8;i++) //從低到高取一次數(shù)
{
if(Do0832) Dat2|=0x01<<i;
Clk0832=1; //下降沿有效
Clk0832=0;
}
Cs0832=1;
Di0832=1;
Clk0832=1; //數(shù)據(jù)讀取完成,釋放所有數(shù)據(jù)線
if(Dat1==Dat2)
return Dat1; //校驗(yàn)兩次數(shù)相等,輸出
}
void main()
{ dy=ADC0832(0);
dy=(5*dy/256);
while(1)
{if(dy<yushe_dy){
D2=0;
}
else{
D2=1;
}
}
} |
|