找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2401|回复: 7
收起左侧

简简单单加热焊台 附单片机程序

  [复制链接]
ID:834389 发表于 2022-7-17 01:59 | 显示全部楼层 |阅读模式
因为要求不高 刚好需要的芯片有库存   做了个简单的加热焊台   也可以加热金属的水杯什么的
设定温度最大280摄氏度,最小10度,可以在程序中修改,   程序很简单没有注释,

12v供电  线尽量粗一点  我用的2.5平方的  开关电源200w以上吧   

示意图

示意图

单片机源程序如下:
  1. //#include <reg51.H>
  2. #include <STC12C5A60S2.H>

  3. #include <intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6.         
  7. #define FOSC 11059200L

  8. uint MAX6675_Temper;


  9. unsigned char EC11_Dir = 0;//方向标志
  10. unsigned char TestValue = 0;
  11. sbit PIN_EC11_A = P1^6;
  12. sbit PIN_EC11_B = P1^4;

  13. sbit PIN_EC11_c = P1^5;
  14. sbit PIN_EC11_key = P1^7;

  15. sbit P2_0 = P2^0;
  16. sbit P2_1 = P2^1;
  17. sbit P2_2 = P2^2;
  18. sbit P2_3 = P2^3;        

  19. sbit sh=P3^0;
  20. sbit st=P3^1;
  21. sbit oe=P3^2;
  22. sbit ds=P3^3;



  23. sbit MAX6675_CS  = P3^5;
  24. sbit MAX6675_CLK = P3^6;
  25. sbit MAX6675_DAT = P3^4;


  26. sbit jiare = P3^7;

  27. sbit beep = P0^1;

  28. bit wdbg;//设定温度变更标志位


  29. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};

  30. uint num;
  31. uint shedingwd,sdjs;
  32. uint shijiwd;


  33. void Delay2us()                //@11.0592MHz
  34. {
  35.         unsigned char i;

  36.         _nop_();
  37.         _nop_();
  38.         i = 2;
  39.         while (--i);
  40. }

  41. void Delay2ms()                //@11.0592MHz
  42. {
  43.         unsigned char i, j;

  44.         i = 22;
  45.         j = 128;
  46.         do
  47.         {
  48.                 while (--j);
  49.         } while (--i);
  50. }



  51. void Timer0Init(void)                //1毫秒@11.0592MHz
  52. {
  53.         //TMOD &= 0xF0;                //设置定时器模式
  54.         TMOD &= 0xF0;                //设置定时器模式
  55.         TMOD |= 0x01;                //设置定时器模式
  56.         TL0 = 0x91;                //设置定时初始值
  57.         TH0 = 0xFF;                //设置定时初始值
  58.         TF0 = 0;                //清除TF0标志
  59.         TR0 = 1;                //定时器0开始计时
  60. }

  61. void Timer1Init(void)                //1毫秒@11.0592MHz
  62. {
  63.         AUXR |= 0x40;                //定时器时钟1T模式
  64.         TMOD &= 0x0F;                //设置定时器模式
  65.         TL1 = 0xCD;                //设置定时初始值
  66.         TH1 = 0xD4;                //设置定时初始值
  67.         TF1 = 0;                //清除TF1标志
  68.         TR1 = 1;                //定时器1开始计时
  69. }


  70. void HC595SendData(unsigned char Data)
  71. {
  72.         unsigned char i;

  73.         st=0;
  74.         sh=0;
  75.         for(i=0;i<8;i++)
  76.         {
  77.                 ds=Data&0x80;
  78.                 Data=Data<<1;
  79.                 sh=1;
  80.                 sh=0;
  81.         }
  82.         st=1;        
  83.         st=0;
  84. }



  85. uint MAX6675_ReadDat()
  86. {
  87.   uint d;
  88.         uchar i;

  89.   MAX6675_CS=0;
  90.         MAX6675_CLK=0;
  91.         
  92.         Delay2us();
  93.   for(i=0;i<16;i++)
  94.   {
  95.                 d<<=1;
  96.                 Delay2us();
  97.     MAX6675_CLK=1;
  98.                 if(MAX6675_DAT)
  99.      d++;
  100.                  Delay2us();
  101.                  MAX6675_CLK=0;
  102.   }
  103.   MAX6675_CS=1;
  104.   return d;
  105. }

  106. void MAX6675_ReadTemper()
  107. {
  108.   uint d;
  109.         
  110.   d=MAX6675_ReadDat();//读取MAX6675当前的温度值
  111.   MAX6675_Temper=((d>>3)&0x0fff)*0.25;
  112. }


  113. void display(void);

  114. void _ec11_drives(void);


  115. uint a,b;
  116. void delay(uchar t)                  // 延时函数
  117. {
  118.         uchar t1;
  119.         unsigned long t2;
  120.         for(t1=0;t1<t;t1++)
  121.         {
  122.                 for(t2=0;t2<b;t2++);
  123.         }
  124.         
  125. }

  126. uint sd;
  127. void beep2()
  128. {
  129.         b=11;
  130.         for(a=0;a<300;a++)
  131.         {
  132.         beep=~beep;
  133.                 delay(1);
  134.         }
  135. }
  136.         

  137.         /***************************************/
  138.         /***************************************/
  139.         /***************************************/
  140. void main()
  141. {
  142.         
  143.         
  144.                 b=25;
  145.         for(a=0;a<600;a++)
  146.         {
  147.         beep=~beep;
  148.                 delay(1);
  149.         }
  150.         
  151.                 b=20;
  152.         for(a=0;a<850;a++)
  153.         {
  154.         beep=~beep;
  155.                 delay(1);
  156.         }
  157.         
  158.         b=15;
  159.         for(a=0;a<1000;a++)
  160.         {
  161.         beep=~beep;
  162.                 delay(1);
  163.         }
  164.         
  165.         beep=1;
  166.         Timer0Init();
  167.         Timer1Init();
  168.         EA=1;
  169.         ET0=1;        

  170.         oe=0;
  171.                
  172.         shedingwd=20;
  173.                
  174.         jiare=1;
  175.                
  176.         PIN_EC11_c = 0;
  177.         sd=shedingwd;
  178.         while(1)
  179.         {
  180.                

  181.                
  182.                 if(wdbg==1)
  183.                 {
  184.                         ET1=1;
  185.                         num=shedingwd;
  186.                 }
  187.                 else
  188.                 {
  189.                         num= MAX6675_Temper;
  190.                 }
  191.                
  192.                 if(MAX6675_Temper+2<shedingwd)
  193.                         jiare=0;
  194.                 else
  195.                         jiare=1;
  196.                
  197.                 display();
  198.                
  199.                 if(!PIN_EC11_key)
  200.                 shedingwd=100;
  201.                
  202.                 if(shedingwd>=280)
  203.                         shedingwd=280;
  204.                 if(shedingwd<=10)
  205.                         shedingwd=10;

  206.                 if(sd!=shedingwd)
  207.                 {beep2();
  208.                         sd=shedingwd;
  209.                         beep=1;
  210.                 }

  211.         }        
  212.         
  213. }

  214. void time0(void) interrupt 1
  215. {
  216.         uint i;
  217.         TL0 = 0x91;                //设置定时初始值
  218.         TH0 = 0xFF;                //设置定时初始值

  219.                 _ec11_drives();
  220.         
  221.         i++;
  222.         if(i==5000)
  223.         {i=0;
  224.                 MAX6675_ReadTemper();
  225.         }

  226. }

  227. void time1(void) interrupt 3
  228. {
  229.         uint j,k;
  230.         TL1 = 0xCD;                //设置定时初始值
  231.         TH1 = 0xD4;                //设置定时初始值

  232.         
  233.         if(k++>1000)
  234.         {
  235.         k=0;
  236.                 sdjs++;
  237.                 j++;
  238.         
  239.         }
  240.         
  241.         if(j<3)
  242.                 oe=1;
  243.         else
  244.                 oe=0;
  245.         if(j>5)
  246.                 j=0;
  247.         
  248.         
  249.         if(sdjs>30)
  250.         {
  251.         sdjs=0;
  252.                 ET1=0;
  253.                 wdbg=0;
  254.                 oe=0;
  255.         }

  256. }


  257. void display(void)
  258. {
  259.         HC595SendData(table[num%10]);
  260.         P2_3=0;
  261.         Delay2ms();
  262.         P2_3=1;
  263.         
  264.         HC595SendData(table[num%100/10]);
  265.         P2_2=0;
  266.         Delay2ms();
  267.         P2_2=1;
  268.         HC595SendData(table[num%1000/100]);
  269.         P2_1=0;
  270.         Delay2ms();
  271.         P2_1=1;
  272.         HC595SendData(table[num/1000]);
  273.         P2_0=0;
  274.         Delay2ms();
  275.         P2_0=1;        

  276. }

  277. void _ec11_drives(void)//中断10us中调用
  278. {
  279.         
  280.         static unsigned char CheckCnt,EC11Status=0;

  281.         if(PIN_EC11_A)
  282.         {
  283.                
  284.                 if(++CheckCnt > 10)//在中断中调用 值为2即可,快速扫描,适当加长可提高防抖效果。
  285.                 {
  286.                         CheckCnt = 12;
  287.                         if(EC11Status==0)
  288.                         {
  289.                                 if(PIN_EC11_B)
  290.                                 {
  291.                                         EC11_Dir = 0x55;
  292.                                         shedingwd-=5;
  293.                                 }
  294.                         }
  295.                         EC11Status =1;
  296.                 }
  297.         }
  298.         else
  299.         {
  300.                 wdbg=1;sdjs=0;
  301.                 if(CheckCnt)
  302.                 {
  303.                         CheckCnt--;
  304.                 }
  305.                 else
  306.                 {
  307.                         if(EC11Status)
  308.                         {
  309.                                 EC11Status=0;
  310.                                 if(PIN_EC11_B)
  311.                                 {
  312.                                         EC11_Dir = 0xaa;
  313.                                         shedingwd+=5;
  314.                                 }
  315.                         }
  316.                 }
  317.         }
  318. }


