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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+LM2596數控穩壓電源源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發表于 2016-10-11 20:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
主要器件:

使用LCD1602顯示
電源可調模塊用到LM2596
模數轉換ADC0832

主要功能:
理論電壓范圍 1.25V~40V
電壓、電流顯示
短路保護電路

資料下載:
LM2596 數控電源.rar (2.1 KB, 下載次數: 771)


源程序:
  1. #include"reg52.h"
  2. #include<stdio.h>
  3. #include <intrins.h>

  4. typedef  unsigned char uchar;
  5. typedef  unsigned int uint;


  6. #define LCD_Data P0
  7. #define Busy    0x80 //用于檢測LCD狀態字中的Busy標識

  8. sbit ADC0832_CLK = P1^5;
  9. sbit ADC0832_DODI = P1^6;
  10. sbit ADC0832_CS = P1^7;

  11. sbit LCD_RS=P2^7;//定義引腳
  12. sbit LCD_RW=P2^6;
  13. sbit LCD_E=P2^5;

  14. float volts,amps;

  15. //5ms延時
  16. void Delay5Ms(void)
  17. {
  18.     unsigned int TempCyc = 5552;
  19.     while(TempCyc--);
  20. }

  21. //400ms延時
  22. void Delay400Ms(void)
  23. {
  24.     unsigned char TempCycA = 5;
  25.     unsigned int TempCycB;
  26.     while(TempCycA--)
  27.     {
  28.         TempCycB=7269;
  29.         while(TempCycB--);
  30.     };
  31. }

  32. //讀狀態
  33. unsigned char ReadStatusLCD(void)
  34. {
  35.     LCD_Data = 0xFF;
  36.     LCD_RS = 0;
  37.     LCD_RW = 1;
  38.     LCD_E = 0;
  39.     LCD_E = 0;
  40.     LCD_E = 1;
  41.     while (LCD_Data & Busy); //檢測忙信號
  42.     return(LCD_Data);
  43. }

  44. //寫數據
  45. void WriteDataLCD(unsigned char WDLCD)
  46. {
  47.     ReadStatusLCD(); //檢測忙
  48.     LCD_Data = WDLCD;
  49.     LCD_RS = 1;
  50.     LCD_RW = 0;
  51.     LCD_E = 0; //若晶振速度太高可以在這后加小的延時
  52.     LCD_E = 0; //延時
  53.     LCD_E = 1;
  54. }

  55. //寫指令
  56. void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時忽略忙檢測
  57. {
  58.     if (BuysC) ReadStatusLCD(); //根據需要檢測忙
  59.     LCD_Data = WCLCD;
  60.     LCD_RS = 0;
  61.     LCD_RW = 0;
  62.     LCD_E = 0;
  63.     LCD_E = 0;
  64.     LCD_E = 1;
  65. }

  66. //讀數據
  67. unsigned char ReadDataLCD(void)
  68. {
  69.     LCD_RS = 1;
  70.     LCD_RW = 1;
  71.     LCD_E = 0;
  72.     LCD_E = 0;
  73.     LCD_E = 1;
  74.     return(LCD_Data);
  75. }

  76. void LCDInit(void) //LCM初始化
  77. {
  78.     LCD_Data = 0;
  79.     WriteCommandLCD(0x38,0); //三次顯示模式設置,不檢測忙信號
  80.     Delay5Ms();
  81.     WriteCommandLCD(0x38,0);
  82.     Delay5Ms();
  83.     WriteCommandLCD(0x38,0);
  84.     Delay5Ms();
  85.    
  86.     WriteCommandLCD(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
  87.     WriteCommandLCD(0x08,1); //關閉顯示
  88.     WriteCommandLCD(0x01,1); //顯示清屏
  89.     WriteCommandLCD(0x06,1); // 顯示光標移動設置
  90.     WriteCommandLCD(0x0C,1); // 顯示開及光標設置
  91. }

  92. //按指定位置顯示一個字符
  93. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  94. {
  95.     Y &= 0x1;
  96.     X &= 0xF; //限制X不能大于15,Y不能大于1
  97.     if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
  98.     X |= 0x80; // 算出指令碼
  99.     WriteCommandLCD(X, 0); //這里不檢測忙信號,發送地址碼
  100.     WriteDataLCD(DData);
  101. }

  102. //按指定位置顯示一串字符
  103. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  104. {
  105.     unsigned char ListLength;
  106.    
  107.     ListLength = 0;
  108.     Y &= 0x1;
  109.     X &= 0xF; //限制X不能大于15,Y不能大于1
  110.     while (DData[ListLength]>=0x20) //若到達字串尾則退出
  111.     {
  112.         if (X <= 0xF) //X坐標應小于0xF
  113.      {
  114.             DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
  115.             ListLength++;
  116.          X++;
  117.      }
  118.     }
  119. }

  120. //讀取ADC0832轉換值函數
  121. //入口函數:channel選擇通道
  122. uchar ADC0832_Read(uchar channel)
  123. {
  124.     uchar i = 0;   
  125.     uchar tmp = 0;  //高字節數據
  126.     uchar tmp1 = 0; //低字節數據

  127.    
  128.     //開始標志位
  129.     ADC0832_DODI = 1;
  130.     _nop_();  _nop_();

  131.     ADC0832_CS = 0;     //片選信號  

  132.     ADC0832_CLK = 1;
  133.     _nop_();  _nop_();
  134.     ADC0832_CLK = 0;
  135.     _nop_();  _nop_();

  136.     //選擇通道
  137.     switch(channel)
  138.     {
  139.         case 0:     //通道0
  140.             ADC0832_DODI = 1;   //SGL = 1;
  141.             _nop_();  _nop_();
  142.             ADC0832_CLK = 1;
  143.             _nop_();  _nop_();
  144.             ADC0832_CLK = 0;
  145.             _nop_();  _nop_();

  146.             ADC0832_DODI = 0;   //ODD = 0;
  147.             _nop_();  _nop_();
  148.             ADC0832_CLK = 1;
  149.             _nop_();  _nop_();
  150.             ADC0832_CLK = 0;
  151.             _nop_();  _nop_();
  152.             break;

  153.         case 1:     //通道1
  154.             ADC0832_DODI = 1;   //SGL = 1;
  155.             _nop_();  _nop_();
  156.             ADC0832_CLK = 1;
  157.             _nop_();  _nop_();
  158.             ADC0832_CLK = 0;
  159.             _nop_();  _nop_();

  160.             ADC0832_DODI = 1;   //ODD = 1;
  161.             _nop_();  _nop_();
  162.             ADC0832_CLK = 1;
  163.             _nop_();  _nop_();
  164.             ADC0832_CLK = 0;
  165.             _nop_();  _nop_();
  166.             break;
  167.          
  168.         default:
  169.             break;   
  170.     }

  171.     ADC0832_DODI = 1;
  172.     _nop_();  _nop_();

  173.     //讀取8位轉換數值
  174.     for(i=0;i<8;i++)
  175.     {
  176.         ADC0832_CLK = 1;
  177.         _nop_();  _nop_();
  178.         ADC0832_CLK = 0;
  179.         _nop_();  _nop_();

  180.         if(ADC0832_DODI)
  181.         {
  182.             tmp |= 0x01;   
  183.         }
  184.         else
  185.         {
  186.             tmp &= 0xfe;
  187.         }
  188.         if(i<7)
  189.         {
  190.             tmp <<= 1;
  191.         }         
  192.     }

  193.     tmp1 =  tmp & 0x01;
  194.     tmp1 <<= 6;

  195.     for(i=0;i<7;i++)
  196.     {
  197.         ADC0832_CLK = 1;
  198.         _nop_();  _nop_();
  199.         ADC0832_CLK = 0;
  200.         _nop_();  _nop_();

  201.         if(ADC0832_DODI)
  202.         {
  203.             tmp1 |= 0x80;
  204.         }
  205.         else
  206.         {
  207.             tmp1 &= 0x7f;
  208.         }
  209.         if(i<6)
  210.         {
  211.             tmp1 >>= 1;
  212.         }   
  213.     }

  214.     ADC0832_CS = 1;

  215.     if(tmp == tmp1) //當高字節與低字節相同時,該值有效
  216.     {
  217.         return tmp; //返回數值
  218.     }
  219. }

  220. void DisPlayValue(uint volts,uint amps)
  221. {
  222.     DisplayOneChar(0,0,'U');
  223.     DisplayOneChar(1,0,'=');
  224.     if(volts/10000 == 0)
  225.     {
  226.         DisplayOneChar(2,0,'0' + (volts/1000%10));
  227.         DisplayOneChar(3,0,'.');
  228.         DisplayOneChar(4,0,'0' + (volts/100%10));
  229.         DisplayOneChar(5,0,'0' + (volts/10%10));
  230.         DisplayOneChar(6,0,'0' + (volts%10));
  231.         DisplayOneChar(7,0,' ');
  232.         DisplayOneChar(8,0,'V');
  233.         DisplayOneChar(9,0,' ');
  234.     }
  235.     else
  236.     {
  237.         DisplayOneChar(2,0,'0' + (volts/10000));
  238.         DisplayOneChar(3,0,'0' + (volts/1000%10));
  239.         DisplayOneChar(4,0,'.');
  240.         DisplayOneChar(5,0,'0' + (volts/100%10));
  241.         DisplayOneChar(6,0,'0' + (volts/10%10));
  242.         DisplayOneChar(7,0,'0' + (volts%10));
  243.         DisplayOneChar(8,0,' ');
  244.         DisplayOneChar(9,0,'V');
  245.     }
  246.      
  247.     DisplayOneChar(0,1,'I');
  248.     DisplayOneChar(1,1,'=');
  249.     DisplayOneChar(2,1,'0' + (amps/1000));
  250.     DisplayOneChar(3,1,'.');
  251.     DisplayOneChar(4,1,'0' + (amps/100%10));
  252.     DisplayOneChar(5,1,'0' + (amps/10%10));
  253.     DisplayOneChar(6,1,'0' + (amps/1%10));
  254.     DisplayOneChar(7,1,' ');
  255.     DisplayOneChar(8,1,'A');         
  256. }

  257. void GetValue(void)
  258. {
  259.     uchar tmp,i;
  260.     uint ntmp;

  261.     for(i=0;i<10;i++)
  262.     {
  263.         tmp = ADC0832_Read(0);
  264.         ntmp += tmp;
  265.     }

  266.     volts = (ntmp/10)*0.1137*1000;
  267.     Delay5Ms();
  268.     ntmp = 0;

  269.     for(i=0;i<20;i++)
  270.     {
  271.         tmp = ADC0832_Read(1);
  272.         ntmp += tmp;
  273.     }

  274.     amps = (ntmp/20)*0.0196*1000;
  275.     Delay5Ms();

  276.     DisPlayValue(volts,amps);

  277. }

  278. void main(void)
  279. {
  280.     Delay400Ms(); //啟動等待,等LCD講入工作狀態
  281.     LCDInit(); //LCM初始化
  282.     Delay5Ms(); //延時片刻(可不要)

  283.     ReadDataLCD();//測試用句無意義

  284.     while(1)
  285.     {
  286.         GetValue();
  287.     }
  288. }
復制代碼


評分

參與人數 2黑幣 +10 收起 理由
vvv64 + 5 回帖助人的獎勵!
隨易而安 + 5 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:142450 發表于 2016-10-12 16:31 | 只看該作者
沒原理圖?
回復

使用道具 舉報

板凳
ID:94489 發表于 2016-10-12 21:34 | 只看該作者
沒原理圖?
回復

使用道具 舉報

地板
ID:143386 發表于 2016-10-19 11:59 | 只看該作者
不錯 學習學習
回復

使用道具 舉報

5#
ID:135781 發表于 2016-11-3 18:48 | 只看該作者
為什么我的幣總是不夠的?
回復

使用道具 舉報

6#
ID:156204 發表于 2016-12-20 13:33 | 只看該作者
回復

使用道具 舉報

7#
ID:151661 發表于 2016-12-20 16:17 | 只看該作者
51黑有你更精彩
回復

使用道具 舉報

8#
ID:155317 發表于 2016-12-21 16:04 | 只看該作者
正需要啊。學習中
回復

使用道具 舉報

9#
ID:156689 發表于 2016-12-21 22:26 | 只看該作者
挺好噠~~~
回復

使用道具 舉報

10#
ID:135369 發表于 2016-12-22 07:58 來自手機 | 只看該作者
前一段時間購買了XL4016,做大功率數控電源,原理同上,
回復

使用道具 舉報

11#
ID:162913 發表于 2017-1-25 09:27 | 只看該作者
一直在尋找這個,終于找到了 ,下載學習中...........
回復

使用道具 舉報

12#
ID:158622 發表于 2017-4-5 22:04 | 只看該作者
怎么不能生成HEX
回復

使用道具 舉報

13#
ID:165180 發表于 2017-4-6 13:22 | 只看該作者
沒原理圖,沒什么意思!!!
回復

使用道具 舉報

14#
ID:199061 發表于 2017-5-10 20:55 | 只看該作者
理論電流輸出是多少?還有U2的那兩個集成運放是干什么的?
回復

使用道具 舉報

15#
ID:227981 發表于 2017-8-16 22:29 | 只看該作者
厲害,學習學習!
回復

使用道具 舉報

16#
ID:246491 發表于 2017-11-18 11:30 | 只看該作者
一直在尋找此類作品,正好學習一下知識
回復

使用道具 舉報

17#
ID:232205 發表于 2017-12-9 17:52 | 只看該作者
厲害,學習學習!
回復

使用道具 舉報

18#
ID:140964 發表于 2018-3-9 09:56 | 只看該作者
謝謝分享,急需
這樣的例程
回復

使用道具 舉報

19#
ID:341246 發表于 2018-6-11 07:58 | 只看該作者
謝謝分享,收藏了
回復

使用道具 舉報

20#
ID:76087 發表于 2018-6-26 23:11 | 只看該作者
只有電壓采集 ,沒有調整輸出的功能啊
回復

使用道具 舉報

21#
ID:7503 發表于 2018-6-27 08:12 | 只看該作者
正需要,謝謝樓主分享
回復

使用道具 舉報

22#
ID:245004 發表于 2018-7-5 22:35 | 只看該作者
電壓顯示,沒有單片機調壓,想做一個調壓的
回復

使用道具 舉報

23#
ID:245004 發表于 2018-7-5 22:48 | 只看該作者
5swords 發表于 2016-12-20 13:33
原理圖在此http://www.zg4o1577.cn/bbs/dpj-56592-1.html

不配套,可互補;
這個是顯示,那個是調壓。
回復

使用道具 舉報

24#
ID:155299 發表于 2018-7-9 22:33 | 只看該作者
挺好的,學習下
回復

使用道具 舉報

25#
ID:222880 發表于 2018-9-4 17:40 | 只看該作者
正需要,學習下
回復

使用道具 舉報

26#
ID:222880 發表于 2018-9-4 17:42 | 只看該作者
正需要,謝謝樓主分享
回復

使用道具 舉報

27#
ID:70432 發表于 2018-10-8 14:11 | 只看該作者
參考一下,謝謝樓主
回復

使用道具 舉報

28#
ID:418213 發表于 2018-11-4 23:24 | 只看該作者
謝謝分享。
回復

使用道具 舉報

29#
ID:430715 發表于 2018-11-21 18:16 | 只看該作者
感謝,非常感謝,號
回復

使用道具 舉報

30#
ID:487024 發表于 2019-3-8 17:31 | 只看該作者
學習一下。
回復

使用道具 舉報

31#
ID:420564 發表于 2019-6-3 16:05 | 只看該作者
學習了,謝謝樓主分享
回復

使用道具 舉報

32#
ID:76087 發表于 2019-6-12 02:30 | 只看該作者
恩,這個代碼,是純ADC采樣顯示,沒有數控的功能.
回復

使用道具 舉報

33#
ID:380985 發表于 2019-7-16 23:10 來自手機 | 只看該作者
坑了唄,就一個點c文件
回復

使用道具 舉報

34#
ID:520939 發表于 2019-11-18 22:25 | 只看該作者
坑了唄,就一個點c文件
回復

使用道具 舉報

35#
ID:629626 發表于 2019-11-24 20:57 | 只看該作者
有圖嗎?
回復

使用道具 舉報

36#
ID:546589 發表于 2019-11-24 22:41 | 只看該作者
受益匪淺
回復

使用道具 舉報

37#
ID:661942 發表于 2019-12-11 21:24 | 只看該作者
非常感謝提供 這個!
回復

使用道具 舉報

38#
ID:128989 發表于 2021-5-1 09:25 | 只看該作者
不錯的數控電源
回復

使用道具 舉報

39#
ID:163501 發表于 2021-6-13 13:01 來自手機 | 只看該作者
xiaoer 發表于 2016-12-22 07:58
前一段時間購買了XL4016,做大功率數控電源,原理同上,

可以分享一下嗎?謝謝你
回復

使用道具 舉報

40#
ID:688460 發表于 2023-3-26 16:10 | 只看該作者

樓主這里有個LM2596數控電源的程序希望能幫到你:http://www.zg4o1577.cn/bbs/dpj-56600-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产1区2区在线观看 | 国产一区在线免费观看视频 | 国产情侣久久 | 国产精品亚洲综合 | 久免费视频 | 999精品在线观看 | 国产男女猛烈无遮掩视频免费网站 | 99九九视频| 亚洲男人的天堂网站 | 琪琪午夜伦伦电影福利片 | 狠狠操电影 | 黄色av免费 | www.玖玖玖 | 欧美成年人网站 | 隔壁老王国产在线精品 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | a天堂在线| 国产精品美女久久久久aⅴ国产馆 | 亚洲精品免费视频 | 亚洲精品一区二区 | 中文字幕在线第二页 | 日本久久精品视频 | 黄网站在线播放 | 人人草人人干 | 日韩精品免费视频 | 国产亚洲人成a在线v网站 | 四虎网站在线观看 | 日韩免费一区二区 | 91网站视频在线观看 | 国产良家自拍 | 国产目拍亚洲精品99久久精品 | 天天干天天色 | 色吊丝在线 | 欧美成人a∨高清免费观看 91伊人 | 97超碰人人草| 99riav3国产精品视频 | 中文在线a在线 | 欧美中文字幕一区二区三区亚洲 | 亚洲中午字幕 | 最近日韩中文字幕 | 日韩一区在线播放 |