找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

0-30V 4A單片機數(shù)控穩(wěn)壓電源設計資料

  [復制鏈接]
跳轉到指定樓層
樓主
ID:290170 發(fā)表于 2018-9-17 10:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


單片機源程序如下:

  1. /***********************************************************************
  2. 名字:  main.c
  3. 作者:  春風  
  4. 創(chuàng)建日:2008-8-15
  5. 工程:  數(shù)控穩(wěn)壓電源  
  6. ***********************************************************************/

  7. #include"reg52.h"
  8. //#include"math.h"
  9. #include"stdlib.h"
  10. #include"function.h"


  11. sbit RS = P1^4;
  12. sbit RW = P1^5;
  13. sbit E  = P1^6;

  14. #define DBUS P0
  15. sbit clk_574_1 = P2^3;
  16. //sbit clk_574_2 = P1^3;
  17. //sbit lcd_rs    = P1^4;

  18. uint idac;
  19.        

  20. idata uchar GOUT[7];
  21. idata float temp1;
  22. idata float dac_temp;
  23. idata float sheding_temp;
  24. idata float sheding_temp1;
  25. char  code dx516[3] _at_ 0x003b;//這是為了仿真設置的(大蝦仿真器)

  26. /************************************************************************************
  27.                               把浮點數(shù)拆開存儲指針型數(shù)據(jù)  
  28.                                                           輸入浮點數(shù),方式0:設定值,1:檢測值  
  29. ************************************************************************************/
  30. void chai(float x,bit y)  
  31. {
  32.         uint i;
  33.         for(i = 0;i < 7;i ++)
  34.                 GOUT[i] = 0;
  35.         if(y == 0)
  36.         {
  37.                 i = x / 10;
  38.                 if(i == 0)
  39.                         GOUT[0] = ' ';
  40.                 else
  41.                         GOUT[0]        = i + '0';
  42.                 GOUT[1] = (int)x % 10 + '0';
  43.                 x = x * 10;
  44.                 GOUT[3] = (int)x % 10 + '0';

  45.                 x = x * 10;
  46.                 if(((int)x % 10) >= 5 )// 防止后面大于4的數(shù)被舍去  
  47.                 {GOUT[3] = GOUT[3] + 1;}
  48.                 else
  49.                 {;}

  50.                 GOUT[4] = ' ';
  51.                 GOUT[5] = ' ';
  52.         }
  53.         else
  54.         {
  55.                 i = x / 10;
  56.                 if(i == 0)
  57.                         GOUT[0] = ' ';
  58.                 else
  59.                         GOUT[0] = i + '0';
  60.                 GOUT[1] = (int)x % 10 + '0';
  61.                 x = x * 10;
  62.                 GOUT[3] = (int)x % 10 + '0';
  63.                 x = x * 10;
  64.                 GOUT[4] = (int)x % 10 + '0';
  65.                 x = (x * 10);
  66.                 GOUT[5] = (unsigned int)x % 10 + '0';
  67.         }
  68.         GOUT[2] =  '.';
  69.         GOUT[6] =  '\0';
  70. }

  71. /************************************************************************************

  72. //向LCM發(fā)送一個字符串,長度64字符之內。  

  73. ************************************************************************************/
  74. void lcm_w_word(uchar x,uchar y,uchar *str)
  75. {
  76.    x = x+y;
  77.    w_code(x);
  78.   while(*str != '\0')
  79.   {
  80.        w_data(*str++);
  81.    }
  82.   *str = 0;
  83. }
  84. /************************************************************************************
  85.                               顯示設定電壓  
  86. ************************************************************************************/
  87. void  disp_sheding()
  88. {
  89.     lcm_w_word(0x90,0x00,"設定:");
  90.     sheding_temp1 = sheding_temp + 0.0005;//------加0.0005修正有時顯示.0999
  91.         chai(sheding_temp1,1);  
  92.     lcm_w_word(0x90,3,GOUT);
  93.         w_code(0x96);
  94.     w_data('V');       
  95. }
  96. /************************************************************************************
  97.                  AD的16位整形數(shù)轉換成浮點電壓或電流值  
  98. ************************************************************************************/
  99. float adjisuan_U(uint x)
  100. {
  101.         temp1 = 11.990 / 0x5e1f;
  102.         temp1 = x * temp1;
  103.         return temp1;
  104. }

  105. float adjisuan_I(uint x)  //
  106. {
  107.         temp1 = 0.899 / 0x253d;
  108.         temp1 = (x * temp1)-0.005;
  109.         return temp1;
  110. }
  111. /************************************************************************************
  112. *
  113. *函數(shù)功能:輸入浮點數(shù)  
  114. *
  115. ************************************************************************************/
  116. float scanf_float(void)
  117. {
  118.         static uchar i = 0;
  119.         static uchar x[5] = {'0','0','0','0','0'};
  120.         static bit k = 1;
  121.         uchar temp1,temp2;
  122.         temp1 = key_sm();
  123.         temp2 = key_sm();
  124.         if((temp2 == 0xff) || (temp1 != temp2))
  125.         {
  126.                 k = 1;
  127.                 return(atof(x));
  128.         }
  129.         else if(k)
  130.         {
  131.                 k = 0;
  132.                 x[i] = temp1;
  133.                 i ++;
  134.                 if((temp1 == key_esc) || (i == 4))
  135.                 {
  136.                         x[0] = '0';
  137.                         x[1] = '0';
  138.                         x[2] = '0';
  139.                         x[3] = '0';
  140.                         x[4] = '0';
  141.                         i = 0;
  142.                 }
  143.                 return(atof(x));
  144.         }
  145. }

  146. /************************************************************************************

  147.                               掃描按鍵,并根據(jù)鍵值修改DAC的電壓  

  148. ************************************************************************************/
  149. void key_dac()
  150. {
  151.                 uchar key_qiao;
  152.            key_qiao = key_sm();
  153.         switch(key_sm())
  154.                 {
  155.         case key_shang:dac_temp = dac_temp + 1.0;break;//---按下上鍵電壓加1V
  156.         case key_xia  :dac_temp = dac_temp - 1.0;break;//---按下下鍵電壓減1
  157.         case key_zuo  :dac_temp = dac_temp - 0.1;break;//---按下左鍵電壓減0.1
  158.     case key_you  :dac_temp = dac_temp + 0.1;break;//---按下右鍵電壓加0.1
  159.     case key_0    :dac_temp = 0;             break;//---按下0鍵電壓歸0
  160.         default: key_qiao = 0xff;
  161.                  }
  162.                 if(key_qiao != 0xff)  //  10月1日 這里原來是0x00就讀AD不正常            
  163.                            {
  164.                        RS  =  1;                       
  165.                            RW  =  0;        //--------避免液晶屏干擾數(shù)據(jù)總線
  166.                            if(dac_temp < 0){dac_temp = 0;}        //----判斷電壓低于0大于30時把數(shù)據(jù)歸0
  167.                         if(dac_temp >= 30.10){dac_temp = 0;}       
  168.                         sheding_temp = dac_temp ;
  169.                         disp_sheding();
  170.                         idac = conver(dac_temp);  
  171.                           dac(idac);
  172.                         delay(50000);
  173.                         }
  174. }
  175. /************************************************************************************
  176.                                      主函數(shù)   
  177. ************************************************************************************/
  178. main()
  179. {

  180.                         lcd_rst(0);
  181.                         rst_ad();       
  182.                         dac_temp = 0 ;
  183.                        RS  =  1;                       
  184.                        RW  =  0;        //--------避免液晶屏干擾數(shù)據(jù)總線                 
  185.                              dac(conver(dac_temp));           //吸合低壓繼電器并輸出0V
  186.                        LED_ONOFF(1);//  打開背光源   
  187.                           set_7705_ch(0);
  188.                     read_AD_data(0x38);
  189.                     set_7705_ch(1);
  190.                     read_AD_data(0x39);

  191.                    disp_sheding();//顯示設定電壓   
  192.                    while(1)
  193.                    {
  194.                    lcm_w_word(0x80,0x02,"穩(wěn)壓電源");
  195.                    lcm_w_word(0x90,0x00,"設定:");                  
  196.                    lcm_w_word(0x88,0x00,"電壓:");   
  197.                    lcm_w_word(0x98,0x00,"電流:");
  198.                           
  199.                    write_ad(0x10);
  200.                write_ad(0x04);
  201.                    adjisuan_U(read_AD_data(0x38));
  202.                    chai(temp1,1);  
  203.            lcm_w_word(0x88,3,GOUT);
  204.                    key_dac();
  205. ……………………

  206. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
數(shù)控穩(wěn)壓電源程序.rar (86.33 KB, 下載次數(shù): 241)
0-30V 4A數(shù)控穩(wěn)壓電源圖.pdf (68.11 KB, 下載次數(shù): 301)




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

使用道具 舉報

沙發(fā)
ID:450548 發(fā)表于 2019-1-2 19:01 | 只看該作者
這么好的資料,怎么沒人頂啊,樓主再上幾張測試圖片。
回復

使用道具 舉報

板凳
ID:588322 發(fā)表于 2019-8-4 20:06 | 只看該作者
好資料,下載研究
回復

使用道具 舉報

地板
ID:601757 發(fā)表于 2019-8-28 19:08 | 只看該作者
板子做的比我漂亮
回復

使用道具 舉報

5#
ID:629626 發(fā)表于 2019-11-6 19:25 | 只看該作者
很好啊
回復

使用道具 舉報

6#
ID:3666 發(fā)表于 2019-12-5 16:19 | 只看該作者
必需要頂?shù)?/td>
回復

使用道具 舉報

7#
ID:673647 發(fā)表于 2019-12-26 13:49 | 只看該作者
很好的東西,謝謝分享!
回復

使用道具 舉報

8#
ID:679350 發(fā)表于 2020-1-2 09:23 | 只看該作者
非常棒的東西!
回復

使用道具 舉報

9#
ID:27825 發(fā)表于 2020-1-13 16:33 來自手機 | 只看該作者
下來試一試
回復

使用道具 舉報

10#
ID:8222 發(fā)表于 2020-1-17 21:53 | 只看該作者
很好,非常感謝分享。
回復

使用道具 舉報

11#
ID:689425 發(fā)表于 2020-2-4 17:53 | 只看該作者
已下載,謝謝樓主
回復

使用道具 舉報

12#
ID:72011 發(fā)表于 2020-2-10 06:50 | 只看該作者
很好,非常感謝分享。
回復

使用道具 舉報

13#
ID:345173 發(fā)表于 2020-2-19 14:36 | 只看該作者
板子做的漂亮,學習一下。
回復

使用道具 舉報

14#
ID:695751 發(fā)表于 2020-2-20 17:28 | 只看該作者
謝謝分享!
回復

使用道具 舉報

15#
ID:703081 發(fā)表于 2020-3-7 21:49 來自手機 | 只看該作者
電流可以調嗎
回復

使用道具 舉報

16#
ID:224578 發(fā)表于 2021-5-19 12:11 | 只看該作者
暫時還看不懂
回復

使用道具 舉報

17#
ID:932479 發(fā)表于 2021-6-4 13:59 | 只看該作者
好厲害啊,不明覺厲
回復

使用道具 舉報

18#
ID:138707 發(fā)表于 2021-8-11 13:04 | 只看該作者
很厲害,高手。
回復

使用道具 舉報

19#
ID:73370 發(fā)表于 2021-9-8 14:15 | 只看該作者
TIP41原理圖封裝不對吧?是N管,不是P管
另外 D9、D10好像沒什么用啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表