找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2776|回复: 1
收起左侧

单片机K型热电偶测温工具制作 源程序MAX6675+TM1621

  [复制链接]
ID:507428 发表于 2022-10-25 21:10 | 显示全部楼层 |阅读模式
K型测温模块
        这款测温计灵感来自孙老师发的测温计视频,我进行了PCB和代码的重做,使外形更小巧 ,使用STC8G1K08A-SOP8来替代STM8L(代价是功耗提高了一些)
        我的视频链接:测温小工具---K型热电偶测温
2、模块参数
  • 大约平均功耗1mA
  • 尺寸36mm*20mm
  • 测量精度±2℃
  • 测温范围0~999℃
3、K型测温计涉及的主要知识点
         1、SPI通信
         2、如何驱动TM1621断码屏的IC
         3、如何与MAX6675通信
         4、怎么样选择硬件,使其较少的硬件资源,来完成所需功能
         5、如何使用一个IO口识别两个按键
         6、STC8G的低功耗使用,和使用细节(其实实际功耗还是蛮高的,也算不上低功耗(*  ̄︿ ̄))
         7、STC8G的EEPROM使用,和使用细节
4、焊接说明
         推荐焊接顺序:顶层贴片的IC和元器件-->底层的冷端接插端子-->纽扣电池座-->LCD断码屏(务必把屏幕放到最后焊)
         重点留意事项!!
        a、STC8G单片机需要提前烧录好代码,在焊接;
        b、冷端接插端子需要提前插入一次,使其开口变大,这样在焊接时就不用特意预留空隙
1.png 2.png

5、最后说明
          关于物料,我在原理图的元器件参数里面有放了宝链接,可根据需要更换或入手
          关于STC-ISP的下载配置和二次移植注意事项,见附录里面的压缩包相关TXT文件,里面也有我写的源码文件,采用的是模块化编程,如果需要TM1621等模块代码请自取,如有疑惑,请留言或私信,在我所不多的知识里为你提供参考

6、实拍图
3.png 4.png 5.png

    本次程序使用的是STC8G1K08A-SOP8单片机,由于引脚受限,所以在给TM1621
    和MAX6675通信时,采用的是一个IO连接,由于MAX6675的数据是输出给单片机,
    而TM1621是单片机发送数据给它,所以当MAX6675的数据脚和TM1621的数据脚
    连在一起,使用普通的IO模式是无法对这两个进行正常通信的。
    解决办法:在MAX6675的数据口串联一个电阻,并且在单片机数据端口接一个上拉电阻5~10K左右(重要提示!!!)
          (在和TM1621通信时需要有上拉电阻,和MAX6675通信时可以不用上拉电阻)
            为了降低功耗,需要对上拉电阻进行开关控制(也可以一直接着上拉电阻,只是功耗高一些而已)
            正好STC8G内部集成了上拉电阻和控制,所以程序上会有控制上拉电阻开关的代码

