亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

51單片機(jī)交流電檢測(cè)程序 單相工頻電參數(shù)測(cè)量?jī)xProteus仿真

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)基于MCS-51的單相工頻交流電參數(shù)檢測(cè)儀。交流有效值0-220V,電流有效值0-40A。電壓、電流值經(jīng)電壓、電流傳感器輸出有效值為0-5V的交流信號(hào),傳感器輸出的電壓、電流信號(hào)與被測(cè)電壓、電流同相位。 基本要求如下 (1) 電流、電壓測(cè)量精度0.1% (2) 檢測(cè)電壓、電流的相位角,求出功率因素 (3) 電流、電壓有效值由LED輪流顯示,也可由按鍵切換顯示量
代碼在下載的文件里

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<regx51.h>
  2. #include<intrins.h>
  3. #include<absacc.h>
  4. #include<math.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define addo (5.0/65535.0)
  8. uchar vol[]="Voltage:";//定義串口通信的電壓提示語
  9. uchar cur[]="Current:";//定義串口通信的電流提示語  
  10. uchar pf[]="Power Factor:";//定義串口通信的功率因數(shù)提示語
  11. uchar num[10]={'0','1','2','3','4','5','6','7','8','9'};//定義串口通信的數(shù)字字符查表傳送  
  12. sbit DIN = P2^0;
  13. sbit CS = P2^1;
  14. sbit CLK = P2^2;
  15. sbit SDO = P2^3;
  16. sbit SCK = P2^4;
  17. sbit CONV = P2^5;
  18. sbit SDI=P2^6;
  19. uint High,Low;  
  20. sbit K=P3^2;
  21. bit choose=1;//定義A/D轉(zhuǎn)換器通道選擇變量
  22. double t=0;      
  23. static unsigned char disbuf[8] = {1,2,3,4,5,6,7,8};//數(shù)碼管顯示緩沖數(shù)據(jù)
  24. /*延時(shí)函數(shù)*/
  25. void delay_ms(uint n)
  26. {
  27.         uchar i;
  28.         while(n--)
  29.         {
  30.                 for(i=0;i<100;i++);
  31.         }
  32. }
  33. /*定時(shí)器T0初始化 */
  34. void Init_T0()  
  35. {  
  36.         TMOD=0x09;  
  37.         TH0=0;  
  38.         TL0=0;  
  39. }  
  40. /*數(shù)碼管進(jìn)行顯示*/
  41. void WriteByte(uchar dat)
  42. {
  43.         uchar i;
  44.         for(i=0;i<8;i++)
  45.         {
  46.                 DIN = ((dat<<i)&0x80)?1:0;
  47.                 CLK = 0;
  48.                 _nop_();
  49.                 CLK = 1;
  50.                 _nop_();
  51.         }
  52. }
  53. void MAX7221_WRITE(uchar addr,uchar dat)
  54. {
  55.         CS = 0;
  56.         WriteByte(addr);
  57.         WriteByte(dat);
  58.         CS = 1;
  59. }
  60. void MAX7221_Initial(void)
  61. {
  62.         MAX7221_WRITE(0x0A,0x07);
  63.         MAX7221_WRITE(0x0B,0x07);
  64.         MAX7221_WRITE(0x0C,0x01);
  65.         MAX7221_WRITE(0x0F,0x00);
  66.         MAX7221_WRITE(0x09,0xff);
  67. }
  68. void display(uchar *str)
  69. {
  70.         uchar i;
  71.         for(i=0;i<8;i++)
  72.         {
  73.                 MAX7221_WRITE(i+1,str[i]);
  74.         }
  75. }
  76. /*A/D轉(zhuǎn)換讀取轉(zhuǎn)換值*/
  77. uint LTC1864_READ(void)
  78. {
  79.         uchar i;
  80.         uint temp = 0;
  81.         CONV = 0;
  82.         CONV = 1;
  83.         _nop_();_nop_();_nop_();
  84.         CONV = 0;
  85.         SDO = 1;
  86.         for(i=0;i<16;i++)
  87.         {
  88.                 SCK = 1;
  89.                 _nop_();
  90.                 SCK = 0;
  91.                 _nop_();
  92.                 if(i==0)
  93.                 {
  94.                         SDI=1;
  95.                 }
  96.                 if(i==1)
  97.                 {
  98.                         choose=        !choose;
  99.                         SDI=choose;
  100.                 }
  101.                 temp <<= 1;
  102.                 if(SDO==1)
  103.                 {

  104.                         temp |= 0x0001;
  105.                 }
  106.         }
  107.         CONV = 1;
  108.         return temp;
  109. }
  110. /*電流值進(jìn)行數(shù)碼管轉(zhuǎn)換顯示*/
  111. void HEXTOBCD_I(uint temp)
  112. {
  113.         disbuf[0] = temp/10000;
  114.         disbuf[1] = (temp%10000/1000)|0x80;
  115.         disbuf[2] = temp%1000/100;
  116.         disbuf[3] = temp%100/10;
  117.         disbuf[4] = temp%10;
  118.         disbuf[5] = 15;
  119.         disbuf[6] = 15;
  120.         disbuf[7] = 1;
  121. }
  122. /*電壓值進(jìn)行數(shù)碼管轉(zhuǎn)換顯示*/
  123. void HEXTOBCD_V(uint temp)
  124. {
  125.         disbuf[0] = temp/10000;
  126.         disbuf[1] = temp%10000/1000;
  127.         disbuf[2] = (temp%1000/100)|0x80;
  128.         disbuf[3] = temp%100/10;
  129.         disbuf[4] = temp%10;
  130.         disbuf[5] = 15;
  131.         disbuf[6] = 15;
  132.         disbuf[7] = 2;
  133. }
  134. /*定時(shí)器T1初始化*/
  135. void Time_T1(void)
  136. {
  137.         TMOD=0x10;
  138.         TL1=0xb0;
  139.         TH1=0x3c;
  140.         IE=0x88;
  141.         TR1=1;
  142. }
  143. void delay_choose(int t)
  144. {
  145.         Time_T1();
  146.         while(t--)
  147.         {
  148.                 while(!TF1);
  149.                 TF1=0;
  150.                 TL1=0x3c;
  151.                 TH1=0X88;

  152.         }
  153. }
  154. /*讀取相位差方波正脈沖寬度*/
  155. void Message_Width()  
  156. {  
  157.         while(K);  
  158.         TR0=1;  
  159.         while(!K);  
  160.         while(K);  
  161.         TR0=0;  
  162.         High=TH0;  
  163.         Low=TL0;  
  164. }   
  165. /*串口初始化波特率為9600*/  
  166. void UART_init(void)  
  167. {  
  168.     SCON = 0x50;//串口方式1  
  169.     TMOD = 0x20;// 定時(shí)器使用方式2自動(dòng)重載  
  170.     TH1 = 0xFD;//9600波特率對(duì)應(yīng)的預(yù)設(shè)數(shù),定時(shí)器方式2下,TH1=TL1  
  171.     TL1 = 0xFD;  
  172.     TR1 = 1;//開啟定時(shí)器,開始產(chǎn)生波特率  
  173. }   
  174. /*發(fā)送一個(gè)字符*/  
  175. void UART_send_byte(uchar dat)  
  176. {  
  177.         SBUF = dat;         
  178.         while (TI == 0);  
  179.         TI = 0;  
  180. }   
  181. /*發(fā)送一個(gè)字符串*/  
  182. void UART_send_string(uchar *buf)  
  183. {  
  184.         while (*buf != '\0')  
  185.         {  
  186.                 UART_send_byte(*buf++);  
  187.         }  
  188. }  
  189. /*電流顯示及發(fā)送*/
  190. void dianliu()
  191. {
  192.         uchar vol_value[7];//定義串口通信數(shù)據(jù)緩沖數(shù)組
  193.         uint I;
  194.         I=(int)(t*30500);
  195.         HEXTOBCD_I(I);
  196.         display(disbuf);
  197.         delay_ms(10);
  198.         /*串口通信逐一發(fā)送電流值*/
  199.         UART_init();
  200.         UART_send_string(cur);
  201.         vol_value[0]=num[disbuf[0]%16];
  202.         UART_send_byte(vol_value[0]);
  203.         vol_value[1]=num[disbuf[1]%16];
  204.         UART_send_byte(vol_value[1]);
  205.         UART_send_byte(0x2E);
  206.         vol_value[2]=num[disbuf[2]%16];
  207.         UART_send_byte(vol_value[2]);
  208.         vol_value[3]=num[disbuf[3]%16];
  209.         UART_send_byte(vol_value[3]);
  210.         vol_value[4]=num[disbuf[4]%16];
  211.         UART_send_byte(vol_value[4]);
  212.         UART_send_byte(0x41);
  213.         UART_send_byte(0x0d);
  214.         UART_send_byte(0x0a);
  215. }
  216. /*電壓顯示及發(fā)送*/
  217. void dianya()
  218. {
  219.         int I;
  220.         uchar vol_value[7];//定義串口通信數(shù)據(jù)緩沖數(shù)組
  221.        
  222.         I=(int)(t*5866);
  223.         HEXTOBCD_V(I);
  224.         display(disbuf);
  225.         delay_ms(10);
  226.         /*串口通信逐一發(fā)送電壓值*/
  227.         UART_init();
  228.         UART_send_string(vol);
  229.         vol_value[0]=num[disbuf[0]%16];
  230.         UART_send_byte(vol_value[0]);
  231.         vol_value[1]=num[disbuf[1]%16];
  232.         UART_send_byte(vol_value[1]);
  233.         vol_value[2]=num[disbuf[2]%16];
  234.         UART_send_byte(vol_value[2]);
  235.         UART_send_byte(0x2E);
  236.         vol_value[3]=num[disbuf[3]%16];
  237.         UART_send_byte(vol_value[3]);
  238.         vol_value[4]=num[disbuf[4]%16];
  239.         UART_send_byte(vol_value[4]);
  240.         UART_send_byte(0x56);
  241.         UART_send_byte(0x0d);
  242.         UART_send_byte(0x0a);
  243. }
  244. /*串口通信發(fā)送功率因數(shù)*/
  245. void send_P()
  246. {
  247.         uchar vol_value[7];//定義串口通信數(shù)據(jù)緩沖數(shù)組
  248.         uint X1,I;
  249.         double t=0;
  250.         Init_T0();
  251.         Message_Width();   
  252.         X1=(High*256+TL0)/0.92;
  253.         t=(X1+t)/2;
  254.     /*串口通信逐一發(fā)送功率因數(shù)*/
  255.         t=t*0.000314;
  256.         I=abs(cos(t-0.147)*1000);
  257.         UART_init();
  258.         UART_send_string(pf);
  259.         vol_value[0]=num[I/1000];
  260.         UART_send_byte(vol_value[0]);
  261.         UART_send_byte(0x2E);
  262.         vol_value[0]=num[I%1000/100];
  263.         UART_send_byte(vol_value[0]);
  264.         vol_value[0]=num[I%100/10];
  265.         UART_send_byte(vol_value[0]);
  266.         vol_value[0]=num[I%10];
  267.         UART_send_byte(vol_value[0]);
  268.         UART_send_byte(0x0d);
  269.         UART_send_byte(0x0a);
  270.         UART_send_byte(0x0d);
  271. ……………………

  272. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
wj.rar (148.64 KB, 下載次數(shù): 260)

5UTSNM4$C}40%}7VMT)@PA2.png (76.54 KB, 下載次數(shù): 93)

