下面是电路图:

ADC0832封装图

ADC0832与单片机连接图

ADC0832时序图

程序源码下载: 
#include<msp430f2121.h>
#define DO (P1IN&BIT7)
#define uchar unsigned char
#define uint unsigned int
/***********************************************
sbit cs=P2^0;
sbit clk=P2^1;
sbit DI=P2^2;
sbit DO=P2^6;
*************************************************/
uint adval;
uchar temp;
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint ms)
{ 
 uchar j;
 while(ms--)
 {
 for(j=0;j<120;j++);
 }
} 
void ADC_start()
{
P2OUT|=BIT0;//cs=1
_NOP();
P2OUT&=~BIT1;//clk=0
_NOP();
P2OUT&=~BIT0;//cs=0
_NOP();
P2OUT|=BIT2;//DI=1
_NOP();
P2OUT|=BIT1;//clk=1
_NOP();
P2OUT&=~BIT2;//DI=0;
_NOP();
P2OUT&=~BIT1;//clk=0;
_NOP();
}
void ADC_read(uint CH)
{
 uchar i;
 ADC_start();
 if(CH==0) //选择通道0
 {
 P2OUT|=BIT2;// DI=1;
 P2OUT |=BIT1;//clk=1; 
 _NOP();
 _NOP();
 P2OUT &=~BIT1;//clk=0;//第一个下降沿来DI=1
 _NOP();
 _NOP();
 P2OUT |=BIT2;//DI=0;
 P2OUT |=BIT1;//clk=1;
 _NOP(); 
 _NOP(); 
 P2OUT&=~BIT1;//clk=0;//第二个下降沿来DI=0,DI两次为10,选ch0通道
 _NOP();
 _NOP();
 }
 else //选择通道1
 {
 P2OUT|=BIT2;// DI=1;
 P2OUT |=BIT1;//clk=1; 
 _NOP();
 _NOP();
 P2OUT &=~BIT1;//clk=0;//第一个下降沿来DI=1
 _NOP();
 _NOP();
 P2OUT |=BIT2;//DI=1;
 P2OUT |=BIT1;//clk=1;
 _NOP(); 
 _NOP(); 
 P2OUT&=~BIT1;//clk=0;//第二个下降沿来DI=0,DI两次为11,选ch1通道
 _NOP();
 _NOP();
 }
 /****************下降沿读数据*******************/
 P2OUT|=BIT1;//clk=1;
 _NOP();
 P2OUT&=~BIT1;//clk=0;再来下降沿读书
 for(i=0;i<8;i++)
 {
 P2OUT|=BIT2;// DI=1;
 if(DO) // 判断DO;
 {
 temp |=0x01;
 }
 else
 {
 temp &=0xfe;
 }
 P2OUT&=~BIT1;//clk=0;
 _NOP();
 _NOP();
 P2OUT|=BIT1;//clk=1;//上升沿来,左移1位
 temp=temp<<1;
 }
 adval=temp;
}
/********显示数据********************************/
void display(uint dat)
{ 
 P2OUT &=~BIT3;//关闭个位显示P2.3
 P2OUT &=~BIT4;//关闭十位显示P2.4
 P2OUT |=BIT5;//开启百位显示P2.5
 P1OUT=tab[dat/100];
 delay(1);
 P1OUT=0xff;
 P2OUT &=~BIT3;//关闭个位显示P2.3
 P2OUT |=BIT4;//开启十位显示P2.4
 P2OUT &=~BIT5;//关闭百位显示P2.5
 P1OUT=tab[(dat%100)/10];
 delay(1);
 P1OUT=0xff;
 P2OUT |=BIT3;//开启个位显示P2.3
 P2OUT &=~BIT4;//关闭十位显示P2.4
 P2OUT &=~BIT5;//关闭百位显示P2.5
 P1OUT=tab[dat/10];
 delay(1);
 P1OUT=0xff;
}
void main()
{
 
 WDTCTL = WDTPW + WDTHOLD;
 P2DIR =0x3f; 
 P1DIR|=0x7f;
 while(1)
 {
 ADC_read(0);
 delay(1);
 display(adval);
 }
}