久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: ADC0832模數轉換采集電壓上位機和下位機單片機程序源碼 [打印本頁]

作者: heicc    時間: 2016-6-17 01:15
標題: ADC0832模數轉換采集電壓上位機和下位機單片機程序源碼




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. }
復制代碼




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

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



作者: lizhi2412979180    時間: 2018-5-14 19:44
是用什么軟件做的啊
作者: aking991    時間: 2018-9-27 13:21
才0-5V,上位機也才那樣,功能太簡單了,測量范圍也太小了,還有ADC才8位,精度太差
作者: lqsgg    時間: 2018-10-19 21:55
謝謝分享!學習學習!
作者: 965591772    時間: 2019-3-22 10:02
這個_nop_是什么意思?延時的意思嗎
作者: lzb1989666    時間: 2020-5-10 12:28
挺好O,感謝分享
作者: wengjiamin    時間: 2021-1-8 22:37

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

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




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久久久久久久国产 | 久久视频这里只有精品 | 日韩一级免费视频 | 欧美日韩国产在线观看 | 久久亚洲国产精品 | 精品久久国产 | 秘密爱大尺度做爰呻吟 | 亚洲国产一区在线 | 成人毛片一区二区三区 | 黄色a毛片 | 欧美自拍视频 | 免费一级a毛片 | 亚洲一区二区在线视频 | 日韩专区在线观看 | 国产精品高潮呻吟久久 | 国产www | 天天色小说 | 国产精品一区av | 五月天一区二区三区 | 久操精品视频 | 久久夜色精品国产欧美乱极品 | 久草福利在线 | 日韩欧美二区 | 99re国产精品| 欧美性猛交xxxx黑人猛交 | 欧美一区二区精品 | 国产精品一区二区视频 | 日本免费一级片 | 欧美亚洲天堂 | 日本香蕉视频 | 一边摸一边操 | 久久精品欧美一区 | 男女激情视频网站 | 自拍偷拍综合 | 久草网在线观看 | 人人看人人草 | 99国产精品99久久久久久 | 四虎影视最新地址 | 黄色大片免费观看 | 六月丁香激情 | 中文字字幕在线 |