复制代码


评分

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

查看全部评分

回复

使用道具 举报

ID:57657 发表于 2022-7-17 11:34 | 显示全部楼层
最小10度,室温多少度? 还带制冷的吗?
回复

使用道具 举报

ID:88256 发表于 2022-7-17 12:34 | 显示全部楼层
12V供电的是什么加热板?
回复

使用道具 举报

ID:8222 发表于 2022-7-17 17:43 | 显示全部楼层
如果能有300度的PTC就好了,感觉现在的270拆LED温度有点低。
回复

使用道具 举报

ID:834389 发表于 2022-7-17 22:46 | 显示全部楼层
npn 发表于 2022-7-17 11:34
最小10度,室温多少度? 还带制冷的吗?

额  没这个功能  只能加热不能制冷  
回复

使用道具 举报

ID:834389 发表于 2022-7-17 22:57 | 显示全部楼层
本帖最后由 735251 于 2022-7-17 23:22 编辑
温xyz 发表于 2022-7-17 17:43
如果能有300度的PTC就好了,感觉现在的270拆LED温度有点低。

实测 如果电源功率够的话  温度上升的蛮快的  ,
其实大佬说 最好加热板最大温度不宜超 260度    不然丝印层容易脱落,铜皮氧化造成加热不均匀,断路 等等
回复

使用道具 举报

ID:834389 发表于 2022-7-17 23:22 | 显示全部楼层
hhdsdy 发表于 2022-7-17 12:34
12V供电的是什么加热板?

希尔伯特走线   开源平台 搜下   
根据自己需要修改下   功率越大 加热越快   
回复

使用道具 举报

ID:834389 发表于 2022-7-17 23:54 | 显示全部楼层
本帖最后由 735251 于 2022-7-17 23:58 编辑
温xyz 发表于 2022-7-17 17:43
如果能有300度的PTC就好了,感觉现在的270拆LED温度有点低。

实测  这片加热板 不要控制板直接接12v电源 温度在260度不会上升了  环境.电源功率,质量 等影响可能达不到,稍微提高电压可以使温度上升,但板子寿命会降低,或损坏
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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