找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11205|回复: 29
收起左侧

数控直流电源0V~10V 单片机程序+仿真

  [复制链接]
ID:123094 发表于 2016-5-25 13:10 | 显示全部楼层 |阅读模式
数控直流电源0V~10V功能说明
(1)系统可调节直流稳压电源,调节范围0V~10V;
(2)步进调节,每次0.1V;
(3)数码管显示输出的电压;
(4)设置了加,减和归零按键
183950wt2gnd5ndcltwtlv.jpg

0.png
51单片机做的数控源仿真原理图(仿真文件请下载本帖最后的51黑附件)

单片机数控源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint aa,b,bb;
  5. sbit p1=P2^7;
  6. sbit p2=P2^6;
  7. sbit p3=P2^5;
  8. sbit p4=P2^4;
  9. sbit dp=P0^7;
  10. sbit an1=P1^4;
  11. sbit an2=P1^5;
  12. sbit an3=P1^6;
  13. sbit CLK=P1^2;/*定义DAC控制端口*/
  14. sbit CS=P1^1;
  15. sbit DIN=P1^3;
  16. uchar code SegCode[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc1};
  17. int moshi=0;
  18. void DelayMs(uchar n)
  19. {
  20.         uchar j;
  21.         while (n--)            
  22.         {
  23.                 for (j = 0; j < 113; j++);
  24.         }
  25. }

  26. void keyscan1()        /*复位*/
  27. {
  28.     if(an1==0)
  29.      {  aa=0;
  30.                 bb=0;
  31.        
  32.          }
  33.     while(an1==0);
  34. }

  35. void keyscan2()        /*按键1进行加1*/
  36. {
  37.     if(an2==0)
  38.      {
  39.                          if(aa<100)
  40.                          {
  41.                                  aa=aa+1;
  42.                      bb++;
  43.                          }
  44.          }
  45.     while(an2==0);
  46. }

  47. void keyscan3() /*按键2进行减1*/
  48. {
  49.    if(an3==0)
  50.     {
  51.            if(aa>0)
  52.                  {
  53.                          aa=aa-1;
  54.              bb--;
  55.                  }
  56.         }
  57.   while(an3==0);
  58. }

  59. /*显示函数*/
  60. void display(void)
  61. {  p1=0;p2=0;p3=0;p4=0;
  62.           if(bb/100%10==0)
  63.     P0=SegCode[10];
  64.     else
  65.         P0=SegCode[bb/100%10];
  66.         p1=1;p2=0;p3=0;p4=0;
  67.         DelayMs(3);
  68.        
  69.           p1=0;p2=0;p3=0;p4=0;
  70.         P0=SegCode[bb/10%10];
  71.         dp=0;
  72.         p1=0;p2=1;p3=0;p4=0;
  73.         DelayMs(3);
  74.   
  75.         p1=0;p2=0;p3=0;p4=0;
  76.         P0=SegCode[bb%10];
  77.         p1=0;p2=0;p3=1;p4=0;
  78.         DelayMs(3);

  79.         p1=0;p2=0;p3=0;p4=0;
  80.         P0=SegCode[11];
  81.         p1=0;p2=0;p3=0;p4=1;
  82.         DelayMs(3);

  83.         p1=0;p2=0;p3=0;p4=0;
  84. }
  85.        
  86. void DA_Conver(unsigned int DAValue)
  87. {
  88.       unsigned char i;
  89.       DAValue <<= 6;       
  90.       CS =   0;                             
  91.       CLK = 0;                          
  92.                                        
  93.       for(i = 0; i < 12; i++)                 
  94.       {                                    
  95.           DIN = (bit)(DAValue & 0x8000);  
  96.           CLK = 1;                        
  97.           DAValue <<= 1;                  
  98.          CLK = 0;
  99.       }
  100.       CS = 1;                              
  101.       CLK = 0;           
  102. }
  103.                        
  104. float zh (float k)
  105. {
  106.   float DA;
  107.   DA=k*1024/500;        /*2.5v参考电压!*/
  108.   return DA;  }
  109. void init_timer()
  110. {  
  111.     TMOD=0x01;
  112.         TH0=(65536-3500)/256;         
  113.         TL0=(65536-3500)%256;
  114.         EA=1;
  115.         ET0=1;
  116.         TR0=1;
  117.               }

  118. void main()
  119. {long DAValue=0;
  120.   aa=0;


  121.           init_timer();

  122.   while(1)
  123.   {  
  124.     DAValue=zh(aa);  /*输出电压*/
  125.           DA_Conver(DAValue);
  126.              keyscan1();
  127.           keyscan2();
  128.           keyscan3();
  129.          
  130.         }
  131.   }
  132.        
  133. void time0() interrupt 1
  134.         {          TH0=(65536-3500)/256;
  135.         TL0=(65536-3500)%256;
  136.         b++         ;
  137.         if(b==2)
  138.         {b=0;
  139.           display(); }
  140.           }         
