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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3421|回復: 6
打印 上一主題 下一主題
收起左側

單片機直流電子負載程序+EBpro上位機工程

[復制鏈接]
跳轉到指定樓層
樓主
直流簡易電子負載

ADC+負載+按鍵 +485+串口_最終版程序

單片機源程序如下:
  1. #include        "config.h"
  2. #include        "adc.h"
  3. #include        "delay.h"
  4. #include        "soft_uart.h"
  5. #include  "lcd.h"
  6. #include  "PWM.h"
  7. #include  "intrins.h"
  8. #include  "usart.h"
  9. /*************        按鍵******************************************************/
  10. sbit k1=P3^6;         //定義P3.3口是k1
  11. sbit k2=P3^5;         //定義P3.3口是k1
  12. sbit k3=P3^4;         //定義P3.3口是k1
  13. sbit k4=P3^3;         //定義P3.3口是k1
  14. sbit fan=P3^2;         //定義P3.3口是k1

  15. int results=0;
  16. int DUTY,ierr=0,resulti=0;
  17. int num=0;
  18. int resultv=0;
  19. int cusor=0;
  20. int send_mode=0,receive_mode=0;


  21. void modbushandle1(void);
  22. void modbushandle2(void);
  23. void modbushandle3(void);
  24. void modbushandle4(void);
  25. void modbushandle5(void);
  26. void modbushandle6(void);
  27. void Uart3s(void);
  28. extern u8 ch;
  29. extern int modflag;
  30. extern u8 mtx[100],mrx[100];
  31. extern u16 send_I_V_P[50];   //4 發送電流電壓功率值
  32. extern u16 bitsend[50];     //2 讀過壓保護狀態
  33. extern u16 bitworkflag[50]; //1 5 啟停標志位
  34. extern u16 set_current[50];   //3 6設定電流值

  35. unsigned int set_dis[4]={0,0,0,0};
  36. unsigned int a[9];//={0,0}
  37. unsigned int i;//,resultsvol,resultscur, u2summean,i2summean,u2sum,i2sum,u2num;
  38. extern unsigned char  receiver_buf;
  39. void display();      //顯示程序聲明
  40. void keyscan();

  41. void voltage_test()
  42. {
  43.    if(resultv>5500)
  44.          {          
  45.                   bitworkflag[0]=0;
  46.             DUTY=0;
  47.                   bitsend[0]=1;
  48.          }
  49. }

  50. void main()
  51. {
  52.                 P2M1=0X00;
  53.           P2M0=0XFF;
  54.           P0M1=0X00;
  55.           P0M0=0XFF;
  56.           P3M1=0X00;
  57.           P3M0=0XFF;
  58.                 P4M1=0X00;
  59.           P4M0=0XFF;
  60.           P5M1=0X00;
  61.           P5M0=0XFF;
  62.           P6M1=0X00;
  63.           P6M0=0XFF;
  64.                 P7M1=0X00;
  65.           P7M0=0XFF;       
  66.           P0M0=0xfe;
  67.        
  68.           PWMInit();
  69.                 LcdInit();
  70.                 delay_ms(5);
  71.           ADC_config();
  72.           fan=0;//風扇
  73.                 DUTY=0;
  74.     UartInit();
  75.                 ch=1;
  76.                
  77.                 send_I_V_P[0]=7; //4
  78.                 send_I_V_P[1]=15;
  79.                 send_I_V_P[2]=200;
  80.            bitworkflag[0]=0;  // 1 5
  81.                 set_current[0]=1000;// 3 6
  82.                 bitsend[0]=0;
  83.   while(1)
  84.         {                  
  85.                 display();       
  86.                 keyscan();
  87.                 voltage_test();

  88.                 if(crcok==1)  
  89.                  {
  90. //                         DisplayOneChar(0,0,bitworkflag[0]+0x30);
  91.      crcok = 0;
  92.                  if(mrx[0]==6)
  93.                  {
  94.                          switch (mrx[1])
  95.                          {
  96.                                         case 1:modbushandle1(); //讀取啟停標志
  97.                                                 break;
  98.                                        
  99.                                         case 2:modbushandle2(); //讀取過流保護的標志位
  100.                                                 break;
  101.                                        
  102.                                         case 3:modbushandle3(); //讀取設定電流值
  103.                                                 break;
  104.                                        
  105.                                         case 4:modbushandle4(); //讀電流電壓功率
  106.                                                 break;
  107.                        
  108.                                         case 5:modbushandle5();  //啟動
  109.                                                 break;
  110.                                        
  111.                                         case 6:modbushandle6(); //設定電流值
  112.                                                 break;
  113.                          }  
  114.       }
  115.                 }
  116.                 switch (bitworkflag[0])       
  117.                         {
  118.                                 case 0:
  119.                                         PWM2output(0);
  120.                                   fan=0;
  121.                                         DisplayListChar(14,0,"OF");
  122.                                 break;
  123.                                 case 1:
  124.                                   fan=1;
  125.                                         PWM2output(DUTY);
  126.                                         DisplayListChar(14,0,"ON");  
  127.                           break;
  128.                         }               
  129.                 for(i=0;i<2;i++)
  130.                 {
  131.                    results = Get_ADC10bitResult(i);        //參數0~7,查詢方式做一次ADC, 返回值就是結果, == 1024 為錯誤               

  132.                          if(i==1)
  133.                           {
  134.                                   results=results*9.77;//9.98 放大2倍
  135.                                    resulti=results;
  136.                                   send_I_V_P[0]=        resulti;
  137.                           }
  138.                                 else
  139.                                 {
  140.                                          if(resulti>1050&resulti<1970)
  141.                                                                  results=results*9.96;//9.98 放大2倍
  142.                                          else if(resulti>=1970&resulti<2450)
  143.                                                                  results=results*9.98;//9.98 放大2倍
  144.                                          else if(resulti>=2450&resulti<3200)
  145.                                                                  results=results*10.14;//9.98 放大2倍
  146.                                          else
  147.                                                  results=results*9.68;//9.705 放大2倍
  148.                        
  149.                                         resultv=results;
  150.                                   send_I_V_P[1]=resultv;
  151.                     }
  152.              a[0+i*4]=results/1000 + '0';
  153.              a[1+i*4]=results%1000/100 + '0';
  154.              a[2+i*4]=results%100/10 + '0';
  155.              a[3+i*4]=results%10 + '0';                
  156.                          DisplayOneChar(0+i*7,1,a[0+i*4]);
  157.                    DisplayListChar(1+i*7,1,".");
  158.                    DisplayOneChar(2+i*7,1,a[1+i*4]);
  159.                    DisplayOneChar(3+i*7,1,a[2+i*4]);
  160.                    DisplayOneChar(4+i*7,1,a[3+i*4]);  
  161.                          delay_ms(250);
  162.                  }
  163.      ierr = set_current[0]-resulti;
  164.                  if(ierr>300)ierr=300;
  165.                  if(ierr<-300)ierr=-300;                 
  166.                  DUTY+=(ierr)/30;
  167.         }
  168. }

  169. void display()
  170. {   
  171.                    DisplayListChar(5,1,"v");       
  172.                    DisplayListChar(13,1,"A");
  173.          /***********顯示設定電流值**********/
  174.                    set_dis[0]=set_current[0]/1000 + '0';
  175.              set_dis[1]=set_current[0]%1000/100 + '0';
  176.              set_dis[2]=set_current[0]%100/10 + '0';
  177.              set_dis[3]=set_current[0]%10 + '0';
  178.          
  179.                    DisplayOneChar(2,0,set_dis[0]);
  180.                    DisplayListChar(3,0,".");
  181.                    DisplayOneChar(4,0,set_dis[1]);
  182.                          DisplayListChar(5,0,"A");
  183.           /***********顯示光標**********/
  184.                          if(cusor==1)
  185.                          {
  186.                                 DisplayListChar(2,0," ");
  187.                                 delay_ms(100);  
  188.                     DisplayOneChar(2,0,set_dis[0]);
  189.                                 delay_ms(100);   
  190.                    }
  191.                         else if(cusor==2)
  192.                          {
  193.                                 DisplayListChar(4,0," ");
  194.                                 delay_ms(100);
  195.                                 DisplayOneChar(4,0,set_dis[1]);
  196.                                 delay_ms(100);
  197.                          }       
  198. }       

  199.   void keyscan()
  200. {
  201. //*******************************k1普通顯示******************************************//          
  202.         if(k1==0)                  //檢測按鍵K1是否按下
  203.         {       
  204.                 delay_ms(2);   //消除抖動 一般大約10ms
  205.                 if(k1==0)         //再次判斷按鍵是否按下
  206.                 {
  207.                         if(cusor==1)
  208.                         {
  209.                                 set_current[0]+=1000;
  210.                                 if(set_current[0]>=4000)
  211.                                         set_current[0]=0;
  212.                         }
  213.                         else if(cusor==2)
  214.                         {
  215.                                 set_current[0]+=100;
  216.                                 if(set_current[0]>=4000)
  217.                                         set_current[0]=10;
  218.                         }
  219.                 }
  220.                 while(!k1);         //檢測按鍵是否松開
  221.         }
  222. //******************************k2**寫*****************************************//       
  223.         if(k2==0)
  224.         {
  225.                 delay_ms(2);  //消抖處理
  226.                 if(k2==0)
  227.                 {       
  228.                         if(cusor==1)
  229.                         {
  230.                                 set_current[0]-=1000;
  231.                                 if(set_current[0]<=0)
  232.                                         set_current[0]=4000;
  233.                         }
  234.                         else if(cusor==2)
  235.                         {
  236.                                 set_current[0]-=100;
  237.                                 if(set_current[0]<=0)
  238.                                         set_current[0]=4000;
  239.                         }

  240.                 }
  241.                 while(!k2);
  242.         }
  243. //***************************k3*讀**********************************************//       
  244.         if(k3==0)
  245.         {
  246.                 delay_ms(2);  //消抖處理
  247.                 if(k3==0)
  248.                 {         
  249.                         cusor++;
  250.                         if(cusor>=3)
  251.                                 cusor=0;               
  252.                 }  
  253.                 while(!k3);
  254.         }               
  255. //***************************k4*啟動**********************************************//
  256.                 if(k4==0)
  257.         {
  258.                 delay_ms(2);  //消抖處理
  259.                 if(k4==0)
  260.                 {         
  261.                         bitworkflag[0]++;
  262.                         if(bitworkflag[0]>=2)
  263.                                 bitworkflag[0]=0;
  264.                 }  
  265.                 while(!k4);
  266.         }       
  267. }
