標(biāo)題: 天山OLED白光烙鐵單片機(jī)源碼與使用手冊(cè)V3.1.1 王志浩 [打印本頁(yè)]
作者: freenaut 時(shí)間: 2018-8-29 09:35
標(biāo)題: 天山OLED白光烙鐵單片機(jī)源碼與使用手冊(cè)V3.1.1 王志浩
diy 白光T12 用
天山OLED烙鐵使用手冊(cè)
0 特別聲明
0.1 版權(quán)聲明程序中所有代碼均由本人(即全體著作權(quán)所有人,下同)開(kāi)發(fā)完成,程序開(kāi)源后授權(quán)任何人可免費(fèi)使用本程序(既可直接使用固件,亦可在程序基礎(chǔ)上修改出任何衍生版本),但上述程序及本文檔著作權(quán)屬本人所有。
硬件設(shè)計(jì)中參考了廣大網(wǎng)友的建議,不再聲明版權(quán),但請(qǐng)各位使用者尊重本人和其他網(wǎng)友的勞動(dòng)成果。
0.2 開(kāi)源協(xié)議除本人以外的任何人對(duì)本程序(包括但不限于此版本,下同)進(jìn)行修改后的任何衍生版本,以及以本程序思路或部分代碼為基礎(chǔ)設(shè)計(jì)的其它程序,必需開(kāi)源所有代碼。未經(jīng)第一著作權(quán)所有人(@BEAT)之書(shū)面授權(quán),任何單位和個(gè)人不得將上述程序(包括本程序及所有衍生版本和參考本程序設(shè)計(jì)的其它程序)及本文檔以任何形式用于商業(yè)用途。
本程序受著作權(quán)法保護(hù),本人保留對(duì)侵權(quán)者及違反開(kāi)源協(xié)議者追究法律責(zé)任的權(quán)利。請(qǐng)遵守此開(kāi)源協(xié)議,尊重原作者、及所有衍生版本作者的勞動(dòng)成果,遵守著作權(quán)人所在地法律法規(guī)!
0.3 免責(zé)聲明 本人只進(jìn)行程序的設(shè)計(jì),并無(wú)償分享給網(wǎng)友。本人只保證該程序在我的手中可以正常工作,不保證其他人以任何形式得到的電路板、元器件及源程序均可正常工作,不承擔(dān)其他任何人使用本人所設(shè)計(jì)的所有軟硬件造成的一切后果。如您不同意此聲明,請(qǐng)您立即刪除本文檔及其相關(guān)程序。
0.4 致謝 本程序中部分內(nèi)容參考了@BEAT的相關(guān)算法;@ xzhyahoo1在V2.0和V2.1版本設(shè)計(jì)時(shí)提供了建議;V2.8版本修復(fù)的BUG是由@理解源于真誠(chéng)發(fā)現(xiàn)的。V3.0中的UI是由@BEAT設(shè)計(jì)的。以上朋友的幫助,對(duì)程序的開(kāi)發(fā)和更新起到了良好的作用,在此一并致謝。
1 硬件準(zhǔn)備1.1 硬件介紹1.1.1 本人設(shè)計(jì)的PCB介紹①存在已知問(wèn)題是編碼器和OLED屏距離太近,如果選用1.3寸OLED,編碼器裝上旋鈕后會(huì)擋住部分OLED屏。因此需要各位試用的朋友自己飛線,或給屏裝上排線,或EC11采用飛線,總之將屏和編碼器分開(kāi)。
②焊接蜂鳴器和編碼器時(shí),應(yīng)先焊蜂鳴器再焊編碼器,并用膠帶或熱熔膠將蜂鳴器的兩個(gè)焊盤妥善絕緣,否則編碼器背部的金屬會(huì)將蜂鳴器短路,并且需要將編碼器兩個(gè)固定腳剪掉。
③選用5V供電的OLED屏?xí)r,R4/R5應(yīng)選用1k,采用3.3V供電時(shí),R4/R5選用470R,具體選用5V還是3.3V,由JP1跳線決定。
④請(qǐng)?jiān)?V加470uF以上電容,運(yùn)放VCC加104電容。
⑤電容C5設(shè)計(jì)有誤,實(shí)際不需要。
1.1.2 智萌版硬件介紹 ①正面三個(gè)電容不需要焊接,否則無(wú)法下載程序;
②建議MOS更換為AO4413.
1.1.3 海綿寶寶版硬件介紹 ①單片機(jī)應(yīng)改為STC15W2K60S2;
1.2 燒錄固件1.2.1 燒錄步驟 固件在Prj文件夾下Objects子文件夾內(nèi),文件名為HAKKO.hex。
①將CH340模塊連接焊臺(tái),先只接TX、RX、GND三根線,VCC不接;
②按圖1-1步驟勾選相關(guān)選項(xiàng);
圖1-1 STC-ISP軟件操作步驟
③將下載器VCC與焊臺(tái)連接。
1.2.2 燒錄失敗排查①編碼器位置不合適,旋轉(zhuǎn)編碼器再試(請(qǐng)確保編碼器轉(zhuǎn)到位,不要卡在中間);
②TX、RX接反,V1.0beta版本硬件應(yīng)是T-R、R-T;
③下載器供電不穩(wěn),檢查下載器帶載后的電源電壓;
④降低下載時(shí)的最高波特率,并取消勾選“使用快速下載模式”。
2 功能介紹2.1 界面介紹烙鐵工作時(shí),分為兩種工作模式,即普通工作模式和通道工作模式,兩種模式可短按編碼器切換,以下將分別介紹。
2.1.1 普通工作模式普通工作模式下,允許用戶以自定義的步進(jìn)(在菜單中可調(diào)),調(diào)整設(shè)定溫度值。步進(jìn)取值范圍為1-50。普通工作模式界面如圖2-1。
圖2-1普通工作模式界面
2.1.2 通道工作模式 通道工作模式下,用戶可以在0~5共計(jì)6個(gè)溫度通道中選擇設(shè)定溫度,其中通道0為0℃,通道5為“最高溫度”值,其余四個(gè)通道的值可在工廠模式中設(shè)定。通道工作模式界面如圖2-2。
2.2 主菜單介紹長(zhǎng)按編碼器進(jìn)入一級(jí)菜單,旋轉(zhuǎn)編碼器選擇想要進(jìn)入的二級(jí)菜單,短按進(jìn)入該二級(jí)菜單。再次旋轉(zhuǎn)編碼器,將光標(biāo)移動(dòng)至需要修改的具體參數(shù)上,短按編碼器選中該內(nèi)容(選中后該選項(xiàng)值顯示在文字后方)。再次旋轉(zhuǎn)編碼器修改該值,修改完成后短按編碼器取消選中(取消選中后該選項(xiàng)值消失),再次旋轉(zhuǎn)編碼器可以移動(dòng)光標(biāo)至其他參數(shù)上。退出一級(jí)菜單和二級(jí)菜單均需要長(zhǎng)按編碼器,長(zhǎng)按時(shí)間為1s。菜單結(jié)構(gòu)如圖2-3所示。
圖2-3 菜單結(jié)構(gòu)圖
2.2.1 溫度設(shè)置溫度步進(jìn):用戶在正常模式下旋轉(zhuǎn)編碼器的溫度步進(jìn)值,以及在其他菜單中設(shè)定與溫度相關(guān)的參數(shù)時(shí)的溫度步進(jìn)值;
休眠溫度:烙鐵進(jìn)入“休眠模式”下的工作溫度,該選項(xiàng)值如小于50,則休眠時(shí)不加熱,且該選項(xiàng)值不能超過(guò)“最高溫度”的設(shè)定值(已在固件中進(jìn)行了限制,下同);
默認(rèn)溫度:烙鐵開(kāi)機(jī)后默認(rèn)的設(shè)定溫度,該選項(xiàng)值不能超過(guò)“最高溫度”的設(shè)定值,如希望焊臺(tái)保存上次關(guān)機(jī)時(shí)的設(shè)定溫度值,則可以將該選項(xiàng)置為“0”;
最高溫度:烙鐵可以設(shè)置的最高溫度,該選項(xiàng)值不能超過(guò)500(在溫度超過(guò)450℃后精度沒(méi)有保證,請(qǐng)謹(jǐn)慎使用);
2.2.2 時(shí)間設(shè)置休眠時(shí)間:當(dāng)烙鐵手柄停止振動(dòng)且編碼器沒(méi)有動(dòng)作后開(kāi)始計(jì)時(shí),到時(shí)進(jìn)入休眠模式,以“休眠溫度”進(jìn)行工作,直至進(jìn)入“待機(jī)模式”,在此時(shí)間內(nèi)通過(guò)振動(dòng)手柄或編碼器動(dòng)作可喚醒烙鐵,重新以原先的設(shè)定溫度進(jìn)行加熱。如不需要休眠,該位置0。該位置0后,不會(huì)進(jìn)入休眠和待機(jī)模式,也不會(huì)切斷220V電源。
待機(jī)時(shí)間:在進(jìn)入休眠模式后開(kāi)始計(jì)時(shí),到時(shí)進(jìn)入待機(jī)模式,烙鐵停止加熱。該位置0表示到休眠時(shí)間后直接進(jìn)入待機(jī)模式。待機(jī)模式下,只能由編碼器動(dòng)作喚醒烙鐵。
關(guān)機(jī)時(shí)間:在進(jìn)入待機(jī)模式后開(kāi)始計(jì)時(shí),到時(shí)由單片機(jī)IO口(可自定義,參見(jiàn)第三章第五節(jié))給出低電平信號(hào),由硬件配合切斷220V電源,該位置0表示不切斷220V電源,沒(méi)有硬件配合的該位無(wú)效,可置任何值不影響程序運(yùn)行。由于單片機(jī)掉電喚醒定時(shí)器時(shí)鐘不準(zhǔn),該時(shí)間存在較大誤差(20%)。
2.2.3 通道設(shè)置
默認(rèn)通道:烙鐵開(kāi)機(jī)后默認(rèn)的設(shè)定通道,該選項(xiàng)取值范圍為1-5,如希望焊臺(tái)保存上次關(guān)機(jī)時(shí)的設(shè)定通道,則可以將該選項(xiàng)置為“0”;
通道1-4:允許用戶設(shè)定通道1-通道4的通道值,在通道模式中調(diào)用,該選項(xiàng)取值不得大于“最高溫度”值。
2.2.4 其它設(shè)置 焊咀選擇:允許用戶在工廠模式中事先儲(chǔ)存4支烙鐵頭的參數(shù);
振動(dòng)閾值:烙鐵頭振動(dòng)喚醒烙鐵時(shí)的靈敏度設(shè)定,取值0~10,0為最靈敏;
按鍵音量:編碼器轉(zhuǎn)動(dòng)或按下時(shí)的音量設(shè)定,取值為0~10,0為關(guān)閉蜂鳴器;
保護(hù)電壓:烙鐵停止加熱的電壓值,當(dāng)電源(或電池)電壓低于該設(shè)定值時(shí),烙鐵停止加熱,但不影響菜單操作;
溫度波動(dòng):烙鐵顯示溫度波動(dòng)較大時(shí),可提高該值使顯示穩(wěn)定,取值范圍1-5,1為顯示實(shí)時(shí)值。
恢復(fù)出廠設(shè)置:如需恢復(fù)出廠設(shè)置,則將該位置1,退出菜單后所有參數(shù)均恢復(fù)出廠設(shè)置。
2.2.5 焊咀校準(zhǔn) 焊咀選校: 如需矯正并存儲(chǔ)烙鐵頭參數(shù),需將該選項(xiàng)調(diào)整為想要校準(zhǔn)的烙鐵頭編號(hào),之后在其余子菜單中進(jìn)行校準(zhǔn)。
0~600℃: 單擊選中100℃至500℃選項(xiàng)后,將按照“焊咀選!敝性O(shè)置的烙鐵頭編號(hào)對(duì)應(yīng)的溫度表對(duì)烙鐵加熱,取消選中后自動(dòng)停止加熱。在校準(zhǔn)過(guò)程中,如實(shí)際溫度低于設(shè)定的溫度,則調(diào)大AD值;如實(shí)際溫度高于設(shè)定的溫度,則調(diào)小AD值。0℃及600℃一般為默認(rèn)值無(wú)需調(diào)整。溫度有過(guò)沖比較嚴(yán)重的現(xiàn)象時(shí),反復(fù)多次校準(zhǔn)溫度一般可以解決. 在烙鐵頭校準(zhǔn)時(shí),切記該組數(shù)據(jù)必須嚴(yán)格從小到大遞增,否則溫度無(wú)效。例如,如果校準(zhǔn)前:100℃,AD=110;200℃,AD =270;300℃,AD = 380,當(dāng)校準(zhǔn)200℃時(shí),溫度不足200℃,需要將AD值從270調(diào)大,但其大小不能超過(guò)300°時(shí)的AD值380,如果從270調(diào)到380溫度還不能達(dá)到200℃,那就說(shuō)明300℃時(shí)的380這個(gè)值也偏小了,需先將300℃的380也增大。
2.2.6 其他校準(zhǔn)按鍵校準(zhǔn):不同廠家的編碼器AB通道不一定相同,如編碼器方向與習(xí)慣不符,可將該選項(xiàng)調(diào)整為1,默認(rèn)為0。
電壓校準(zhǔn):如需矯正電源電壓,需旋轉(zhuǎn)編碼器將當(dāng)前電源電壓的測(cè)量值乘10取整保存在菜單中,如當(dāng)前電源電壓為24.4V,那么將該值調(diào)整為244即可;(注意此值對(duì)應(yīng)的編碼器步進(jìn)不為1,需多次旋轉(zhuǎn)才會(huì)進(jìn)1)
室溫校準(zhǔn):如需矯正室溫,需旋轉(zhuǎn)編碼器將當(dāng)前室溫的測(cè)量值取證保存在菜單中,如當(dāng)前室溫為18℃,那么將該值調(diào)整為18即可;(注意此值對(duì)應(yīng)的編碼器步進(jìn)不為1,需多次旋轉(zhuǎn)才會(huì)進(jìn)1)
3 程序修改為方便各位朋友在本程序的基礎(chǔ)上繼續(xù)添加或修改自己需要的功能,在此介紹一些常見(jiàn)的問(wèn)題。
3.1 準(zhǔn)備工作首先需安裝Keil軟件(見(jiàn)群文件),并下載解壓STC-ISP軟件(見(jiàn)群文件)。添加型號(hào)和頭文件到Keil中,如圖3-1。然后打開(kāi)prj文件夾下的HAKKO.uvproj文件即可開(kāi)始修改。
圖3-1 添加型號(hào)和頭文件
3.2 可快捷修改的幾個(gè)設(shè)置 (1)打開(kāi)程序文件的config.h文件,找到圖3-2(a)所示位置。
(a) config.h文件部分代碼
(b)編譯按鈕
圖3-2 可快捷操作的幾個(gè)設(shè)置
(2)根據(jù)需要注釋相關(guān)定義;
(3)設(shè)置完畢后按編譯按鈕,編譯按鈕在Keil界面左上角如圖3-2(b)所示的紅圈內(nèi)。
3.3 修改開(kāi)機(jī)LOGO①準(zhǔn)備一張128*64的logo圖片,單色BMP格式;
②打開(kāi)PCtoLCD2002軟件;
③點(diǎn)菜單上的模式,改成圖片模式。
④點(diǎn)菜單上文件、打開(kāi)(打開(kāi)準(zhǔn)備好的bmp格式的logo圖片)如圖3-3;
圖3-3
⑤點(diǎn)上面的齒輪,設(shè)字模選項(xiàng),陰碼,列行式,逆向,C51,自定義格式(刪去行前綴和行后綴的大括號(hào)),如圖3-4所示;
圖3-4 字模選項(xiàng)
⑥設(shè)定好后,點(diǎn)確定,然后點(diǎn)生成字模,如圖3-6;
⑦復(fù)制生成的代碼,替換源程序中LQ12864.C中的LOGO[1024]數(shù)組,如圖3-5所示;
圖3-5 替換LOGO數(shù)組
⑧點(diǎn)擊圖3-2(b)所示的編譯按鈕,編譯后即可下載。
3.4 提高烙鐵最大輸出功率烙鐵最大輸出功率(24V側(cè))實(shí)測(cè)已經(jīng)達(dá)75w以上,如果認(rèn)為不滿意可以手動(dòng)修改程序。但提高效果并不明顯且會(huì)造成進(jìn)口頭溫度檢測(cè)的波動(dòng)。為滿足更多人需要,特給出修改方法:
(1)打開(kāi)程序文件的Sys_Sample.c文件,找到圖3-6所示位置。
圖3-6 Sys_Sample.c文件部分代碼
(2)根據(jù)需要將Get_ADC10bitResult也注釋;
(3)修改完畢后按編譯按鈕,編譯按鈕在Keil界面左上角如圖3-2(b)所示的紅圈內(nèi)。
3.5 修改控制器IO口為方便使用其他控制板的朋友修改IO,特取消PCA功能并改用定時(shí)器生成PWM波,如圖3-7所示.
(1)打開(kāi)程序的config.h文件,找到圖3-7所示位置。
圖3-7 config.h文件部分代碼
(2)修改適當(dāng)?shù)腎O,其中KEY_A為切換烙鐵頭按鍵,KEY_B為休眠或關(guān)機(jī)按鍵;
(3)修改完畢后按編譯按鈕,編譯按鈕在Keil界面左上角如圖3-2(b)所示的紅圈內(nèi)。
4 結(jié)語(yǔ)本程序?yàn)樘焐絋12焊臺(tái)最終版程序,程序中不再新增任何功能,不再修復(fù)任何不影響使用的BUG。軟硬件均已經(jīng)開(kāi)源,希望各位朋友在研究、使用的同時(shí)切實(shí)遵守開(kāi)源協(xié)議,尊重各版本作者勞動(dòng)成果,共同營(yíng)造一個(gè)自由、平等、排除商業(yè)模式干擾的交流平臺(tái)。再次感謝開(kāi)發(fā)本焊臺(tái)過(guò)程中向我提供過(guò)幫助的所有人,衷心感謝!
修訂歷史 | | | |
| | | |
| | 增加中文菜單,優(yōu)化溫度控制,修復(fù)若干BUG | |
| | 修復(fù)工廠模式中的若干BUG,優(yōu)化溫度控制 | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | 修復(fù)重要BUG,改進(jìn)程序修改方法 | |
| | 增加進(jìn)口頭的兼容性,調(diào)整程序結(jié)構(gòu),修復(fù)BUG | |
| | 優(yōu)化程序結(jié)構(gòu),優(yōu)化對(duì)進(jìn)口頭的兼容性 | |
| | | |
| | 優(yōu)化按鍵功能,優(yōu)化菜單顯示,修復(fù)BUG | |
| | | |
| | 修改程序結(jié)構(gòu),為移植UI做最后準(zhǔn)備 | |
| | 更換菜單界面,取消工廠模式,修改焊咀校準(zhǔn) | |
| | | |
| | | |
| | | |
V3.0.0 版更新詳細(xì)說(shuō)明:①更換新的菜單界面;
②將工廠模式功能移植到主菜單中;
③修改校準(zhǔn)烙鐵頭的方法;
V3.0.1 版更新詳細(xì)說(shuō)明:①修復(fù)1.3吋OLED顯示不全的BUG;
②修復(fù)菜單中默認(rèn)通道不能置0的BUG;
③修復(fù)菜單中時(shí)間設(shè)置最大只能為10的BUG;
V3.0.2 版更新詳細(xì)說(shuō)明:①修復(fù)部分硬件蜂鳴器不響的BUG;
②修復(fù)休眠時(shí)屏幕顯示的BUG;
③修復(fù)菜單中版本號(hào)顯示的BUG;
④嘗試修復(fù)待機(jī)喚醒的花屏BUG.
V3.1.0 版更新詳細(xì)說(shuō)明:①在保留原先UI界面的同時(shí),添加仿JBC界面可供選擇;
②修復(fù)最高溫度限制可能無(wú)效的BUG;
③修復(fù)部分獨(dú)立按鍵無(wú)提示音的BUG。
單片機(jī)源程序如下:
- /*********************************************************************************
- * COPYRIGHT NOTICE
- * Copyright (c) 2017, XinJiang University
- * All rights reserved.
- *
- * 文件名 : Sys_Basic.c
- * 描述 : 系統(tǒng)基礎(chǔ)函數(shù),包括中斷和MCU底層,延時(shí)函數(shù)等
- *
- * 版本 : V3.0.2
- * 作者 : 王志浩
- * 日期 : 2017-10-22
- *
- * 以下全部程序之著作權(quán)歸屬新疆大學(xué)所有,受《中華人民共和國(guó)著作權(quán)法》保護(hù)!
- * 未經(jīng)第一著作權(quán)所有人書(shū)面授權(quán),任何單位和個(gè)人不得將以下程序用于商業(yè)用途!
- * 修改此程序請(qǐng)保留上述版權(quán)聲明,引用程序請(qǐng)注明出處!
- **********************************************************************************/
- #include "config.h"
- /********************** 全局變量定義 ************************/
- PWM_s PWM = {0,Disable}; //PWM相關(guān)變量
- IRON_STATUS_e IronStateFlag = NORMAL; //烙鐵工作狀態(tài)標(biāo)志位
- TIMER_s Timer = {0,0,0}; //定時(shí)計(jì)數(shù)器
- IRONUSE_STATUS_s IronUse_Status = {FREE,FREE}; //烙鐵使用狀態(tài)標(biāo)志位
- /************************************************************
- * 函數(shù)名 : timer0_int
- * 功能說(shuō)明 : 定時(shí)器0中斷,生成PWM波,蜂鳴器響
- *
- * 輸入?yún)?shù) : 無(wú)
- * 輸出參數(shù) : 無(wú)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- void timer0_int (void) interrupt TIMER0_VECTOR
- {
- static unsigned int BeepCounter = 0;
- static unsigned char PWM_counter = 0;
-
- //PWM生成
- PWM_counter++;
- if((PWM_counter<PWM.Duty) && PWM.Run)
- IRON = 1;
- //IRON = 0;
- else
- IRON = 0;
-
- //蜂鳴器響
- //旋轉(zhuǎn)或按下后BeepCounterFlag被置位,開(kāi)始計(jì)數(shù)
- if(BeepCounterFlag)
- {
- BeepCounter++;
- }
- //計(jì)數(shù)小于設(shè)定值時(shí)打開(kāi),大于時(shí)關(guān)閉,Beep_Volume的值決定了占空比
- if((BeepCounter > 0) && (BeepCounter <= MENU_DATA_Table.Other_s.Beep_Volume*BEEP_TIME))
- {
- BEEP_ON;
- }
- else
- {
- BEEP_OFF;
- }
- //清零
- if(BeepCounter >MENU_DATA_Table.Other_s.Beep_Volume*BEEP_TIME)
- {
- BeepCounter = 0;
- BeepCounterFlag = 0;
- }
- }
- /************************************************************
- * 函數(shù)名 : timer1_int
- * 功能說(shuō)明 : 定時(shí)器1中斷,主要控制
- *
- * 輸入?yún)?shù) : 無(wú)
- * 輸出參數(shù) : 無(wú)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- void timer1_int (void) interrupt TIMER1_VECTOR
- {
- static unsigned int IronUseCounter=0;
- static unsigned int ShutDownCounter = 0;
- static unsigned char P01_Old = 0;
-
- //1ms處理部分
- Timer.mSec++; //定時(shí)器0分段計(jì)數(shù)器自加
- EC11_Capture(); //捕捉EC11信息
- //10ms處理部分
- if(Timer.mSec%10 == 0)
- {
- if(IronUse_Status.Handle || IronUse_Status.Coder)//烙鐵或編碼器用了,那要看看現(xiàn)在是不是休眠什么的狀態(tài)了
- {
- if(IronStateFlag)
- {
- Timer.Sec = 0;
- Timer.Min = 0;
- ec11_state.Key = KEY_FREE;
- ec11_state.Coder = CODER_FREE;
- IronStateFlag = NORMAL;
- Beep(MENU_DATA_Table.Other_s.Beep_Volume);
- }
- }
- }
-
- //100ms處理部分
- if(Timer.mSec%100 == 0)
- {
- //水銀開(kāi)關(guān)跳變沿檢測(cè)并計(jì)數(shù)
- if(SLEEP != P01_Old)
- {
- IronUseCounter++;
- }
- P01_Old = SLEEP;
-
- //溫度控制(正常工作按IronTemp_AM控制,休眠按Slp_Temp控制,否則關(guān)烙鐵)
- if(IronStateFlag == NORMAL)
- {
- IronTempControl(IronTemp.Set);
- }
- else if(IronStateFlag==SLEEPING)
- {
- IronTempControl(MENU_DATA_Table.Temp_s.Slp_Temp);
- }
- else
- {
- IronTempControl(0);
- }
- }
-
- //1s處理部分
- if(Timer.mSec == 1000)
- {
- //一秒內(nèi)看10次跳變沿,如果這10次有N次烙鐵手柄狀態(tài)發(fā)生變化,那么認(rèn)為是確實(shí)在使用
- if(IronUseCounter>MENU_DATA_Table.Other_s.Shock_Sensor)
- {
- IronUse_Status.Handle = USING;
- }
- else
- {
- IronUse_Status.Handle = FREE;
- }
- //看完后清計(jì)數(shù)器
- IronUseCounter = 0;
-
- //如果認(rèn)為沒(méi)有使用,那么開(kāi)始計(jì)時(shí),只要用了就清零(烙鐵沒(méi)有使用&&編碼器沒(méi)有使用&&沒(méi)有進(jìn)菜單)
- if(IronUse_Status.Handle == FREE && IronUse_Status.Coder == FREE && ShutdownCounterFlag==0)
- {
- Timer.Sec++;
- }
- else
- {
- Timer.Sec = 0;
- Timer.Min = 0;
- IronUse_Status.Coder = FREE;
- }
- Timer.mSec = 0;
- }
-
- //1min處理部分
- if(Timer.Sec == 55)//定時(shí)不準(zhǔn)
- {
- Timer.Min++;
- Timer.Sec = 0;
- //以下是休眠、關(guān)屏、和軟關(guān)機(jī)
- //如果 (睡眠時(shí)間不為0&&在正常工作狀態(tài))
- if((MENU_DATA_Table.Time_s.Slp_Time > 0) && (IronStateFlag == NORMAL))
- {
- if(Timer.Min == MENU_DATA_Table.Time_s.Slp_Time)
- {
- IronStateFlag = SLEEPING;
- Beep(MENU_DATA_Table.Other_s.Beep_Volume);
- //清計(jì)時(shí)器為待機(jī)做準(zhǔn)備
- Timer.Sec = 0;
- Timer.Min = 0;
- }
- }
- //如果軟關(guān)機(jī)時(shí)間>=0&&已經(jīng)休眠
- if((MENU_DATA_Table.Time_s.Shutdown_Time >= 0) && (IronStateFlag == SLEEPING))
- {
- if(Timer.Min == MENU_DATA_Table.Time_s.Shutdown_Time)
- {
- //清計(jì)時(shí)器為掉電喚醒做準(zhǔn)備
- Timer.Sec = 0;
- Timer.Min = 0;
- //置烙鐵狀態(tài)標(biāo)志位
- IronStateFlag = STANDBY;
- //蜂鳴器響,確保烙鐵關(guān)到位了
- BEEP_ON;
- Delay_ms(100);
- PWM.Run = Disable;
- IRON = 0;
- BEEP_OFF;
- Delay_ms(150);
- BEEP_ON;
- Delay_ms(150);
- OLED_CLS();
- BEEP_OFF;
- //如果關(guān)機(jī)時(shí)間大于零,則初始化掉電喚醒定時(shí)器為16s,并且進(jìn)入掉電模式,否則直接掉電
- if(MENU_DATA_Table.Time_s.Suicide_Time > 0)
- {
- //掉電喚醒定時(shí)器初始化
- WKTCL = 0xfe; //設(shè)置喚醒周期16s
- WKTCH = 0xff; //使能掉電喚醒定時(shí)器
- PCON |= 0x02;//掉電
- _nop_();
- _nop_();
- InitSPI();
- }
- else
- {
- PCON |= 0x02;//掉電
- _nop_();
- _nop_();
- InitSPI();
- }
- while(MENU_DATA_Table.Time_s.Suicide_Time > 0)
- {
- //記錄掉電次數(shù),如果等于定時(shí)時(shí)間則自殺,否則繼續(xù)掉電
- ShutDownCounter++;
- if(ShutDownCounter > MENU_DATA_Table.Time_s.Suicide_Time*4+1)
- {
- SHUTDOWN = 0;
- }
- //如果是由掉電喚醒定時(shí)器喚醒,則繼續(xù)掉電;否則清計(jì)數(shù)器跳出循環(huán)
- if(WKTCL==0xff && WKTCH==0xff)
- {
- PCON |= 0x02;//掉電
- _nop_();
- _nop_();
- InitSPI();
- }
- else
- {
- ShutDownCounter = 0;
- break;
- }
- _nop_();
- _nop_();
- }
- IronUse_Status.Coder = USING;
- }
- }
- }
- }
- /************************************************************
- * 函數(shù)名 : timer2_int
- * 功能說(shuō)明 : 大字設(shè)定溫度和擴(kuò)展按鍵掃描,讀室溫和電壓
- *
- * 輸入?yún)?shù) : 無(wú)
- * 輸出參數(shù) : 無(wú)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- void timer2_int (void) interrupt TIMER2_VECTOR
- {
- static unsigned char SetTempCounter = 0;
- //如果正在設(shè)定溫度,那么大字顯示設(shè)定溫度值
- if(SetTempFlag == 1)
- {
- SetTempCounter++;
- }
- if(SetTempCounter == 50)
- {
- SetTempCounter = 0;
- SetTempFlag = 0;
- if((MENU_DATA_Table.Temp_s.Default_Temp == 0) || (MENU_DATA_Table.Temp_s.Default_CH == 0))
- {
- EEPROM_SectorErase(0x0);
- EEPROM_write_n(0x0,(unsigned char *)&MENU_DATA_Table,sizeof(MENU_DATA_Table));
- }
- }
-
- //讀室溫和電壓
- RoomTemp = GetRoomTemp();
- VCCVoltage = GetVoltage();
-
- //按鍵掃描
- Key_Scan();
- }
- void exint4() interrupt 16
- {}
-
- //float ADC_BandGap_Volt(void) //讀取ADC內(nèi)部電壓數(shù)據(jù),轉(zhuǎn)化為10位
- //{
- // unsigned int BangGap=0;
- // unsigned char code *BandAddr;
- //
- // BandAddr=BangGap_Addr;
- // BangGap=*BandAddr++;
- // BangGap=BangGap<<8;
- // BangGap+=*BandAddr;
- //
- // return (float)BangGap / 4.88f;
- //}
- //u16 ADC_GetDat(u8 Ch,u8 ChASF) //讀ADC數(shù)據(jù)
- //{
- // u16 ADC_Dat=0;
- // P1ASF=ChASF;
- // ADC_CONTR&=~(0x07<<0);
- // ADC_CONTR|=(Ch&0x07)<<0;
- // ADC_CONTR&=~(1<<4);
- // ADC_RES=0;
- // ADC_RESL=0;
- // ADC_CONTR|=1<<3; //啟動(dòng)ADC轉(zhuǎn)換
- //
- // while((ADC_CONTR&0x10)==0); //等待ADC轉(zhuǎn)換完成
- // ADC_CONTR&=~(1<<4);
- //
- // ADC_Dat=ADC_RES<<8;
- // ADC_Dat+=ADC_RESL;
- //
- // return ADC_Dat;
- //}
- //u16 ADC_BandGap_Dat() //讀取ADC基準(zhǔn)電壓
- //{
- // u16 AD_Return = 0;
- // u8 i;
- //
- // ADC_GetDat(0,0x00); //讀取2次取得穩(wěn)定
- // ADC_GetDat(0,0x00);
- //
- // EA = 0;
- // for (i = 0 ; i <DATA_SUM ; i++ ) //連續(xù)讀取DATA_SUM次基準(zhǔn)電壓 求和取得平均值
- // {
- // AD_Return += ADC_GetDat(0,0x00);
- // }
- // EA = 1;
- // return AD_Return >> DATA_DIV;
- //}
- //u16 ADC_ReadCH_Dat(u8 CH) //讀取通道電壓
- //{
- // u16 AD_Return = 0;
- // u8 i;
- //
- // ADC_GetDat(CH,0xff); //讀取2次取得穩(wěn)定
- // ADC_GetDat(CH,0xff);
- //
- // EA = 0;
- // for (i = 0 ; i <DATA_SUM ; i++ ) //連續(xù)讀取DATA_SUM次基準(zhǔn)電壓求和取得平均值
- // {
- // AD_Return += ADC_GetDat(CH,0xff);
- // }
- // EA = 1;
- // return AD_Return >> DATA_DIV;
- //}
- /************************************************************
- * 函數(shù)名 : Get_ADC10bitResult
- * 功能說(shuō)明 : 讀ADC值
- *
- * 輸入?yún)?shù) : channel,ADC通道號(hào)(0-7)
- * 輸出參數(shù) : 返回ADC值(0-1023)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- unsigned int Get_ADC10bitResult(unsigned char channel)
- {
- u16 adc;
- u8 i;
- ADC_RES = 0;
- ADC_RESL = 0;
- ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
- NOP(4); //對(duì)ADC_CONTR操作后要4T之后才能訪問(wèn)
- for(i=0; i<250; i++) //超時(shí)
- {
- if(ADC_CONTR & ADC_FLAG)
- {
- ADC_CONTR &= ~ADC_FLAG;
- adc = (u16)(ADC_RES & 3);
- adc = (adc << 8) | ADC_RESL;
- return adc;
- }
- }
- return 1024; //錯(cuò)誤,返回1024,調(diào)用的程序判斷
- }
- /************************************************************
- * 函數(shù)名 : DisableEEPROM
- * 功能說(shuō)明 : 失能EEPROM
- *
- * 輸入?yún)?shù) : 無(wú)
- * 輸出參數(shù) : 無(wú)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- void DisableEEPROM(void)
- {
- ISP_CONTR = 0; //禁止ISP/IAP操作
- ISP_CMD = 0; //去除ISP/IAP命令
- ISP_TRIG = 0; //防止ISP/IAP命令誤觸發(fā)
- ISP_ADDRH = 0xff; //清0地址高字節(jié)
- ISP_ADDRL = 0xff; //清0地址低字節(jié),指向非EEPROM區(qū),防止誤操作
- }
- /************************************************************
- * 函數(shù)名 :
- * 功能說(shuō)明 : 從指定EEPROM首地址讀出n個(gè)字節(jié)放指定的緩沖.
- *
- * 輸入?yún)?shù) : EE_address讀出EEPROM的首地址,DataAddress讀出數(shù)據(jù)放緩沖的首地址,number讀出的字節(jié)長(zhǎng)度.
- * 輸出參數(shù) : 無(wú)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
- {
- EA = 0; //禁止中斷
- ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); //設(shè)置等待時(shí)間,允許ISP/IAP操作,送一次就夠
- ISP_READ(); //送字節(jié)讀命令,命令不需改變時(shí),不需重新送命令
- do
- {
- ISP_ADDRH = EE_address / 256; //送地址高字節(jié)(地址需要改變時(shí)才需重新送地址)
- ISP_ADDRL = EE_address % 256; //送地址低字節(jié)
- ISP_TRIG(); //先送5AH,再送A5H到ISP/IAP觸發(fā)寄存器,每次都需要如此
- //送完A5H后,ISP/IAP命令立即被觸發(fā)啟動(dòng)
- //CPU等待IAP完成后,才會(huì)繼續(xù)執(zhí)行程序。
- _nop_();
- *DataAddress = ISP_DATA; //讀出的數(shù)據(jù)送往
- EE_address++;
- DataAddress++;
- }while(--number);
- DisableEEPROM();
- EA = 1; //重新允許中斷
- }
- /************************************************************
- * 函數(shù)名 : EEPROM_SectorErase
- * 功能說(shuō)明 : 把指定地址的EEPROM扇區(qū)擦除
- *
- * 輸入?yún)?shù) : EE_address:要擦除的扇區(qū)EEPROM的地址.
- * 輸出參數(shù) : 無(wú)
- *
- * 修改記錄 : 新增函數(shù),第一次編輯
- * 歷次作者 : 王志浩
- * 日期 : 2017-10-18
- *************************************************************/
- void EEPROM_SectorErase(u16 EE_address)
- {
- EA = 0; //禁止中斷
- //只有扇區(qū)擦除,沒(méi)有字節(jié)擦除,512字節(jié)/扇區(qū)。
- //扇區(qū)中任意一個(gè)字節(jié)地址都是扇區(qū)地址。
- ISP_ADDRH = EE_address / 256; //送扇區(qū)地址高字節(jié)(地址需要改變時(shí)才需重新送地址)
- ISP_ADDRL = EE_address % 256; //送扇區(qū)地址低字節(jié)
- ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); //設(shè)置等待時(shí)間,允許ISP/IAP操作,送一次就夠
- ISP_ERASE(); //送扇區(qū)擦除命令,命令不需改變時(shí),不需重新送命令
- ISP_TRIG();
- _nop_();
- DisableEEPROM();
- EA = 1; //重新允許中斷
- }
- /************************************************************
- * 函數(shù)名 : EEPROM_write_n
- * 功能說(shuō)明 : 把緩沖的n個(gè)字節(jié)寫(xiě)入指定首地址的EEPROM.
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (38.48 KB, 下載次數(shù): 76)
下載附件
2018-8-29 17:01 上傳
所有資料51hei提供下載:
白光烙鐵_V3.1.1硬件SPI(天山V1.2).rar
(995.1 KB, 下載次數(shù): 357)
2018-8-29 09:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: erli122 時(shí)間: 2018-8-30 11:03
感謝分享 我想做一個(gè)
作者: ptlantu 時(shí)間: 2018-8-30 15:14
這個(gè)可以有,感謝
作者: engcyh 時(shí)間: 2018-8-31 11:31
謝謝分享,花這么多精力寫(xiě)的,這么好的源碼能拿出來(lái)共享不是一般人能做得到的,謝謝!
作者: xiaoyuxinke 時(shí)間: 2018-8-31 21:42
可惜沒(méi)代碼,下載不了

作者: lxjmcuahz 時(shí)間: 2018-9-5 15:22
謝謝樓主分享,學(xué)習(xí)下。
作者: ywgsky 時(shí)間: 2018-9-25 09:19
謝謝分享
作者: zbfdyw 時(shí)間: 2018-9-25 10:19
感謝樓主分享,下載學(xué)習(xí)!
作者: wangxindir 時(shí)間: 2018-9-25 10:52
謝謝,我也學(xué)習(xí)一下
作者: 快樂(lè)眼淚 時(shí)間: 2018-9-25 11:06
這個(gè)好復(fù)雜!
作者: hidled 時(shí)間: 2018-9-30 20:23
下載研究一下!
作者: xiangy 時(shí)間: 2018-10-18 21:50
感謝樓主分享,下載學(xué)習(xí)!
作者: 明記冷氣 時(shí)間: 2018-11-2 03:34
樓主無(wú)私精神
作者: wxyz 時(shí)間: 2018-11-5 14:10
謝謝樓主分享的資料。
作者: Thewind 時(shí)間: 2019-5-1 20:30
謝謝,我也學(xué)習(xí)一下
作者: cjhk 時(shí)間: 2019-5-5 09:01
謝謝樓主 謝謝
作者: 杰瑤電子 時(shí)間: 2019-5-11 22:31
感謝樓主開(kāi)源
作者: xinyu_08 時(shí)間: 2019-5-14 09:32
硬件套件你有賣嗎?想買來(lái)玩玩
作者: ht61929765 時(shí)間: 2019-5-29 14:06
感謝樓主開(kāi)源
作者: muelfox 時(shí)間: 2019-11-22 00:15
謝謝分享, 不支知樓主有用PID, 能自整定不?
作者: qin531100 時(shí)間: 2019-12-13 22:52
原理圖在什么文件里面?
作者: qin531100 時(shí)間: 2019-12-13 22:52
原理圖在什么文件里面 ,請(qǐng)問(wèn),有知道的嗎?
作者: 呦呦奧利給 時(shí)間: 2020-11-21 17:08
程序?qū)懙奶A,可惜沒(méi)有原理圖參考
作者: wl020807 時(shí)間: 2021-3-1 21:45
同問(wèn)????
作者: bxyyhan 時(shí)間: 2021-3-2 08:39
原理圖,固件版本不同,可以自己修改IO.
-
-
天山T12_V1.0原理圖.pdf
2021-3-2 08:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
25.4 KB, 下載次數(shù): 73, 下載積分: 黑幣 -5
作者: az51hei 時(shí)間: 2022-1-26 09:51
非常感謝樓主的開(kāi)源程序,程序非常牛,且可以根據(jù)自己需要進(jìn)行修改,真的很好。
作者: az51hei 時(shí)間: 2022-1-26 09:59
這是同時(shí)支持4位數(shù)碼管和OLED12864顯示的T12控制板原理圖,不過(guò)IO與天山版的有所不同,需要修改IO。
-
-
數(shù)顯T12控制板.PDF
2022-1-26 09:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
79.9 KB, 下載次數(shù): 31, 下載積分: 黑幣 -5
作者: startabc 時(shí)間: 2022-8-30 18:05
剛買了個(gè)T12 用的這個(gè)方案
作者: jtszwj 時(shí)間: 2023-1-6 23:11
非常感謝樓主的開(kāi)源程序
作者: 無(wú)名!! 時(shí)間: 2023-1-13 09:54
程序有點(diǎn)多啊,不過(guò)oled固定在里面也是挺厲害,不容易損壞
作者: ddny 時(shí)間: 2024-1-9 14:36
學(xué)習(xí)一下
作者: sunhai1979 時(shí)間: 2024-1-15 09:18
文章真是好,抽時(shí)間學(xué)習(xí)!!
作者: nan77240 時(shí)間: 2024-12-21 23:16
多年以后i感謝樓主開(kāi)源
作者: zwxzj 時(shí)間: 2024-12-22 10:47
感謝樓主把最好的東西無(wú)私的分享給大家

作者: gonglitian 時(shí)間: 2024-12-23 13:08
下載復(fù)刻一個(gè)T12,消耗一下手里的T12耗材。感謝作者開(kāi)源。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |