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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5908|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

交流電壓、電流計萬用表仿真(電壓電流值自動切換)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:137190 發(fā)表于 2016-9-9 17:43 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
最近在51黑論壇上面看到了很多大神分享的直流電壓表的作品,深深受益,于是自己嘗試著做了一個交流電壓0~220V、交流電流0~40A的交流電壓、電流計。在我設(shè)計的作品里,為了測量準(zhǔn)確,我假設(shè)電壓、電流值通過電壓、電流傳感器,輸出成了0~5V的交流電壓信號,通過變壓器的降壓,使電壓的幅值小于5V,方便輸入ADC0809進(jìn)行轉(zhuǎn)換。要是想用設(shè)計的電壓、電流計直接測量0~220V、0~40A的電壓電流值,只需改變變壓器的匝數(shù)比。
不過這個作品的缺陷還是挺多的,比如說與PC機(jī)的接口就是個擺設(shè),完全沒用,還有就是串口本來想輸出電壓、電流的有效值,但是沒有成功,不知道是編程的原因還是硬件連接的問題;再者,計算有效值的算法是取最大值比上1.414,所以交流值變小時得重新啟動電壓、電流計進(jìn)行測量。
希望這個粗陋的設(shè)計能對大家有些用處,同時還希望大家能給予一些意見和建議,謝謝哈~


下面是萬用表的源代碼:
  1. /*****單相交流電壓、電流計設(shè)計,交流有效值0-220V,電流有效值0-40A*****/
  2. #include<reg51.h>
  3. #include<math.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. /******六位七段共陰極數(shù)碼顯示管*******/
  7. uchar code dispbitcode[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  8. uchar code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x76,0x38};
  9. uchar dispbuf[8]={0,0,0,0,0,0,0,0};
  10. void caiji();
  11. void uart();
  12. uint temp,temp1,temp2;
  13. float getdata1,getdata2,max1,max2;
  14. uint w;                                                           //電壓值,電流值切換顯示所需變量
  15. uchar num=0;                        
  16. sbit dula=P2^0;
  17. sbit wela=P2^1;
  18. sbit vi=P2^2;
  19. sbit xuan=P2^3;
  20. sbit ST=P3^6;
  21. sbit OE=P3^7;
  22. sbit EOC=P3^4;
  23. sbit clock=P3^2;
  24. /******主函數(shù)********/
  25. void main()
  26. {
  27.         xuan=0;
  28.         max1=0;
  29.         max2=0;
  30.         w=0;
  31.         SCON=0x80;                                                                 //串行口初始化為方式2
  32.         PCON=0x00;
  33.         EA=1;
  34.         ES=1;
  35.         ET0=1;
  36.         ET1=1;
  37.         TMOD=0x11;
  38.         TH0=(65535-10)/256;                                                 //adc0809時鐘
  39.         TL0=(65535-10)%256;
  40.         TH1=(65535-10000)/256;                                         //定時中斷掃描時間
  41.         TL1=(65535-10000)%256;
  42.         TR0=1;
  43.         TR1=1;
  44.         while(1)
  45.         {
  46.                 caiji();
  47.                 uart();
  48.         }
  49. }
  50. /********電壓,電流傳感器的數(shù)據(jù)采集*******/
  51. void caiji()
  52. {
  53.         uchar i,j;
  54.         /*電壓傳感器數(shù)據(jù)采集*/
  55.         for(j=0;j<10;j++)
  56.         {
  57.     getdata1=0;
  58.         vi=0;
  59.         ST=1;
  60.         ST=0;
  61.         ST=1;
  62.         while(EOC==1);
  63.         while(EOC==0);
  64.         OE=0;
  65.         getdata1=P1;
  66.         for(i=0;i<=200;i++);                                                  
  67.         OE=1;
  68.         getdata1=getdata1/51*717/250*4400;
  69.         if(getdata1>max1)
  70.         max1=getdata1;
  71.         temp1=max1/1.414;
  72.         }
  73.         //if(temp1>22000)
  74.         //temp1=22000;
  75.         /*電流傳感器數(shù)據(jù)采集*/
  76.            for(j=0;j<10;j++)
  77.         {
  78.         getdata2=0;
  79.         vi=1;
  80.         ST=1;
  81.         ST=0;
  82.         ST=1;
  83.         while(EOC==1);
  84.         while(EOC==0);
  85.         OE=0;
  86.         getdata2=P1;
  87.         for(i=0;i<=200;i++);                                                         
  88.         OE=1;
  89.         getdata2=getdata2/51*717/250*800;
  90.         if(getdata2>max2)
  91.         max2=getdata2;
  92.         temp2=max2/1.414;
  93. //        if(temp2>4000)
  94. //        temp2=4000;
  95.         }
  96.         
  97. }
  98. /********串行口發(fā)送電壓,電流值的有效值**********/
  99. void uart()
  100. {
  101.         uchar i;
  102.         SBUF=temp1;                                                //啟動串口發(fā)送
  103.         for(i=0;i<200;i++);
  104. }
  105.                  
  106. /*adc0809時鐘*/
  107. void clok() interrupt 1
  108. {
  109.         TH0=(65535-10)/256;
  110.         TL0=(65535-10)%256;
  111.         clock=~clock;
  112. }

  113. /*******動態(tài)顯示掃描********/
  114. void xianshi() interrupt 3
  115. {
  116.         uchar i,j,k;
  117.         TH1=(65535-10000)/256;
  118.         TL1=(65535-10000)%256;
  119.         if(w==500)
  120.         {
  121.         w=0;
  122.         xuan=~xuan;
  123.         }
  124.         if(xuan==0)
  125.         temp=temp1;
  126.         else
  127.         temp=temp2;
  128.         i=0;
  129.                 for(i=0;i<5;i++)                                         
  130.                 {
  131.                         dispbuf[i]=temp%10;                         //dispbuf數(shù)組里面存放著要在數(shù)碼管顯示的數(shù)字
  132.                         temp=temp/10;
  133.                 }                                                                 
  134.                 dula=0;
  135.                 wela=0;
  136.                         for(k=0;k<=5;k++)
  137.                         {
  138.                                 dula=1;
  139.                                 P0=dispcode[dispbuf[k]];
  140.                                 if(xuan==0&&k==5)
  141.                                 P0=dispcode[11];
  142.                                 if(xuan==1&&k==5)
  143.                                 P0=dispcode[12];
  144.                                 if((k==2))
  145.                                 P0=P0|0x80;
  146.                                 dula=0;
  147.                                 P0=dispbitcode[k];
  148.                                 wela=1;
  149.                                 for(j=0;j<=110;j++){}
  150.                                 P0=0xff;                                         //防止出現(xiàn)亂碼,一個循環(huán)結(jié)束必須保證數(shù)碼管全滅
  151.                                 wela=0;                                         
  152.                         }
  153.         w++;               
  154. }
  155. /**********串口發(fā)送程序************/
  156. void uart_int() interrupt 4
  157. {
  158.         TI=0;
  159.         num++;
  160.         if(num==0x02) ES=0;
  161.         else
  162.         SBUF=temp2;
  163. }
復(fù)制代碼



課設(shè)萬用表2.rar

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

評分

參與人數(shù) 2黑幣 +9 收起 理由
zz9977 + 5 很給力!
vvv64 + 4

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:197660 發(fā)表于 2017-5-12 18:37 | 只看該作者
感謝分享,正在做數(shù)字萬用表,可以參考
回復(fù)

使用道具 舉報

板凳
ID:125150 發(fā)表于 2018-3-31 16:31 | 只看該作者
感謝分享,下載看看!
回復(fù)

使用道具 舉報

地板
ID:355214 發(fā)表于 2018-6-25 22:02 | 只看該作者
看看,感覺不錯
回復(fù)

使用道具 舉報

5#
ID:337280 發(fā)表于 2018-7-20 17:13 | 只看該作者
現(xiàn)在在做一個 簡易功率測試儀    在想怎么弄交流    看到你的圖 我連程序都沒敢看      感覺還要再等幾年我才能看
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久三级 | 九九成人 | 国产精品欧美精品日韩精品 | 国产精品一卡二卡三卡 | 日韩精品一区二区在线观看 | 久久久久免费 | 青青草社区| 日韩欧美一区二区三区免费观看 | 九九热精品视频 | 激情一区二区三区 | xnxx 日本免费 | 91精品在线播放 | 精品美女久久久久久免费 | 一区二区在线免费观看 | av在线免费观看网址 | 91久久电影 | 日韩欧美视频 | 国产视频精品区 | 黄网站在线播放 | 国产成人精品a视频 | 四虎影视一区二区 | 视频第一区 | 91精品一区二区 | 亚洲va国产日韩欧美精品色婷婷 | 国产在视频一区二区三区吞精 | 国产精品视频一区二区三区 | 神马久久久久久久久久 | 色婷婷久久 | 国产精品久久久久影院色老大 | 中文字幕一区二区三区精彩视频 | 国产成人网| 精品一区二区三区不卡 | 国产偷久久一级精品60部 | 国产精品观看 | 国产目拍亚洲精品99久久精品 | 日本福利视频免费观看 | 在线视频一区二区 | 久久综合一区二区三区 | 精品二 | 国产精品久久久久久久久久妞妞 | 日本成年免费网站 |