找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8382|回复: 6
收起左侧

51单片机TLC5615数控直流稳压电源仿真+源代码分享

  [复制链接]
ID:396513 发表于 2018-9-19 22:24 | 显示全部楼层 |阅读模式
调试好了 数码管显示 直接能用的代码

TLC5615 ad芯片和单片机构成的的数控直流稳压电源仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
QQ截图20180919221912.png

电路细节部分:
0.png

0.png

单片机源程序如下:
  1. #include <reg52.h>//头文件
  2. #include <intrins.h>


  3. #define uchar unsigned char//宏定义
  4. #define uint unsigned int//宏定义

  5. sbit  SCLK=P2^1;//TLC5615时钟线
  6. sbit  CS=P2^2;//TLC5615片选
  7. sbit  DIN=P2^0;//TLC5615数据线
  8. sbit  led = P3^7;        
  9. sbit  led1 = P3^6;
  10. sbit  ADDKEY=P3^0;
  11. sbit  SUBKEY=P3^1;
  12. sbit  ADDKEY1=P3^2;
  13. sbit  SUBKEY1=P3^3;
  14. sbit  S0=P3^4;
  15. sbit  S1=P2^3;
  16. sbit  S2=P3^5;
  17. sbit  S0V=P1^0;
  18. sbit  S5V=P1^1;
  19. sbit  S10V=P1^2;
  20. sbit  S12V=P1^3;
  21. sbit  S15V=P1^4;
  22. sbit  S20V=P1^5;
  23. sbit  S24V=P1^6;
  24. sbit  S30V=P1^7;

  25. sbit COM4=P2^7;
  26. sbit COM3=P2^6;
  27. sbit COM2=P2^5;
  28. sbit COM1=P2^4;

  29. unsigned char st=0;

  30. unsigned int SetData=00;

  31. unsigned char bai=0,shi=0,ge=0;

  32. code unsigned int VData1[201]=        //输出电压对应的DA值
  33. {0,5,9,14,18,23,27,32,36,41,45,//0-1.0
  34. 50,54,59,63,68,72,77,81,86,90,//1.1-2.0
  35. 95,99,104,108,113,118,122,127,131,136,//2.1-3.0
  36. 140,145,149,154,158,163,167,172,176,181,//3.1-4.0
  37. 185,190,194,199,203,208,213,217,222,226,//4.1-5.0
  38. 231,235,240,244,249,253,258,262,267,271,//5.1-6.0
  39. 276,280,285,289,294,298,303,308,312,317,//6.1-7.0
  40. 321,326,330,335,339,344,348,353,357,362,//7.1-8.0
  41. 366,371,375,380,384,389,393,398,402,407,//8.1-9.0
  42. 412,416,421,425,430,434,439,443,448,452,//9.1-10.0
  43. 457,461,466,470,475,479,483,488,492,497,//10.1-11.0
  44. 501,506,510,515,519,523,528,532,537,541,//11.1-12.0
  45. 546,550,556,560,565,569,573,577,583,586,//12.0-13.0
  46. 591,595,600,604,609,613,618,622,627,631,//13.1-14.0
  47. 636,640,645,649,654,658,663,667,672,676,//14.1-15.0
  48. 681,685,690,694,699,703,708,713,717,722,//15.1-16.0
  49. 727,731,736,740,745,749,754,759,763,767,//16.1-17.0
  50. 771,776,780,785,790,794,799,804,809,814,//17.1-18.0
  51. 818,825,829,834,839,844,849,854,858,864,//18.1-19.0
  52. 870,874,879,883,888,892,897,901,906,910//19.1-20.0
  53. };

  54. code unsigned int VData[341]=        //输出电压对应的DA值
  55. {0,3,6,9,12,15,18,21,24,27,30,//0-1.0
  56. 33,36,39,42,45,48,51,54,57,60,//1.1-2.0
  57. 63,66,69,72,75,78,81,84,87,90,//2.1-3.0
  58. 93,96,99,102,105,108,111,114,117,120,//3.1-4.0
  59. 123,126,129,132,135,138,141,144,147,150,//4.1-5.0
  60. 153,156,159,162,165,168,171,174,177,180,//5.1-6.0
  61. 183,186,189,192,195,198,201,204,207,210,//6.1-7.0
  62. 213,216,219,222,225,228,231,234,237,240,//7.1-8.0
  63. 243,246,249,252,255,258,261,264,267,270,//8.1-9.0
  64. 273,276,279,282,285,288,291,294,297,300,//9.1-10.0
  65. 303,306,309,312,315,318,321,324,327,330,//10.1-11.0
  66. 333,336,339,342,345,348,351,354,357,360,//11.0-12.0
  67. 363,366,369,372,375,378,381,384,387,390,//12.1-13.0
  68. 393,396,399,402,405,408,411,414,417,420,//13.1-14.0
  69. 423,426,429,432,435,438,441,444,447,450,//14.1-15.0
  70. 453,456,459,462,465,468,471,474,477,480,//15.1-16.0
  71. 483,486,489,492,495,498,501,504,507,510,//16.1-17.0
  72. 513,516,519,522,525,528,531,534,537,540,//17.1-18.0
  73. 543,546,549,552,555,558,561,564,567,570,//18.1-19.0
  74. 573,576,579,582,585,588,591,594,597,600,//19.1-20.0
  75. 603,606,609,612,615,618,621,624,627,630,//20.1-21.0
  76. 633,636,639,642,645,648,651,654,657,660,//21.1-22.0
  77. 663,666,669,672,675,678,681,684,687,690,//22.1-23.0
  78. 693,696,699,702,705,708,711,714,717,720,//23.1-24.0
  79. 723,726,729,732,735,738,741,744,747,750,//24.1-25.0
  80. 753,756,759,762,765,768,771,774,777,780,//25.1-26.0
  81. 783,786,789,792,795,798,801,804,807,810,//26.1-27.0
  82. 813,816,819,822,825,828,831,834,837,840,//27.1-28.0
  83. 843,846,849,852,855,858,861,864,867,870,//28.1-29.0
  84. 873,876,879,882,885,888,891,894,897,900,//29.1-30.0
  85. 903,906,909,912,905,908,911,914,917,910,//30.1-31.0
  86. 913,916,919,922,925,928,931,934,937,940,//31.1-32.0
  87. 943,946,949,952,955,958,961,964,967,970,//32.1-33.0
  88. 973,976,979,982,985,988,991,994,997,999//33.1-34.0
  89. };

  90. //*********************************共阴*******************************//
  91. unsigned char code DSYC[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x3e};
  92. unsigned char code DSYC1[]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x3e};
  93. /*****************************************************/
  94. void DAConvert(uint Data) //DAC转换程序
  95. {
  96.   uchar i;
  97.   Data<<=6;//数据左移6位,右边对齐
  98.   SCLK=0;
  99.   CS=0;
  100.   for (i=0;i<12;i++)//
  101.   {
  102.     if(Data&0x8000)
  103.           DIN=1;
  104.     else DIN=0;
  105.     SCLK=1;  
  106.     Data<<=1;
  107.     SCLK=0;
  108.   }  
  109.   CS=1;
  110. }

  111. void delayms(uint ms)                 //延时xx毫秒
  112. {
  113.          uchar i;
  114.         while(ms--)
  115.         {
  116.                  for(i=0;i<120;i++);
  117.         }
  118. }

  119. void Timer0() interrupt 1
  120. {
  121.          TH0  = (65535-500)/256;
  122.         TL0  = (65535-500)%256;
  123.         switch(st)
  124.    {
  125.       case 0:  st=1;COM1=1;COM2=1;COM3=1;COM4=1;P0=DSYC1[bai];COM1=0;break;
  126.       case 1:  st=2;COM1=1;COM2=1;COM3=1;COM4=1;P0=DSYC[shi]|0x80;COM2=0;break;
  127.       case 2:  st=3;COM1=1;COM2=1;COM3=1;COM4=1;P0=DSYC[ge];COM3=0;break;
  128.       case 3:  st=0;COM1=1;COM2=1;COM3=1;COM4=1;P0=DSYC[10];COM4=0;break;
  129.    }
  130. }



  131. /*****************************************************/
  132. void main(void)
  133. {
  134.         unsigned int temp=0;

  135.         delayms(100);

  136.    TMOD = 0x01;
  137.         TH0  = (65535-1000)/256;
  138.         TL0  = (65535-1000)%256;
  139.         EA=1;
  140.         ET0=1;
  141.         TR0=1;

  142.         DAConvert(VData[00]);
  143.         SetData=00;
  144.         bai=SetData/100;
  145.         shi=SetData%100/10;
  146.         ge=SetData%10;
  147.         
  148.         while(1)
  149.         {
  150.                 if(ADDKEY==0)
  151.                 {
  152.                         delayms(20);
  153.                         if(ADDKEY==0)        
  154.                         {
  155.                                 if(SetData<300) SetData++;
  156.                                 DAConvert(VData[SetData]);
  157.                                 bai=SetData/100;
  158.                                 shi=SetData%100/10;
  159.                                 ge=SetData%10;
  160.                         }
  161.                         while(ADDKEY==0);
  162.                 }
  163. if(ADDKEY1==0)
  164.                 {
  165.                         delayms(20);
  166.                         if(ADDKEY1==0)        
  167.                         {
  168.                                 if(SetData<300) SetData+=10;
  169.                                 DAConvert(VData[SetData]);
  170.                                 bai=SetData/100;
  171.                                 shi=SetData%100/10;
  172.                                 ge=SetData%10;
  173.                         }
  174.                         while(ADDKEY1==0);
  175.                 }
  176.                 if(SUBKEY==0)
  177.                 {
  178.                         delayms(20);
  179.                         if(SUBKEY==0)        
  180.                         {
  181.                                 if(SetData>0) SetData--;
  182.                                 DAConvert(VData[SetData]);
  183.                                 bai=SetData/100;
  184.                                 shi=SetData%100/10;
  185.                                 ge=SetData%10;
  186.                         }
  187.                         while(SUBKEY==0);
  188.                 }
  189.         if(SUBKEY1==0)
  190.                 {
  191.                         delayms(20);
  192.                         if(SUBKEY1==0)        
  193.                         {
  194.                                 if(SetData>9) SetData-=10;
  195.                                 DAConvert(VData[SetData]);
  196.                                 bai=SetData/100;
  197.                                 shi=SetData%100/10;
  198.                                 ge=SetData%10;
  199.                         }
  200.                         while(SUBKEY1==0);
  201.                 }        
  202.         
  203.         
  204.                 if(S0==0)
  205.                 {
  206.                         delayms(20);
  207.                         if(S0==0)        
  208.                         {
  209.                         led=0;
  210.             led1=0;
  211.             delayms(100);
  212.             led1=1;
  213.                         }
  214.                         while(S0==0);                                                
  215.                 }
  216.               if(S1==0)
  217.                 {
  218.                         delayms(20);
  219.                         if(S1==0)        
  220.                         {
  221.                         led=1;
  222.             led1=0;
  223.             delayms(300);
  224.             led1=1;
  225.             delayms(200);
  226.              led1=0;
  227.             delayms(300);
  228.             led1=1;
  229.             delayms(200);
  230.             led1=0;
  231.             delayms(300);
  232.             led1=1;
  233.             delayms(200);
  234.              led1=0;
  235.             delayms(300);
  236.             led1=1;
  237.             delayms(200);
  238.             led1=0;
  239.             delayms(300);
  240.             led1=1;
  241.             
  242.            
  243.                         }
  244.                         while(S1==0);
  245.                 }
  246.           if(S2==0)
  247.                 {
  248.                         delayms(20);
  249.                         if(S2==0)        
  250.                         {
  251.                         led=1;
  252.                 led1=0;
  253.             delayms(500);
  254.             led1=1;
  255.            
  256.                         }
  257.                         while(S2==0);
  258.                 }
  259.         if(S0V==0)
  260.                 {
  261.                         delayms(20);
  262.                         if(S0V==0)        
  263.                         {
  264.                                 SetData=0;
  265.                                 DAConvert(VData[SetData]);
  266.                                 bai=SetData/100;
  267.                                 shi=SetData%100/10;
  268.                                 ge=SetData%10;
  269.                         }
  270.                         while(S0V==0);
  271.                 }
  272.                 if(S5V==0)
  273.                 {
  274.                         delayms(20);
  275.                         if(S5V==0)        
  276.                         {
  277.                                 SetData=50;
  278.                                 DAConvert(VData[SetData]);
  279.                                 bai=SetData/100;
  280.                                 shi=SetData%100/10;
  281.                                 ge=SetData%10;
  282.                         }
  283.                         while(S5V==0);
  284.                 }
  285. if(S10V==0)
  286.                 {
  287.                         delayms(20);
  288.                         if(S10V==0)        
  289.                         {
  290.                                 SetData=100;
  291.                                 DAConvert(VData[SetData]);
  292.                                 bai=SetData/100;
  293.                                 shi=SetData%100/10;
  294.                                 ge=SetData%10;
  295.                         }
  296.                         while(S10V==0);
  297.                 }
  298.                 if(S12V==0)
  299.                 {
  300.                         delayms(20);
  301.                         if(S12V==0)        
  302.                         {
  303.                                 SetData=120;
  304.                                 DAConvert(VData[SetData]);
  305.                                 bai=SetData/100;
  306.                                 shi=SetData%100/10;
  307.                                 ge=SetData%10;
  308.                         }
  309.                         while(S12V==0);
  310.                 }
  311.   if(S15V==0)
  312.                 {
  313.                         delayms(20);
  314.                         if(S15V==0)        
  315.                         {
  316.                                 SetData=150;
  317.                                 DAConvert(VData[SetData]);
  318.                                 bai=SetData/100;
  319.                                 shi=SetData%100/10;
  320.                                 ge=SetData%10;
  321.                         }
  322.                         while(S15V==0);
  323.                 }
  324.                 if(S20V==0)
  325.                 {
  326.                         delayms(20);
  327.                         if(S20V==0)        
  328.                         {
  329.                                 SetData=200;
  330.                                 DAConvert(VData[SetData]);
  331.                                 bai=SetData/100;
  332.                                 shi=SetData%100/10;
  333.                                 ge=SetData%10;
  334.                         }
  335.                         while(S20V==0);
  336.                 }
  337. if(S24V==0)
  338.                 {
  339.                         delayms(20);
  340.                         if(S24V==0)        
  341.                         {
  342.                                 SetData=240;
  343.                                 DAConvert(VData[SetData]);
  344.                                 bai=SetData/100;
  345.                                 shi=SetData%100/10;
  346.                                 ge=SetData%10;
  347.                         }
  348.                         while(S24V==0);
  349.                 }
  350.                 if(S30V==0)
  351.                 {
  352.                         delayms(20);
  353.                         if(S30V==0)        
  354.                         {
  355.                                 SetData=300;
  356.                                 DAConvert(VData[SetData]);
  357.                                 bai=SetData/100;
  358.                                 shi=SetData%100/10;
  359.                                 ge=SetData%10;
  360.                         }
  361.                         while(S30V==0);
  362.                 }
  363.         }
  364.   
  365. }
复制代码

所有资料51hei提供下载:
基于51单片机数控直流稳压电源.rar (197.08 KB, 下载次数: 301)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:485884 发表于 2019-3-6 21:39 | 显示全部楼层
能不能发下原理讲解呢,。萌新什么都不懂
回复

使用道具 举报

ID:522559 发表于 2019-4-26 20:42 | 显示全部楼层
谢谢大佬!
回复

使用道具 举报

ID:538907 发表于 2019-5-27 19:17 来自手机 | 显示全部楼层
大佬原理呢
回复

使用道具 举报

ID:951655 发表于 2021-7-11 14:06 | 显示全部楼层
按这个搞出来为啥不一样
回复

使用道具 举报

ID:1075301 发表于 2023-5-4 17:50 | 显示全部楼层
请问可以讲解一下硬件仿真的工作原理吗
回复

使用道具 举报

ID:332444 发表于 2023-5-28 12:19 | 显示全部楼层
虽然过去那么多年了,但还是要提醒后来人,有规律的数据最好不用数组,浪费宝贵单片机有限资源。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表