复制代码


全部资料下载:
程序设计.rar (5.31 KB, 下载次数: 261)

评分

参与人数 3黑币 +67 收起 理由
GUOXUAN + 15 量程只有10V,比较小.
虎兔赛高 + 2 很有帮助
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:193547 发表于 2017-4-25 19:53 | 显示全部楼层
楼主能把资料发邮箱吗
回复

使用道具 举报

ID:112693 发表于 2017-4-25 20:26 | 显示全部楼层
好东西,量程可以更大一些吗
回复

使用道具 举报

ID:202306 发表于 2017-5-19 12:13 | 显示全部楼层
楼主好人
回复

使用道具 举报

ID:200118 发表于 2017-5-19 21:23 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:203726 发表于 2017-5-23 04:34 | 显示全部楼层
好资料,学习
回复

使用道具 举报

ID:213653 发表于 2017-6-22 11:55 | 显示全部楼层
楼主好人,就是没有元器件图,我很小白
回复

使用道具 举报

ID:186618 发表于 2017-7-28 17:21 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:262410 发表于 2017-12-16 17:04 | 显示全部楼层
楼主可以发邮箱吗 资料?
回复

使用道具 举报

ID:249545 发表于 2017-12-17 10:10 | 显示全部楼层
这个项目简洁易做,初学DIY可以一试.
就是量程只有10V,用起来范围会显得小,鸡肋一些.老师能修改大一些吗?
回复

使用道具 举报

ID:265079 发表于 2017-12-21 22:17 | 显示全部楼层
刚入门,没得黑币
回复

使用道具 举报

ID:242547 发表于 2018-3-22 22:32 | 显示全部楼层
楼主,能说明下算法流程吗
回复

使用道具 举报

ID:321285 发表于 2018-5-4 16:34 | 显示全部楼层
厉害的楼主,有没有讲解?
回复

使用道具 举报

ID:140358 发表于 2018-5-4 21:32 | 显示全部楼层
很好,感谢论坛,感谢老铁
回复

使用道具 举报

ID:344278 发表于 2018-6-4 07:35 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:92810 发表于 2018-11-4 23:07 | 显示全部楼层
楼主能把资料发邮箱吗
回复

使用道具 举报

ID:92810 发表于 2018-11-4 23:08 | 显示全部楼层

很好,感谢论坛,感谢老铁
回复

使用道具 举报

ID:432233 发表于 2019-4-22 17:21 | 显示全部楼层
万分感谢
回复

使用道具 举报

ID:519117 发表于 2019-4-22 23:08 | 显示全部楼层
感谢楼主,萌新求带
回复

使用道具 举报

ID:432233 发表于 2019-4-24 22:08 | 显示全部楼层
真的万分感谢啊啊啊啊啊
回复

使用道具 举报

ID:388130 发表于 2019-4-25 11:07 | 显示全部楼层
非常好
回复

使用道具 举报

ID:329297 发表于 2019-5-7 17:51 | 显示全部楼层
下载学习下
回复

使用道具 举报

ID:303735 发表于 2019-5-9 16:56 | 显示全部楼层
很好,我觉得把电压分成几段,然后精度就提高了,可以做到0-30v.
回复

使用道具 举报

ID:540583 发表于 2019-5-19 17:48 | 显示全部楼层
这个就是按键控制的数控直流电压源嘛?
回复

使用道具 举报

ID:614734 发表于 2020-9-17 20:32 来自手机 | 显示全部楼层
楼主能讲解一下吗?我初学
回复

使用道具 举报

ID:517951 发表于 2020-11-15 17:48 | 显示全部楼层
不错,值得学习。51hei有你更精彩!!
回复

使用道具 举报

ID:403503 发表于 2022-8-16 19:39 | 显示全部楼层
资料不错,输出驱动电流多大啊?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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