復制代碼

所有資料51hei提供下載:
電子負載固件以及上位機.rar (1.42 MB, 下載次數: 48)


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

使用道具 舉報

沙發
ID:1 發表于 2019-6-7 05:35 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

板凳
ID:55591 發表于 2019-7-12 06:49 | 只看該作者
看著不錯 不錯
回復

使用道具 舉報

地板
ID:56665 發表于 2019-7-12 19:30 | 只看該作者
有程序沒有原理圖不知道怎么回事。
回復

使用道具 舉報

5#
ID:140370 發表于 2019-8-2 13:12 | 只看該作者
感謝分享,MODBUS始終靜不下心來仔細看一一看。
回復

使用道具 舉報

6#
ID:244512 發表于 2019-10-22 17:56 | 只看該作者
能分享原理圖?
回復

使用道具 舉報

7#
ID:827343 發表于 2020-10-9 17:39 | 只看該作者
電子負載怎么校正
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产第一区二区三区 | 精品乱码一区二区 | 成人伊人 | 久久这里只有精品首页 | 欧美一区二区三区视频在线观看 | 亚洲国产成人av好男人在线观看 | 色性av| 国产精品久久久久久久久免费软件 | 久久99精品久久久久久噜噜 | 国产精品日本一区二区不卡视频 | 亚洲精品国产精品国自产在线 | 91免费入口 | 91亚洲一区| 日韩精品1区2区3区 国产精品国产成人国产三级 | 亚洲综合色视频在线观看 | 国内精品视频在线观看 | 在线国产99| 国产一级在线 | 欧美久久久久久久久 | 日韩在线免费视频 | 色视频网站在线观看 | 成人免费视频久久 | 欧美一区二区综合 | 国产成人艳妇aa视频在线 | 亚洲精品国产一区 | 超碰在线免费av | 亚洲欧洲中文日韩 | 九色国产 | 国产欧美一区二区三区在线看 | 91精品国产一区二区三区 | 国产不卡视频 | 性高湖久久久久久久久 | 国产精品国产精品 | 在线精品一区 | 日韩中文不卡 | 暴草美女 | 欧美在线a | 天天干视频 | 一区欧美| 天天射美女 | 日韩欧美在线视频 |