標(biāo)題: 單片機(jī)ADC0808電壓表仿真程序 [打印本頁(yè)]

作者: 鄒民鑫    時(shí)間: 2018-9-29 21:10
標(biāo)題: 單片機(jī)ADC0808電壓表仿真程序
51單片機(jī)電壓表,ADC




LM324               CD4051

ADC0808




74LS74                74LS04                    





CD4511


4位數(shù)碼管






AT89C52



單片機(jī)源程序如下:
  1. #include <reg52.H>
  2. #define uchar unsigned char;
  3. uchar code scan_con[]={0x08,0x04,0x02,0x01};  //定義掃描片選
  4. uchar dispbuf[4]={0,0,0,0}; //定義4個(gè)存儲(chǔ)空間
  5. uchar getdata;
  6. unsigned long int temp;//定義暫存空間
  7. uchar i,j,k,l,m;
  8. int a,b;
  9. sbit s3=P3^7;  //位定義,控制模擬開關(guān)
  10. sbit s2=P3^6;
  11. sbit s1=P3^5;
  12. sbit dp=P0^7; //定義小數(shù)點(diǎn)
  13. #define v20_on {s3=0;s2=0;s1=0;} //宏定義不同量程,不同的開關(guān)狀態(tài)
  14. #define v2_on {s3=0;s2=0;s1=1;}
  15. #define v02_on {s3=0;s2=1;s1=0;}
  16. sbit ST=P3^1;   //定義單片機(jī)和ADC的控制信號(hào)
  17. sbit OE=P3^3;
  18. sbit EOC=P3^2;

  19. delay_ms(int n)
  20. {
  21.         for(a=n;a>0;a--)
  22.                 for(b=100;b>0;b--);
  23. }

  24. main(void)
  25. {
  26.         while(1)
  27.         {   
  28. _20v:       //2~20V量程
  29.         v20_on;
  30.         ST=1;
  31.         delay_ms(1);      //啟動(dòng)A/D轉(zhuǎn)換
  32.         ST=0;
  33.         while(EOC==0)
  34.         OE=1;
  35.         getdata=P1;
  36.         OE=0;
  37.         if(getdata<21)  //量程不合適,切換
  38.         {
  39.                 goto _2v;
  40.                 delay_ms(1);
  41.         }           
  42.         l=3;
  43.         temp=getdata;   //量程合適,數(shù)據(jù)處理
  44.         temp=temp*100;
  45.         temp=temp*5/51;
  46.         goto disp;   //跳到數(shù)碼管顯示程序段
  47. _2v:                   //200MV~2V量程
  48.         v2_on;
  49.         ST=1;
  50.         delay_ms(1);      //啟動(dòng)A/D轉(zhuǎn)換
  51.         ST=0;
  52.         while(EOC==0)
  53.         OE=1;
  54.         getdata=P1;
  55.         OE=0;
  56.         if(getdata<21)
  57.         {
  58.                 goto _02v;
  59.                 delay_ms(1);
  60.         }
  61.         else if(getdata>204)
  62.         {
  63.                 goto _20v;
  64.                 delay_ms(1);
  65.         }
  66.         l=2;
  67.         temp=getdata;
  68.         temp=temp*100*5/51;
  69.         goto disp;
  70. _02v:              //0~200MV量程
  71.            v02_on;
  72.            OE=0;
  73.           ST=1;
  74.         delay_ms(1);      //啟動(dòng)A/D轉(zhuǎn)換
  75.         ST=0;
  76.         while(EOC==0)
  77.         OE=1;
  78.         getdata=P1;
  79.         OE=0;
  80.         if(getdata>204)
  81.            {
  82.                    goto _2v;
  83.                    delay_ms(1);
  84.            }
  85.            l=1;
  86.            temp=getdata;
  87.            temp=temp*100*5/51;
  88.            
  89. disp:
  90.            dispbuf[3]=0;
  91.            dispbuf[2]=0;
  92.            dispbuf[1]=0;
  93.            dispbuf[0]=0;
  94.            i=0;
  95.            for(;temp;i++)//電壓值的每個(gè)位計(jì)
  96.        {
  97.                    dispbuf[i]=temp%10;
  98.                    temp=temp/10;  
  99.            }
  100.            for(k=0;k<=3;k++)  //數(shù)碼管顯示
  101.            {
  102.                   
  103.                    if((k==3&&l==3&&i==3)        ||(k==3&&l==1&&i==3))
  104.                    continue;
  105.                    P0=scan_con[k];      //位選
  106.                     P2=dispbuf[k]&0x0f;   //段選
  107.                    if((l==3&&k==2)||(l==2&&k==3)||(l==1&&k==1))
  108.                    dp=0        ;
  109.                    else dp=1;
  110.                    for(m=0;m<=2;m++)
  111.                    for(j=0;j<=20;j++);
  112.                    }
  113.                    }
  114.                    }
復(fù)制代碼

所有資料51hei提供下載:
電壓表.zip (795.15 KB, 下載次數(shù): 23)






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1