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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DIY便攜式六通道溫升測試儀(STC15F2K60S2單片機程序)

  [復制鏈接]
跳轉到指定樓層
樓主
大家好,測試工程師又來啦~ 這次給大家分享的是一款溫升測試儀。在我的工作中,經常要測試產品的工作溫升。如果有一臺便攜小巧的溫升測試儀,能夠隨時顯示實時溫度和溫升,那一定會帶來便利。

一旦有了DIY一個產品的想法,就按捺不住要付諸實踐了。于是先規劃好產品的功能、外觀等,然后確定了產品的原理、器件,再就是動手制作實物并編寫代碼。工作之作干干停停,整個過程大約耗時十天,最后基本實現想要的功能。

需求:
需要測量溫度,多個通道,精度要求不太高(1度左右即可),能顯示各個通道的實時溫度,能測量各個通道的溫升,測試結束后能查看顯示測試時長,起始溫度、最高溫度和溫升,要有可充電電池,待機工作時間夠長,傳感器使用薄膜式NTC方便貼裝,傳感器使用排插與測試儀相連。

設計:
單片機:STC15F2K60S2,自帶8通道10位ADC,無需外部晶振和復位電路,PDIP40封裝,方便使用萬能板焊接
供電:使用τ 寶采購的5V升壓鋰電池,1800mAh,充滿電后可連續供本產品工作二十幾小時
顯示屏:LCD2004,優點:便宜,顯示字符夠多,驅動簡單
NTC: B值3435,10K 1%

程序是自己寫的,基本上是按照自己的理解來設計的各個模塊,雖然實現了各個功能,但里面涉及到的按鍵檢測以及模式轉換等部分感覺很不專業,還有較大改進的空間。請大家多指點。

電路原理圖和實物制作圖如下。同時貼出主程序部分代碼,完整程序請在貼子后面下載。












