微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于C52和DAC0832的AD转换问题。

关于C52和DAC0832的AD转换问题。

时间:10-02 整理:3721RD 点击:

#include<reg51.h>

#define uchar unsigned char

      //管脚定义

      sbit jia=P1^6;

      sbit jian=P1^7;

      sbit LED1=P1^0;

      sbit LED2=P1^1;

      sbit LED3=P1^2;

      sbit LED4=P1^3;

                                                

      

      //函数声明

      void delay(void);       //延时   

      void key(void);        //按键

      void add01(void);    //步进加0.1

      void dec01(void);      //步进减0.1

      void shuchu(void);    //显示输出和电压调节

      void DA(void);           //模数转换

  [img=0,1]file:///C:\Users\D-Jn\AppData\Roaming\Tencent\Users\503413895\QQ\WinTemp\RichOle\[Z_I@AGY)$HO@}0)D)R1M$W.png[/img]

      uchara[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

      uchar bw=0,sw=0,gw=5,dw=0;

      void main(void)           //主程序

      {

            

             while(1)

             {      

                    key();  

                    shuchu();

                    DA();      

             }

      }

void delay(void)  //延时程序

{  

  unsigned char i,j;

  for(i=10;i>0;i--)

  for(j=248;j>0;j--);

}

void key(void)      //按键

{

      uchar k;

      P1=0xff;

      k=P1;

      if(k==0xff)

      return;

      delay();

      k=P1;

      if(k==0xff)

      return;

      while(P1!=0xff)

      delay();  

      switch(k)

      {

             case 0xbf:add01();break;

            

             case 0x7f:dec01();break;

            

      }

}            

void add01(void)  //步进加 0.1

{  

      if(dw<9&&!(sw==1&&gw==2))

             dw++;

      else if(dw==9)

      {

      if((sw==1&&gw<2)||(sw==0&&gw<9))

      {

            gw++;

             dw=0;

      }  

      else if(sw==0&&gw==9)

      {

            sw++;

            gw=0;

            dw=0;

      }  

      }

}  

void dec01(void)  //步进减0.1

{  

      if(dw>0)

             dw--;  

      else if(dw==0&&gw>0)

      {

             gw--;

            dw=9;

      }  

      else if(dw==0&&gw==0&&sw>0)

      {

           sw--;

           gw=9;

           dw=9;

      }  

  

}  

      void shuchu(void)//修改显示数值及电压输出

      {

      

             LED2=0;

             LED3=0;

             LED4=0;

             P0=a[bw];

             LED1=1;

             delay();

             LED3=0;

             LED4=0;

             LED1=0;

             P0=a[sw];

             LED2=1;

             delay();

          LED1=0;

             LED2=0;

             LED4=0;

             P0=a[gw]+0x80;

             LED3=1;

             delay();

           LED1=0;

             LED2=0;

             LED3=0;

             P0=a[dw];     

             LED4=1;

             delay();

      

      }

      void DA(void)       //模数转换

      {

             unsigned char temp,dianya;

             temp=sw*100+gw*10+dw;

             dianya=temp*2.13;

             P2=dianya;

      

      }


网上的毕业设计题。

程序如上,请问为什么temp要*2.13 这个2.13是怎么计算来的。

仿真图已经上传了。

引用文章里的描述:

该数模转换电路采用的是DAC0832单极性输出方式,输出Vo=-B*Vref/256,其中B的值为D0~D7组成的8位二进制,取值范围为0~255,Vref是参考电压,该电压有电阻R2、R10和可变电阻RV1分压所得,通过调节可变电阻可以改变参考电压Vref。

数字量取0 ~ 256,B取16, Vref取-8V,即数字量每步进16,模拟量0.03125V,要达到步进0.1V,必须放大2倍,用运放即可 。


电路仿真图



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top