文件截圖

文件截圖

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2020-5-29 01:30 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:65956 發(fā)表于 2020-5-29 08:27 | 只看該作者
這么好像很復(fù)雜哦,現(xiàn)在交流計(jì)量芯片多得很,用專用的計(jì)量芯片作會(huì)好作些,只需要從計(jì)量芯片中讀出相應(yīng)數(shù)值去計(jì)算就行了,多方便,只是個(gè)建議
回復(fù)

使用道具 舉報(bào)

地板
ID:821107 發(fā)表于 2020-9-20 11:59 | 只看該作者
附件是一個(gè)截圖呀,好像沒有看到proteus仿真工程文件
回復(fù)

使用道具 舉報(bào)

5#
ID:328014 發(fā)表于 2020-9-20 17:27 | 只看該作者
stream_1227 發(fā)表于 2020-9-20 11:59
附件是一個(gè)截圖呀,好像沒有看到proteus仿真工程文件

dy.DSN就是仿真啊要用Proteus7.5打開,不要用高版本
回復(fù)

使用道具 舉報(bào)

6#
ID:323456 發(fā)表于 2021-2-6 13:14 | 只看該作者
謝謝,準(zhǔn)備借鑒一番
回復(fù)

使用道具 舉報(bào)

7#
ID:928738 發(fā)表于 2021-11-22 09:03 | 只看該作者
我試過了,跑不起來。protues顯示都不對(duì)
回復(fù)

使用道具 舉報(bào)

8#
ID:713204 發(fā)表于 2023-4-8 12:09 | 只看該作者
按照你的程序仿真,數(shù)碼管并不顯示,可否重發(fā)一下程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表