单片机源程序如下:
  1. /*
  2. * @Name           SPI_Soft_config
  3. * @Brief          软件SPI相关配置
  4. * @Author          飞羽(2022-09-07)
  5. * @Param          None       
  6. * @Return         None       
  7. * @Others        (包含所需头文件:Soft_SPI.h)       
  8.                         软件实现的SPI的相关引脚在Soft_SPI.h里面定义,需要根据实际情况进行修改
  9.                         引脚配置由SPI_Soft_GPIO_Init()函数实现,被GPIO_config()调用
  10. */
  11. void SPI_Soft_config(void)
  12. {
  13.         SPI_Soft_t.SPI_Mode = SPI_SOFT_MASTER;                //SPI_SOFT_MASTER,SPI_SOFT_SLAVE
  14.         SPI_Soft_t.SPI_CPOL = HIGH;                                        //时钟极性 HIGH,LOW
  15.         SPI_Soft_t.SPI_CPHA = SPI_SOFT_2EDGE;                //时钟相位SPI_SOFT_1EDGE,  SPI_SOFT_2EDGE,数据采样时的边沿
  16.         SPI_Soft_t.SPI_Speed_us = 20;                                //0~65535,这里是指一个SCLK脉冲的时间(注意us延时不是很准确,请根据实际情况来修改)                               
  17.         SPI_Soft_t.SPI_Data_Time_Div = TIME_DIV_2;        //采集数据的时间除数,TIME_DIV_5, TIME_DIV_3, TIME_DIV_2  (SPI_Speed_us / SPI_Data_Time_Div)
  18.         SPI_Soft_t.SPI_OPEN_IO_MODE  = GPIO_PullUp;  //数据传输时的IO模式  GPIO_PullUp、GPIO_OUT_OD,这里为了兼容主/从机模式时的数据传输功能,没有特定吧MOSI或MISO设置成高组模式
  19.         SPI_Soft_t.SPI_First_Bit = SPI_SOFT_MSB;        //数据传输数据位模式,SPI_SOFT_MSB(高位在前),SPI_SOFT_LSB(低位在前)
  20. //        SPI_Soft_t.SPI_Soft_ss_GPIO  = SPI_SOFT_SS_GPIO;
  21. //        SPI_Soft_t.SPI_Soft_ss_PIN   = SPI_SOFT_SS_PIN;
  22.         SPI_Change_MAX6675();
  23. //        SPI_Change_TM1621();
  24. }


  25. /*
  26. * @Name           System_Init
  27. * @Brief          系统初始化
  28. * @Author          飞羽
  29. * @Param          None       
  30. * @Return         None
  31. * @Others        写入所有想要初始化的外设函数
  32. */
  33. void System_Init(void)
  34. {
  35.         RSTCFG &= 0XBF;                //关闭低压复位,降低功耗
  36.        
  37.         Switch_config();
  38.         SPI_Soft_config();
  39.         GPIO_config();
  40.        
  41.         SPI_Change_TM1621();
  42.         TM1621_Init();
  43.         //EA_ENABLE();       

  44.         set_pdModeCount = ONE_MINUTE_COUNT*60;                //第一次烧录程序时初始化进入掉电模式的时间,即默认为60分钟
  45.         K_Off_Count = 0;
  46.        
  47.         P_SW2 = 0x80;
  48.         IRC32KCR = 0x80; //启动内部 32K IRC
  49.         while (!(IRC32KCR & 1)); //等待时钟稳定
  50.         CLKDIV = 0x00; //时钟不分频
  51.         CKSEL = 0x03; //选择内部 32K
  52.         P_SW2 = 0x00;
  53.        
  54.         APP_Read_EEPROM();                //导出EEPROM内容
  55.        
  56.         if(set_pdModeCount < ONE_MINUTE_COUNT){        //设定值最少为1分钟
  57.                 set_pdModeCount = ONE_MINUTE_COUNT;
  58.         }
  59.        
  60. //delay_ms(250);
  61.   delay_ms(200);
  62. }



  63. /*
  64. * @Name           System_Run
  65. * @Brief          系统运行函数
  66. * @Author          飞羽
  67. * @Param          None       
  68. * @Return         None
  69. * @Others        None
  70. */
  71. extern void System_Run(void)
  72. {
  73.         static uint8_t times = 0;
  74.        
  75.         if(TRUE == Is_IntoPdMode()){        //设定时间进入掉电模式
  76.                 IntoPdMode();
  77.         }
  78.         if(TRUE == Is_K_Off_IntoPdMode()){        //设定时间没有接入K型热电偶而进入掉电模式
  79.                 IntoPdMode();
  80.         }
  81.         sw = SW_Detect();        //按键扫描

  82. //使用掉电延时作为延时,这里结合外部语句延时,大概为1s延时时间       
  83.         WKTCL = 252;                //掉电定时器唤醒时间
  84.         if(fun_disp_status == NORMAL) WKTCH = 0X02;                //正常显示的延时长一些,在32K主频时,这里的时间,加上其他语句执行的时间才是延时时间
  85.         WKTCH |= 0X80;                //打开掉电定时器唤醒使能

  86.         P3_PULL_UP_DISABLE(GPIO_Pin_3);       
  87.         SPI_SOFT_SCLK_IO = LOW;
  88.         SPI_SOFT_MISO_IO = LOW;
  89.        
  90.         MCU_POWER_DOWN();                //进入掉电模式
  91.         WKTCH &= ~0X80;    //关闭掉电定时器唤醒使能
  92.        
  93.        
  94. //        delay_ms(250);
  95. //    delay_ms(85);                //这里的毫秒时,在主频很低时已没有实际意义,因为其他语句的占用时间已经不能忽略
  96.                                                 //这里一轮的时间大概约为500ms
  97.                                                 //MAX6675温度转化延时,必须加,
  98.                                                 //这个时间也是长按刻度时间,修改后按情况也同步修改“APP_Temperature.c”里面的key_long_times
  99.        
  100.         SPI_Change_MAX6675();
  101.         if(fun_disp_status == NORMAL) {
  102.                 LCD_Show_Normal();
  103.                 pdModeCount++;               
  104.         }
  105.         else if(fun_disp_status == SHOW_MAX_TEMP) {
  106.                 LCD_SHOW_MAX_TEMP();
  107.                
  108.         }
  109.         else if(fun_disp_status == SHOW_MIN_TEMP) {
  110.                 LCD_SHOW_MIN_TEMP();
  111.         }
  112.         else if(fun_disp_status == SET_OFF_TIME) {
  113.                 Set_Off_Time();
  114.         }
  115.         else if(fun_disp_status == INTO_PdMODE) {        //手动进入掉电模式       
  116.                 Set_Into_PdMode();
  117.         }

  118.        
  119.         if(sw == SW_DOWN) {
  120.                 sw = SW_Detect();        //再次判断按键
  121.                 if(sw == SW_DOWN){
  122.                         pdModeCount = 0;        //每次有按键按下,就更新自动掉电时间计数               
  123.                         if(pdTime_set_flag == 0){
  124.                                 if(times < 2) {        //2表示长按时间次数,长按刻度时间由外部的延时决定
  125.                                         times++;
  126.                                         LCD_Set_Disp_Num(times,DP_SET);        //长按指示
  127.                                         LCD_Set_Disp_Num(times + 1,DP_SET);        //长按指示
  128.                                 }
  129.                                 else{
  130.                                         times = 0;
  131.                                         fun_disp_status++;
  132.                                         if(fun_disp_status == FUN_DISP_STATUS_MAX_LEN){        //溢出归零
  133.                                                 fun_disp_status = 0;
  134.                                         }
  135.                                         key_long_times = 1;                //初始化                                       
  136.                                 }
  137.                                
  138.                         }       
  139.                 }
  140.         }
  141.         else{
  142.                 times = 0;
  143.         }

  144.        
  145.         SPI_Change_TM1621();
  146.         LCD_All_Display();
  147. //        if(pdTime_set_flag == 0) {
  148. //                LCD_Show();
  149. //                Inc_pdModeCount();
  150. //        }
  151. //        else{
  152. //                Set_pdTime();
  153. //        }
  154. }
复制代码
Keil代码下载: K型测温计-STC8G-MAX6675---2022-10-18.7z (1.11 MB, 下载次数: 53)

评分

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

查看全部评分

回复

使用道具 举报

ID:151348 发表于 2022-10-29 18:04 | 显示全部楼层
这种断码屏貌似不好买,要么不包邮,还好,之前在卖旧货店铺捡垃圾发现一些就屯起来了,有空也试试
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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