main.c 單片機代碼:
  1. /************************/
  2. /*                    6通道溫升測試儀             */
  3. /*                    測溫范圍-40°~110°        */
  4. /*                    創建者 :sven                */
  5. /*                    創建時間:2021/1/         */
  6. /***********************/

  7. //下載程序時選擇內部時鐘頻率為6MHz

  8. #include "MAIN.H"
  9. #include "DELAY.H"
  10. #include "LCD2004.H"
  11. #include "DISPLAY.H"
  12. #include "KEY.H"
  13. #include "ADC.H"
  14. #include "NTC.H"

  15. unsigned char Show[4]={0};                                //顯示數組
  16. unsigned int Temp_Buf[N+1];                                //緩存溫度數組用于求平均值
  17. unsigned int realtime_temp[6];                        //實時溫度,元素0~5分別對應NTC1~6
  18. unsigned int init_temp[6]={400};                //初始溫度,元素0~5分別對應NTC1~6
  19. unsigned int max_temp[6]={400};                        //最高溫度,元素0~5分別對應NTC1~6
  20. unsigned int min_temp[6]={0};                        //最低溫度,元素0~5分別對應NTC1~6
  21. unsigned int rise_temp[6]={0};                        //溫升,元素0~5分別對應NTC1~6
  22. unsigned char mode=0;                                         //模式0,1,2分別是停止(實時溫度)、溫升測試(實時溫度加溫升)、溫升測試結果(查看結果)
  23. unsigned char page=0;                                        //模式1中的溫度顯示的頁面,0、1分別表示第1頁和第2頁;模式3中的查看結果頁面,0~5.
  24. unsigned char num,i;                                        //用于循環控制的參數
  25. unsigned char hour=0,minute=0,second=0,time_count=0;                        //秒表計時,時分秒,time_count累計20次為1秒
  26. unsigned char report_hour=0,report_minute=0,report_second=0;        //溫升測試時長
  27. unsigned char code welcome1[]="TEMPERATURE TESTER";                                //開機界面字符串1
  28. unsigned char code welcome2[]="RICHPOWER";                                                //開機界面字符串2
  29. unsigned char code teststart[]="TEST START!";                                        //開始測試字符串
  30. bit flag_1s=1;                                                                                                        //秒任務標志位

  31. /******************************
  32. 函數說明:定時器0初始化,
  33. 12T自動重裝模式,定時50毫秒
  34. ******************************/
  35. void Timer0Init(void)                //50毫秒@6.000MHz
  36. {
  37.         AUXR &= 0x7F;                        //定時器時鐘12T模式
  38.         TMOD &= 0xF0;                        //設置定時器模式
  39.         TL0 = 0x58-0x22;                //設置定時初值。減去0x22是因為實測每50毫秒快了34微秒(約每小時快了5秒)
  40.         TH0 = 0x9E;                                //設置定時初值
  41.         TF0 = 0;                                //清除TF0標志
  42.         TR0 = 1;                                //定時器0開始計時
  43.         ET0=1;                                        //允許T0定時中斷
  44.         EA=1;                                        //開全局中斷
  45. }

  46. void main(void)
  47. {
  48.         Init_ADC();                                //初始化ADC
  49.         LCD_Init();                                //初始化LCD2004
  50.         Timer0Init();                        //定時器初始化
  51.         while(1)
  52.         {               
  53.                 if(flag_1s)                        //1秒鐘到
  54.                 {
  55.                         flag_1s=0;                //清除標志位
  56.                         if(mode==0)                //如果是停止狀態,則采樣并顯示實時溫度
  57.                         {
  58.                                 for(i=0;i<6;i++)                                                        //6個通道先后采樣
  59.                                 {
  60.                                         Get_ADC_Result(i);                                                //連續采樣前先采一次且拋棄采樣值,目的是給采樣電容充電,減小后續采樣誤差
  61.                                         for(num=0;num<8;num++)                                        //連續采樣8次則正好更新了緩存數組
  62.                                                 realtime_temp[i]=Get_Temp(i);                //獲取NTC溫度值                                
  63.                                 }
  64.                                 Display_mode0();                                                        //調用模式0顯示函數                        
  65.                         }

  66.                         if(mode==1)                                                                                //模式1為溫升測試狀態
  67.                         {
  68.                                 write_com(0x80+0x0C);                                           //數據地址指針從1行第13位開始,顯示時間
  69.                                 write_dat(0x30+(hour/10));                                        //寫小時十位
  70.                                 write_dat(0x30+(hour%10));                                        //寫小時個位
  71.                                 write_dat(':');                                                                //寫冒號
  72.                                 write_dat(0x30+(minute/10));                                //寫分鐘十位
  73.                                 write_dat(0x30+(minute%10));                                //寫分鐘個位
  74.                                 write_dat(':');                                                                //寫冒號
  75.                                 write_dat(0x30+(second/10));                                //寫秒鐘十位
  76.                                 write_dat(0x30+(second%10));                                //寫秒鐘個位
  77.                                 for(i=0;i<6;i++)                                                        //循環6次,分別采到6個通道的實時溫度
  78.                                 {
  79.                                         Get_ADC_Result(i);                                                //連續采樣前先采一次且拋棄采樣值
  80.                                         for(num=0;num<8;num++)                                        //每個通道連續采樣8次
  81.                                         {
  82.                                                 realtime_temp[i]=Get_Temp(i);                //最后1次完成時即得到最近8次的平均值
  83.                                         }
  84.                                         if(realtime_temp[i]>max_temp[i])                //若通道i的實時溫度大于最大溫度,
  85.                                                 max_temp[i]=realtime_temp[i];                //則將實時溫度替換掉最大溫度
  86.                                         rise_temp[i]=max_temp[i]-init_temp[i];        //溫升=最大溫度-初始溫度                                                                                                                                                                                                                        
  87.                                 }
  88.                                 Display_mode1();                                                        //模式1的顯示函數,顯示實時溫度和溫升
  89.                         }
  90.                 }
  91.                 keyscan();                                                                                        //按鍵掃描        
  92.         }
  93. }


  94. void time0(void) interrupt 1                         //定時器T0中斷服務函數
  95. {
  96.         time_count++;                                                 //每50mS中斷一次
  97.         if(time_count==20)                                         //每20次中斷為1秒
  98.         {
  99.                 time_count=0;
  100.                 second++;
  101.                 flag_1s=1;                                                 //每秒給秒任務標志位置位
  102.         }
  103.         if(second==60)
  104.         {
  105.                 second=0;
  106.                 minute++;
  107.         }
  108.         if(minute==60)
  109.         {
  110.                 minute=0;
  111.                 hour++;
  112.                 if(hour>=100)
  113.                         hour=0;
  114.         }  
  115. }
