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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4317|回復(fù): 0
收起左側(cè)

ACS712電流測試完美單片機(jī)程序 0到5A量程共陽數(shù)碼管精度0.01

[復(fù)制鏈接]
ID:280979 發(fā)表于 2019-11-17 22:55 | 顯示全部樓層 |閱讀模式
電路原理圖如下:
51hei.png 51hei.png
  1. #include "hader\\main.h"
  2. #include<math.h>
  3. #define uchar unsigned char//宏定義無符號字符型
  4. #define uint unsigned int  //宏定義無符號整型
  5. #define FOSC 11059200L
  6. #define BAUD  9600

  7. #define ADC_POWER   0x80            //ADC 電源控制位
  8. #define ADC_FLAG    0x10            //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位
  9. #define ADC_START   0x08            //ADC 開始轉(zhuǎn)換控制位
  10. #define ADC_SPEEDHH 0x60            //270個時鐘周期轉(zhuǎn)換一次

  11. sfr ADC_DATA=0xc6;           //70個時鐘周期轉(zhuǎn)換一次
  12. void display(void);         //顯示函數(shù)
  13. void t_to_dis(uint num);

  14. #define DUAN P2                   //P0口控制段
  15. #define WEI  P1                   //P2口控制位
  16. /********************************************************************
  17.                             初始定義
  18. *********************************************************************/
  19. //數(shù)碼管顯示段碼
  20. code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
  21. uchar numb[4];              //定義字符串用于數(shù)值轉(zhuǎn)換
  22. uint cnt,times;
  23. uint ad,ad2;
  24. float ad1,ad3;
  25. bit flag,write;        //定時標(biāo)志位
  26. uint16 idata setcurent;
  27. uchar  idata keystat[3];
  28. uint  adcj[91];
  29. uint adcj2[65];
  30. bit bz=0;
  31. uint js=0;
  32. // 串行中斷程序
  33. void initInt(void)
  34. {
  35.         TMOD = 0x01;
  36.         PCON = 0;
  37.         TH0 =(655336-1000)/256;
  38.     TL0 =(655336-1000)%256;
  39.         TR0 = 1;               
  40.     ET0=1;
  41.         EA=1;               
  42. }
  43. //初始化
  44. void initProg(void)
  45. {        
  46.     P2M1=0;
  47.         P2M0=0xff;
  48.         P1M1=0x80;
  49.         P1M0=0x0f;
  50.         P3M1&=0x7f;
  51.         P3M0|=0x80;
  52.         initInt(); //初始化定時器
  53. }
  54. /********************************************************************
  55.                             延時函數(shù)
  56. *********************************************************************/
  57. void delay(uint x)//延時程序 0.1秒
  58. {
  59.         uint m,n,s;
  60.         for(m=x;m>0;m--)
  61.         for(n=20;n>0;n--)
  62.         for(s=248;s>0;s--);
  63. }
  64. /********************************************************************
  65.                          AD轉(zhuǎn)換初始化程序
  66. *********************************************************************/
  67. void InitADC()
  68. {
  69.     P1=P1M0|=0xf0;
  70.         P1M1=0x00;
  71.         ADC_DATA=0;        //AD數(shù)據(jù)寄存器清空
  72.     ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;//打開AD電源,轉(zhuǎn)換周期XX
  73.     delay(10);                //延時
  74. }
  75. /********************************************************************
  76.                          AD轉(zhuǎn)換控制程序
  77. *********************************************************************/
  78. uint GetADCResult(uchar px)          //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
  79. {
  80.     uint t;
  81.         ADC_CONTR=ADC_POWER | ADC_SPEEDHH | px | ADC_START;//開始轉(zhuǎn)換
  82.     _nop_();                        //延時一個機(jī)器周期
  83.     _nop_();                                                //延時一個機(jī)器周期
  84.     _nop_();                                                //延時一個機(jī)器周期
  85.     _nop_();                                                //延時一個機(jī)器周期
  86.         _nop_();                        //延時一個機(jī)器周期
  87.         while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
  88.         ADC_CONTR &= ~ADC_FLAG;       //關(guān)閉AD轉(zhuǎn)換
  89.         t=(ADC_DATA<<2)|ADC_LOW2;
  90.         return t;
  91. }                  
  92. /********************************************************************
  93.                             按鍵掃描
  94. *********************************************************************/
  95. void key_scan(void)
  96. {
  97.   if(key1==0) //功能按鍵,顯示調(diào)整和實測值
  98.   {
  99.     if(++keystat[0]>=30)
  100.     {
  101.       keystat[0] = 1;
  102.     }
  103.   }
  104.    else
  105.    if((key1)&&(keystat[0]))
  106.    {
  107.             keystat[0] = 0;
  108.          flag=!flag;
  109.    }
  110.   if(flag==1)
  111.   {
  112.       //增加設(shè)定電流值
  113.           if(key2==0) //增加設(shè)定電流值
  114.           {
  115.                   if(++keystat[1]>=80)
  116.                   {
  117.                            keystat[1]=1;
  118.                         setcurent=setcurent+1 ;  
  119.                         if(setcurent>500)
  120.                         setcurent=500;
  121.                         write = 1;
  122.                    }                                                  
  123.           }
  124.          else if((key2)&&(keystat[1]))
  125.                  {
  126.                          keystat[1] = 0;
  127.          }

  128.           //減小設(shè)定電流值
  129.           if(key3==0) //減小設(shè)定電流值
  130.           {
  131.                    if(++keystat[2]>=80)
  132.                    {
  133.                                    keystat[2] = 1;
  134.                                 setcurent = setcurent-1;  
  135.                                 if(setcurent<1)
  136.                                 setcurent=1;
  137.                                 write = 1;
  138.                    }
  139.           }
  140.           else if((key3)&&(keystat[2]))
  141.                    {
  142.                          keystat[2] = 0;
  143.                    }
  144.   }
  145. }

  146. void Selectsort(uint A[],uchar n)
  147. {
  148.      uchar i,j,min;
  149.          uint temp;
  150.      for(i=0;i<n;i++)
  151.      {
  152.           min=i;
  153.           for(j=i+1;j<=n;j++)  /* 從j往前的數(shù)據(jù)都是排好的,所以從j開始往下找剩下的元素中最小的 */
  154.           {
  155.                if(A[min]>A[j])  /* 把剩下元素中最小的那個放到A[i]中 */
  156.                {
  157.                 temp=A[i];
  158.                 A[i]=A[j];
  159.                 A[j]=temp;
  160.                }
  161.           }
  162.     }  
  163. }
  164. /********************************************************************
  165.                             主函數(shù)
  166. *********************************************************************/
  167. void main()
  168. {        
  169.     uint i;
  170.         uchar j,t;
  171.     initProg();
  172.     InitADC();  //AD初始化
  173.         setcurent=IapReadByte(0);
  174.         setcurent=setcurent*100+IapReadByte(1);
  175.         while(1)
  176.         {
  177.               if(flag)                     //顯示設(shè)定值
  178.                   t_to_dis(setcurent);   //數(shù)值變換
  179.                   else           //否則顯示實測值
  180.                   t_to_dis(ad2);   //數(shù)值變換
  181.                   //if(ad2>=setcurent){OUT=0;} else {OUT=1;}
  182.                   if(ad2>=setcurent){js++;}
  183.                   if(ad2<setcurent){OUT=1;js=0;}
  184.                   if(js>=1000){OUT=0;}else{OUT=1;}
  185.                   if(write==1)
  186.                  {
  187.                     write=0;
  188.                         IapEraseSector(0);
  189.                         IapProgramByte(0,setcurent/100);
  190.                         IapProgramByte(1,setcurent%100);
  191.                   }

  192.             ad=GetADCResult(7);
  193.                 i=ad*10;
  194.                 if(i>=5120&&i<=7020)
  195.                 {
  196.                   adcj[j++]=i;
  197.                 }
  198.                 if(j>90)
  199.                 {
  200.                   j=0;
  201.                   Selectsort(adcj,90);
  202.                   adcj2[t++]=adcj[90];
  203.                   if(t>3)
  204.                    {
  205.                     t=0;
  206.                         Selectsort(adcj2,3);
  207.                     ad1 = 500.0*((adcj2[3]-5120)/10240.0)/0.185;
  208.                         ad1=ad1*0.708*1.35;
  209.                  ad2=abs(ad1);
  210.                   }
  211.                  }
  212.         }
  213. }
  214. /********************************************************************
  215.                             求值函數(shù)
  216. *********************************************************************/
  217. void t_to_dis(uint num)
  218. {        
  219.         numb[0]=num/1000;           //顯示千位
  220.         numb[1]=num/100%10;                //顯示百位
  221.         numb[2]=num/10%10;                    //顯示十位
  222.         numb[3]=num%10;             //顯示個位
  223. }
  224. /********************************************************************
  225.                            定時器T0中斷函數(shù)
  226. *********************************************************************/
  227. void timer0(void)interrupt 1  
  228. {         
  229.      TH0=(65536-800)/256;
  230.          TL0=(65536-800)%256;
  231.      cnt++;
  232.      switch(cnt)
  233.          {
  234.       case 1: WEI&=0XF0; DUAN=seg7code[numb[0]]; wei1=1; break; //分十位
  235.           case 2: WEI&=0XF0; DUAN=seg7code[numb[1]]&0x7f; wei2=1; break;//分個位
  236.           case 3: WEI&=0XF0; DUAN=seg7code[numb[2]]; wei3=1; break;//秒十位
  237.           case 4: WEI&=0XF0; DUAN=seg7code[numb[3]]; wei4=1; break; //輸出小
  238.           default:  cnt=0;break;
  239.      }
  240.      key_scan();//按鍵掃描
  241. }
  242. /********************************************************************
  243.                               結(jié)束
  244. *********************************************************************/
