用的ADC0832 八位,0-5V,用proteus仿真 显示0000 或者 -.-.-.-.
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit CS =P2^0;
sbit DI =P2^3;
sbit DO =P2^3;
sbit CLK =P2^2;
sbit S_1 = P3^0;
sbit S_2 = P3^1;
sbit S_3 = P3^2;
sbit S_4 = P3^3;
unsigned char led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//unsigned char led[10]={0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//unsigned char yd[]={0x40,0x79,0x024,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//
// ===========????????=================
void delay_ms(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<123;j++); //???1ms
}
/*=============??ADC0832????=============*/
/*=============?????????=================*/
unsigned int Adc0832(unsigned char channel) //AD???????????
{
uchar i=0;
uchar j;
uint dat=0; //????????????
uchar ndat=0; //????????????
//****************?????????**************
if(channel==0)channel=2; //10B???SGL/DIF=1??ODD/EVEN=0
if(channel==1)channel=3; //11B???SGL/DIF=1??ODD/EVEN=1
//****************д???????????????д??ADC0832**************
DI=1; _nop_();_nop_(); //?????λ??????1??1λ??
CS=0;_nop_();_nop_(); //????CS?????ADC0832???
CLK=1;_nop_();_nop_(); //????CLK???DI???????????ADC0832??????·??λ?????
CLK=0;_nop_();_nop_(); //????CLK??,?γ??????1?????????????
CLK=1; //????CLK???????????????????DI?????????????λ
//???????????λ????λ??????????
DI=channel&0x1;_nop_();_nop_(); //?????????0????10&01=0????SGL/DIF=0??????????2λ??
CLK=0;_nop_();_nop_(); //????CLK??,?γ??????2,???????????
CLK=1; //????CLK??
DI=(channel>>1)&0x1;_nop_();_nop_(); //?????????0????01&01=1??ODD/EVEN=1????????0
CLK=0; //????CLK??,?γ??????3
DI=1;_nop_();_nop_(); //???????????
dat=0;
//*************??????????AD?????????DO?????****************
for(i=0;i<8;i++) //????CLK?????????λ???????????λ
{
dat|=DO; //?????????|??λ?????2λ?????λ?1???????1???????0
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_(); //?γ???????????
dat<<=1;
if(i==7)dat|=DO;
}
for(i=0;i<8;i++) //????CLK?????????λ???????????λ
{
j=0;
j=j|DO; //??????
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_(); //?γ???????????
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
//*********************????AD??????????????????***********************
CS=1; //????CS??
CLK=0; //????CLK??
DO=1; //?????????,????????
dat<<=8;
dat|=ndat;
return(dat); //????????
}
//============????????????==========================
void display(uint p) //????????????
{
uchar S1,S2,S3,S4;
S1=(p/255*5000)/1000; //??λ
S2=(p/255*5000)%1000/100; //???λ
S3=(p/255*5000)%100/10; //???λ
S4=(p/255*5000)%10; //???λ
//??λ
P3=0x01; //??????????
P1=led[S1]; //??????С?????????
delay_ms(5); //???
S_1 = 0; //??????
//???λ
P3=0x10; //???????????
P1=led[S2]; //????????С?????????
delay_ms(5);
S_2 = 0; //??????
//???λ
P3=0x04; //???????????
P1=led[S3]; //????????С?????????
delay_ms(5);
S_3= 0; //??????
//???λ
P3=0x80; //??????????
P1=led[S4]; //????????С?????????
delay_ms(5);
S_4= 0; //??????
}
int main(void)
{
while(1) //???
display(Adc0832(0));
}//????????
|