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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數控穩壓電源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:834162 發表于 2021-4-12 09:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include"reg52.h"
  2. //#include"math.h"
  3. #include"stdlib.h"
  4. #include"function.h"


  5. sbit RS = P1^4;
  6. sbit RW = P1^5;
  7. sbit E  = P1^6;

  8. #define DBUS P0
  9. sbit clk_574_1 = P2^3;
  10. //sbit clk_574_2 = P1^3;
  11. //sbit lcd_rs    = P1^4;

  12. uint idac;
  13.         

  14. idata uchar GOUT[7];
  15. idata float temp1;
  16. idata float dac_temp;
  17. idata float sheding_temp;
  18. idata float sheding_temp1;
  19. char  code dx516[3] _at_ 0x003b;//這是為了仿真設置的(大蝦仿真器)

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

  39.                 x = x * 10;
  40.                 if(((int)x % 10) >= 5 )// 防止后面大于4的數被舍去  
  41.                 {GOUT[3] = GOUT[3] + 1;}
  42.                 else
  43.                 {;}

  44.                 GOUT[4] = ' ';
  45.                 GOUT[5] = ' ';
  46.         }
  47.         else
  48.         {
  49.                 i = x / 10;
  50.                 if(i == 0)
  51.                         GOUT[0] = ' ';
  52.                 else
  53.                         GOUT[0] = i + '0';
  54.                 GOUT[1] = (int)x % 10 + '0';
  55.                 x = x * 10;
  56.                 GOUT[3] = (int)x % 10 + '0';
  57.                 x = x * 10;
  58.                 GOUT[4] = (int)x % 10 + '0';
  59.                 x = (x * 10);
  60.                 GOUT[5] = (unsigned int)x % 10 + '0';
  61.         }
  62.         GOUT[2] =  '.';
  63.         GOUT[6] =  '\0';
  64. }

  65. /************************************************************************************

  66. //向LCM發送一個字符串,長度64字符之內。  

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

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

  140. /************************************************************************************

  141.                               掃描按鍵,并根據鍵值修改DAC的電壓  

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

  174.                         lcd_rst(0);
  175.                         rst_ad();        
  176.                         dac_temp = 0 ;
  177.                        RS  =  1;                        
  178.                        RW  =  0;        //--------避免液晶屏干擾數據總線                  
  179.                              dac(conver(dac_temp));           //吸合低壓繼電器并輸出0V
  180.                        LED_ONOFF(1);//  打開背光源   
  181.                           set_7705_ch(0);
  182.                     read_AD_data(0x38);
  183.                     set_7705_ch(1);
  184.                     read_AD_data(0x39);

  185.                    disp_sheding();//顯示設定電壓   
  186.                    while(1)
  187.                    {
  188.                    lcm_w_word(0x80,0x02,"穩壓電源");
  189.                    lcm_w_word(0x90,0x00,"設定:");                  
  190.                    lcm_w_word(0x88,0x00,"電壓:");   
  191.                    lcm_w_word(0x98,0x00,"電流:");
  192.                            
  193.                    write_ad(0x10);
  194.                write_ad(0x04);
  195.                    adjisuan_U(read_AD_data(0x38));
  196.                    chai(temp1,1);  
  197.            lcm_w_word(0x88,3,GOUT);
  198.                    key_dac();

  199.                    write_ad(0x11);
  200.                write_ad(0x14);
  201.                    adjisuan_I(read_AD_data(0x39));
  202.                    chai(temp1,1);  
  203.            lcm_w_word(0x98,3,GOUT);
  204.                    key_dac();
  205.                   
  206.                    }
  207.                                                                                                                                              
  208. }

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看一区二区三区 | 国产精品伦理一区 | 国产精品久久久久久久久久久久久 | www日日日| 亚洲经典一区 | 中文字幕在线精品 | 精品久久久久久亚洲综合网站 | 韩日三级| 日韩午夜电影在线观看 | 99精品久久久 | 国产精品一区一区三区 | a视频在线观看 | 国产精品成人久久久久 | a级毛片免费高清视频 | 成人免费视频观看 | 欧美日韩精品久久久免费观看 | 欧美日韩国产一区二区三区 | 作爱视频免费看 | 中文字幕精品一区二区三区精品 | 第一av| 久久激情视频 | 亚洲国产成人精品一区二区 | 欧产日产国产精品国产 | 欧美精品在线观看 | 久久av一区二区 | 欧美激情一区二区三区 | 黄色片网此 | 黑人精品欧美一区二区蜜桃 | 夜夜草导航 | 欧美一区二区在线播放 | 国产精品美女久久久久久免费 | 国产成人免费视频 | 91av免费版| 日本特黄a级高清免费大片 成年人黄色小视频 | 五月天婷婷激情 | 极品国产视频 | 亚洲精品福利在线 | 久久久亚洲一区 | 97avcc | 成人二区 | 久久精品二区亚洲w码 |