单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 918|回复: 3
打印 上一主题 下一主题
收起左侧

STC单片机自制贴片元件拆焊台MAX6675控温程序

[复制链接]
跳转到指定楼层
楼主
因维修点小东西,自己做了个24V单片机拆焊台,能拆贴片元件和更换LED小灯,我主要就是这个灯和贴片电阻不好拆,才自制的,很好用。一个24vX4.5A电源,2个12v电热管串起来,TB有2块钱吧,3D打印机用,一个铝合金散热器,单片机和MAX6675温控器,降压芯片,继电器(没有pwm控MOS管,这个真用不着高大上的哈),开关只有加减温度,默认上电195度,这个温度拆焊正好,上图上程序,也算开源吧。

制作出来的实物图如下:


单片机源码:
  1. #include<reg51.h>#define uchar unsigned char//只有256
  2. #define uint unsigned int//有16位但占内存。
  3. #define ulong  unsigned long
  4. #include  <intrins.h>        
  5. sbit rs=P2^6;//
  6. sbit rw=P2^5;//
  7. sbit en=P2^7;//
  8. sbit k1=P1^0;//按键+
  9. sbit k2=P1^1;//按键-

  10. uchar set=195;//初始化温度
  11. sbit OUT=P1^2;//定义输出

  12. void delay (int a)//毫秒级延时
  13. {
  14. int x,y;
  15. for(x=a;x>0;x--)
  16.         for(y=110;y>0;y--);
  17. }


  18. //定义温度数据变量
  19. float wdd = 0;//单精度浮点型变量眼3.4*10^38----(-3.4*10^38)  占4个字节小数点后7-8位
  20. //double wdd = 0;//双精度浮点型变量        小数点后15-16位
  21. ulong x = 0;//长整数型温度
  22. uint  wd;//定义一个温度用于显示
  23. sbit  SO=P3^2;  //P1.0口与SO相连
  24. sbit  CS=P3^3;  //P1.1口与CS相连
  25. sbit  SCK=P3^4; //P1.2口与SCK相连


  26. /*******************************延时函数**********************************************/
  27. void Delay1Ms(uint t)
  28. {
  29.          uchar i;
  30.          for (;t>0;t--)
  31.                 {
  32.                 for (i=0;i<138;i++)
  33.                         {
  34.                         _nop_();_nop_();_nop_();_nop_();_nop_();
  35.                         _nop_();_nop_();_nop_();_nop_();_nop_();
  36.                         }
  37.                 }        
  38. }
  39. void Delay1s(uchar t)
  40. {
  41.         for (;t>0;t--)
  42.                 {
  43.             Delay1Ms(250);
  44.                 Delay1Ms(250);
  45.                 Delay1Ms(250);
  46.                 Delay1Ms(250);
  47.             }        
  48. }
  49. void delayus()//us微秒延时
  50. {
  51. _nop_();
  52. _nop_();
  53. _nop_();
  54. _nop_();
  55. }
  56. unsigned long Re_Convert() //热电偶数据--读取温度
  57. { uchar i;
  58.   unsigned long Temp_2;
  59.   Temp_2=0;
  60.   CS=1;
  61.   SCK=0;
  62.   Delay1Ms(120); //不低于(52机)100MS不然数据无法刷新  
  63.   _nop_();_nop_();
  64.   CS=0;
  65.   for(i=0;i<16;i++)//16位数据读取
  66.      {
  67.           Temp_2<<=1;//向右移一位
  68.           _nop_();
  69.            SCK=1;//上升
  70.        if(SO==1)
  71.            {Temp_2=Temp_2|0x01;}
  72.            else
  73.            Temp_2=Temp_2|0x00;
  74.            _nop_();                                                                                    
  75.        SCK=0;
  76.           _nop_();
  77.      }     
  78.   Temp_2=Temp_2<<1;        //向左移一位,取0-14位
  79.   Temp_2=Temp_2>>3;        //向右移4位,取3-14位
  80.   //Temp_2=1024.123456;//测试正常运行不要
  81.   return(Temp_2); //返回温度  
  82. }


  83. void write_com(uchar com)//写命令
  84. {
  85. rs=0;//
  86. rw=0;
  87. en=0;
  88. P0=com;
  89. delay(2);
  90. en=1;
  91. delay(5);
  92. en=0;
  93. delay(2);
  94. }
  95. void write_dat(uchar dat)//写数据
  96. {
  97. rs=1;//
  98. rw=0;
  99. en=0;
  100. P0=dat;
  101. delay(2);
  102. en=1;
  103. delay(5);
  104. en=0;
  105. delay(2);
  106. }
  107. void write_zfc(uchar *p)//定义一个带指针的函数?(字符串)
  108. {
  109.         while(*p!=0)//不能用";"
  110.         write_dat(*p++);
  111. }
  112. void init_1602()//1602初始化
  113. {
  114. write_com(0x38);//设置16X2显示
  115. delay(1);
  116. write_com(0x0C);//0e光标不闪//0c不显//0f闪烁显示
  117. delay(1);
  118. write_com(0x06);//光标移位加1
  119. delay(1);
  120. write_com(0x01);//清屏
  121. delay(1);
  122. write_com(0x80);
  123. write_zfc("Set=");

  124. }
  125. void write_TH(uchar set)//高温显示
  126. {
  127. uchar qian,bai,shi,ge;
  128.         qian=set/1000;
  129.         bai=set%1000/100;
  130.         shi=set%100/10;
  131.         ge=set%10;
  132.         
  133. write_com(0x80+4);
  134. // write_dat(0x30+qian);  
  135.         write_dat(0x30+bai);
  136.         write_dat(0x30+shi);
  137.    write_dat(0x30+ge);
  138.         write_dat(0xdf);//显上0
  139.         write_dat('C');


  140. }



  141. void display(uint tvalue)//4位显示子函数
  142. {
  143.    uchar qian,bai,shi,ge;
  144.         qian=tvalue/1000;
  145.         bai=tvalue%1000/100;
  146.         shi=tvalue%100/10;
  147.         ge=tvalue%10;
  148.         
  149.         write_com(0xc0+3);
  150.   write_zfc("WD =");
  151.    //write_dat(0x30+qian);
  152.          write_dat(0x30+bai);
  153.          write_dat(0x30+shi);
  154.    write_dat(0x30+ge);
  155.          write_dat(0xdf);//显上0
  156.    write_dat('C');


  157. }
  158. void keyscan()
  159. {
  160. if(k1==0)
  161. {
  162. // delay(5);
  163. //while(!k1);
  164. set++;
  165.          if(set>250)set=250;
  166. write_TH(set);
  167. }

  168. if(k2==0)
  169. {
  170. //delay(5);
  171. //while(!k2);
  172. set--;
  173.         if(set<30)set=30;
  174. write_TH(set);
  175. }



  176. }
  177. void main()
  178. {  
  179.         init_1602();
  180.         while(1)
  181.   {   
  182.                 keyscan();
  183.                 write_TH(set);//设置温度
  184.                  
  185.               x=Re_Convert(); //读取温度//X=读到的值
  186.                     wdd=25*x;//温度量化 X 0.25//取后两位就X25         
  187.                      wd =(uint)wdd;//浮点型变量转换成uint型变量16位
  188.               //wd=wd-48;//计算                                            
  189.               wd=wd/200;//计算                  
  190.                     display(wd);
  191.                   if(wd>set)
  192.                         {
  193.                         OUT=1;
  194.                         write_com(0x80+11);
  195.       write_zfc("<off>");        
  196.                         }
  197.                         else
  198.                         {
  199.                         if(wd+1<=set)        //让这回到5C之下才又开始加温,防闪烁                                                
  200.                         {
  201.                                 OUT=0;//加热开始
  202.                                 write_com(0x80+11);
  203.         write_zfc("<ok!>");        
  204.                         }
  205.                         }        
  206.                
  207.          
  208. }
  209. }
复制代码

全部资料51hei下载地址:
1602显并MAX6675温度加热台OK.zip (36.95 KB, 下载次数: 17)



评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
 楼主| 冰冰洁洁 发表于 2019-1-2 22:04 | 只看该作者
本来做的2个加热管并联用12V电源,电流10A太大线路发热,才改24V现在才3.1A左右。开始想做220V的,加热管也有,但不安全,我们又不是天天用,不用考虑节能的,安全最重要,我电烙铁都是自制12.6V锂电池的,调压是0-24V,很安全,T12那种进口头子,9V正常焊接,15V能烧的像电热丝一样红,秒杀了无数人。6个18650旧电池用2个小时没问题,改天也发一下。
回复

使用道具 举报

板凳
ls0899 发表于 2019-1-3 08:30 | 只看该作者
请问感温用什么元件18b20达不到195度?? 热电偶??
回复

使用道具 举报

地板
 楼主| 冰冰洁洁 发表于 2019-1-3 20:59 来自手机 | 只看该作者
ls0899 发表于 2019-1-3 08:30
请问感温用什么元件18b20达不到195度?? 热电偶??

感温用MAX6675热电偶,几百度没问题了。
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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