復(fù)制代碼

02、電流測試完美程序 -(0到5A量程)共陽無加倍 - 精度0.01 - 加補(bǔ)償.rar

67.03 KB, 下載次數(shù): 89, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品一区二区 | 中文字幕精品视频 | 亚洲一区中文字幕在线观看 | 中文字幕在线观看 | caoporon| 毛片在线看片 | 欧美男人的天堂 | 亚洲福利av | 久久成人18免费网站 | 亚洲三级av | 日本理论片好看理论片 | 国产成人99久久亚洲综合精品 | 国外成人免费视频 | 亚洲免费大片 | 国产精品亚洲第一 | 国产成人精品久久二区二区91 | 成人a视频片观看免费 | 99精品国产一区二区三区 | 国产欧美精品一区二区三区 | 欧美色综合天天久久综合精品 | 99免费在线| 国产专区在线 | 久久久国产一区 | 日韩视频观看 | 一a级片| 色约约视频 | 国产精品欧美一区二区 | 日韩成人在线免费观看 | 中文字幕动漫成人 | 精彩视频一区二区三区 | 中文字幕在线视频免费视频 | 久久久黄色 | 国产亚洲精品美女久久久久久久久久 | 91视频网| 亚洲一区二区三区在线视频 | 久久久久久成人 | 在线观看中文字幕dvd播放 | 亚洲精品国产综合区久久久久久久 | 中文字幕一区二区视频 | 中文字幕在线免费观看 | 日韩在线免费观看视频 |