復制代碼

源程序51hei下載:
溫升測試儀程序.rar (82 KB, 下載次數: 85)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:702386 發表于 2021-1-12 08:38 | 只看該作者
更正一下,實際使用的芯片是STC15F2K60S2,與原理圖中的不一致。
回復

使用道具 舉報

板凳
ID:874941 發表于 2021-1-12 09:06 | 只看該作者
如果能帶控制固態繼電器就更好了
回復

使用道具 舉報

地板
ID:53978 發表于 2021-1-12 09:18 | 只看該作者
zsw3721 發表于 2021-1-12 08:38
更正一下,實際使用的芯片是STC15F2K60S2,與原理圖中的不一致。

大俠 搞個一路多段溫控程序吧,做個回流焊。
回復

使用道具 舉報

5#
ID:702386 發表于 2021-1-12 11:19 | 只看該作者
solomonking 發表于 2021-1-12 09:06
如果能帶控制固態繼電器就更好了

加個繼電器模塊就可以,使用一個IO口來控制。
回復

使用道具 舉報

6#
ID:702386 發表于 2021-1-12 11:23 | 只看該作者
smartphone 發表于 2021-1-12 09:18
大俠 搞個一路多段溫控程序吧,做個回流焊。

理論上不難,制作實物和調試會比較麻煩。
回復

使用道具 舉報

7#
ID:874941 發表于 2021-1-13 08:56 | 只看該作者
zsw3721 發表于 2021-1-12 11:19
加個繼電器模塊就可以,使用一個IO口來控制。

6路溫控,那得需要6給IO口來控制6個固態?
回復

使用道具 舉報

8#
ID:815949 發表于 2022-11-18 16:57 | 只看該作者
zsw3721 發表于 2021-1-12 08:38
更正一下,實際使用的芯片是STC15F2K60S2,與原理圖中的不一致。

樓主  請教一下  如果用STC15W408as,源碼還需要更改嗎,是不是直接燒附件的HEX文件可以么?
回復

使用道具 舉報

9#
ID:57414 發表于 2022-11-18 17:09 | 只看該作者
牛!大神出品,必是精品!
回復

使用道具 舉報

10#
ID:815949 發表于 2023-1-2 09:47 | 只看該作者
本帖最后由 william_wangxb 于 2023-1-3 10:58 編輯

參照原理圖 樓主的源代碼IO口需要改動(源碼中按鍵定義部分有誤),另外溫升測試顯示界面還有問題(溫度顯示有誤,只能顯示123通道456通道的溫度和123通道相同),基本功能能實現,但是存在些許瑕疵待改善。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色www精品视频在线观看 | 欧美亚洲视频 | av网站在线免费观看 | 中文久久 | 日韩第一页 | 国产精品一区二区三区在线 | 午夜小影院 | 国产成人精品区一区二区不卡 | 欧美日韩在线一区二区三区 | 日韩在线国产精品 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 日韩高清成人 | av中文字幕网 | 国产精品久久在线 | 欧美日韩高清在线一区 | 亚洲va中文字幕 | 一级在线观看 | 国家aaa的一级看片 h片在线看 | 久久男人天堂 | 日韩福利在线 | 国产成人精品一区 | 精品伊人 | 久久黄色| 国产伊人精品 | 欧美色综合网 | 国精日本亚洲欧州国产中文久久 | 91在线看片| 色综合久 | 北条麻妃99精品青青久久主播 | 91精品国产91久久久久久密臀 | 亚洲一区二区三区在线免费观看 | 人人做人人澡人人爽欧美 | 精品久久影院 | 天天视频一区二区三区 | 高清免费av | 欧美一级高清片 | 久久久精品| 久久精品国产免费高清 | 国产精品自产拍在线观看蜜 | 午夜免费网站 | 久久精品一区 |