久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2588|回復: 1
打印 上一主題 下一主題
收起左側

單片機K型熱電偶測溫工具制作 源程序MAX6675+TM1621

  [復制鏈接]
跳轉到指定樓層
樓主
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、冷端接插端子需要提前插入一次,使其開口變大,這樣在焊接時就不用特意預留空隙

5、最后說明
          關于物料,我在原理圖的元器件參數里面有放了寶鏈接,可根據需要更換或入手
          關于STC-ISP的下載配置和二次移植注意事項,見附錄里面的壓縮包相關TXT文件,里面也有我寫的源碼文件,采用的是模塊化編程,如果需要TM1621等模塊代碼請自取,如有疑惑,請留言或私信,在我所不多的知識里為你提供參考

6、實拍圖


    本次程序使用的是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 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:151348 發表于 2022-10-29 18:04 | 只看該作者
這種斷碼屏貌似不好買,要么不包郵,還好,之前在賣舊貨店鋪撿垃圾發現一些就屯起來了,有空也試試
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色久五月 | 日韩aⅴ片 | 婷婷色成人 | 精品久久久久一区二区国产 | 成人黄页在线观看 | 男人av在线播放 | 国产精品久久久久久久粉嫩 | 精品久久国产老人久久综合 | 午夜视频在线观看视频 | 成人午夜免费福利视频 | 欧美日韩专区 | 久久曰视频 | 羞羞视频网站免费看 | 国产1区2区3区| 欧美一区二区免费 | www亚洲一区 | 国产亚洲高清视频 | 国产免费一级一级 | 精品二三区| 午夜视频在线 | 九七午夜剧场福利写真 | 亚洲精品美女在线观看 | 羞羞涩涩在线观看 | 欧美日韩国产一区二区三区 | 先锋资源网 | 欧美人成在线视频 | 精品综合 | 久久综合狠狠综合久久综合88 | 黄色一级视频 | 国产精品一级在线观看 | 国产视频在线观看一区二区三区 | 国产精品一二区 | 91精品国产91久久久久福利 | 天天爽夜夜爽精品视频婷婷 | 精品成人av| 日韩精品免费看 | 污片在线免费观看 | 中文字幕精品视频 | 欧美视频 亚洲视频 | 日韩欧美一级精品久久 | 久久99精品国产 |