欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8686|回復: 6
收起左側

ADC0832模數轉換采集電壓上位機和下位機單片機程序源碼

[復制鏈接]
ID:3721 發表于 2016-6-17 01:15 | 顯示全部樓層 |閱讀模式


0.png

ADC0832電壓采集上位機程序,51黑附件中可下載vc++源碼


下面是單片機做的下位機程序:
  1. #include<reg52.h>
  2. #include "intrins.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit ADCS =P2^3;  //ADC0832 chip seclect
  6. sbit ADDI =P2^2;  //ADC0832 k in
  7. sbit ADDO =P2^1;  //ADC0832 k out
  8. sbit ADCLK =P2^0;  //ADC0832 clock signal

  9. sbit cs=P2^2;
  10. sbit wr=P2^3;
  11. unsigned char dispbitcode[8]={0xf7,0xfb,0xfd};  //位掃描
  12. unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
  13. unsigned char dispbuf[3];
  14. unsigned char table[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  15. uint temp,adc=0;
  16. uchar getdata; //獲取ADC轉換回來的值
  17. uchar flag,a;

  18. void delayms(void)  //12mhz delay 1.01ms
  19. {
  20.    unsigned char x,y;   
  21.    x=10;
  22.    while(x--)
  23.   {
  24.        y=4;
  25.        while(y--);
  26.     }
  27. }

  28. void display(void)  //數碼管顯示函數
  29. {
  30.   char k;
  31. for(k=0;k<3;k++)
  32.   {

  33.   P1 = dispbitcode[k];
  34.   
  35.   P0 = dispcode[dispbuf[k]];
  36.    
  37.     delayms();
  38.   if(k==0)          //加上數碼管的dp小數點
  39.           P0&=0x7f;
  40.   delayms();
  41.            P1=0xff;
  42.   
  43.   }
  44. }
  45. //采集并返回
  46. unsigned int Adc0832(unsigned char channel)     //AD轉換,返回結果
  47. {
  48.     uchar i=0;
  49.     uchar j;
  50.     uint dat=0;
  51.     uchar ndat=0;

  52.     if(channel==0)channel=2;
  53.     if(channel==1)channel=3;
  54.     ADDI=1;
  55.     _nop_();
  56.     _nop_();
  57.     ADCS=0;//拉低CS端
  58.     _nop_();
  59.     _nop_();
  60.     ADCLK=1;//拉高CLK端
  61.     _nop_();
  62.     _nop_();
  63.     ADCLK=0;//拉低CLK端,形成下降沿1
  64.     _nop_();
  65.     _nop_();
  66.     ADCLK=1;//拉高CLK端
  67.     ADDI=channel&0x1;
  68.     _nop_();
  69.     _nop_();
  70.     ADCLK=0;//拉低CLK端,形成下降沿2
  71.     _nop_();
  72.     _nop_();
  73.     ADCLK=1;//拉高CLK端
  74.     ADDI=(channel>>1)&0x1;
  75.     _nop_();
  76.     _nop_();
  77.     ADCLK=0;//拉低CLK端,形成下降沿3
  78.     ADDI=1;//控制命令結束
  79.     _nop_();
  80.     _nop_();
  81.     dat=0;
  82.     for(i=0;i<8;i++)
  83.     {
  84.         dat|=ADDO;//收數據
  85.         ADCLK=1;
  86.         _nop_();
  87.         _nop_();
  88.         ADCLK=0;//形成一次時鐘脈沖
  89.         _nop_();
  90.         _nop_();
  91.         dat<<=1;
  92.         if(i==7)dat|=ADDO;
  93.     }  
  94.     for(i=0;i<8;i++)
  95.     {
  96.         j=0;
  97.         j=j|ADDO;//收數據
  98.         ADCLK=1;
  99.         _nop_();
  100.         _nop_();
  101.         ADCLK=0;//形成一次時鐘脈沖
  102.         _nop_();
  103.         _nop_();
  104.         j=j<<7;
  105.         ndat=ndat|j;
  106.         if(i<7)ndat>>=1;
  107.     }
  108.     ADCS=1;//拉低CS端
  109.     ADCLK=0;//拉低CLK端
  110.     ADDO=1;//拉高數據端,回到初始狀態
  111.     dat<<=8;
  112.     dat|=ndat;
  113.     return(dat);            //return ad k
  114. }


  115. void main()
  116. { P0=0XFF;
  117.   TMOD=0x20;
  118. TH1=0xfd;
  119. TL1=0xfd;
  120. TR1=1;
  121. REN=1;
  122. SM0=0;
  123.   SM1=1;
  124.   EA=1;
  125.   ES=1;
  126.   while(1)
  127.   {           if(flag==1)
  128.      {        
  129.             ES=0;
  130.             flag=0;
  131.             SBUF=getdata;
  132.    while(!TI);
  133.            TI=0;
  134.         ES=1;               
  135.                

  136.          
  137.          }
  138.            getdata=Adc0832(1);
  139.   temp=getdata*1.0/255*500;  //電壓值轉換,5V做為參考電壓,分成256份。
  140.   dispbuf[2]=temp%10;         //個位
  141.   dispbuf[1]=temp/10%10; //十位
  142.   dispbuf[0]=temp/100; //百位

  143.          
  144.       display();
  145.   
  146.   }        

  147. }
  148. void ckzd() interrupt 4
  149. {        
  150.          RI=0;
  151.          
  152.          a=SBUF;



  153.    switch(a)
  154.    {
  155.                    case 'a':

  156.                      flag=1; break;

  157.                 case 'b':

  158.                   P0=adc; break;

  159.                 case 'c':
  160.         
  161.                   P0=adc; break;

  162.                 default:
  163.         P1=0xFF;
  164.         break;
  165.     }
  166.         
  167. }
復制代碼


0.png

ADC0832模數轉換測試程序,帶上位機源程序和下位機源程序,將adc0832采集的電壓值送給上位機顯示,本人親測

上位機和下位機ADC0832upanddown.rar (5.72 MB, 下載次數: 139)


回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:273849 發表于 2018-5-14 19:44 | 顯示全部樓層
是用什么軟件做的啊
回復

使用道具 舉報

ID:65956 發表于 2018-9-27 13:21 | 顯示全部樓層
才0-5V,上位機也才那樣,功能太簡單了,測量范圍也太小了,還有ADC才8位,精度太差
回復

使用道具 舉報

ID:186637 發表于 2018-10-19 21:55 | 顯示全部樓層
謝謝分享!學習學習!
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
ID:478255 發表于 2019-3-22 10:02 | 顯示全部樓層
這個_nop_是什么意思?延時的意思嗎
回復

使用道具 舉報

ID:63090 發表于 2020-5-10 12:28 | 顯示全部樓層
挺好O,感謝分享
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
ID:860602 發表于 2021-1-8 22:37 | 顯示全部樓層

這個_nop_是什么意思?延時的意思嗎  

是的 ,相當于匯編的nop指令
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表