专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ADC0832模数转换MSP430单片机程序+电路图

作者:佚名   来源:本站原创   点击数:  更新时间:2013年11月06日   【字体:

下面是电路图:


 


                ADC0832封装图         


ADC0832与单片机连接图



ADC0832时序图

程序源码下载: http://www.51hei.com/f/0832430.rar
#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);
   }
}
关闭窗口

相关文章