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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16705|回復(fù): 34
打印 上一主題 下一主題
收起左側(cè)

天山OLED白光烙鐵單片機(jī)源碼與使用手冊V3.1.1 王志浩

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:138450 發(fā)表于 2018-8-29 09:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
diy 白光T12 用

天山OLED烙鐵使用手冊

0 特別聲明
0.1 版權(quán)聲明
程序中所有代碼均由本人(即全體著作權(quán)所有人,下同)開發(fā)完成,程序開源后授權(quán)任何人可免費使用本程序(既可直接使用固件,亦可在程序基礎(chǔ)上修改出任何衍生版本),但上述程序及本文檔著作權(quán)屬本人所有。
硬件設(shè)計中參考了廣大網(wǎng)友的建議,不再聲明版權(quán),但請各位使用者尊重本人和其他網(wǎng)友的勞動成果。
0.2 開源協(xié)議
除本人以外的任何人對本程序(包括但不限于此版本,下同)進(jìn)行修改后的任何衍生版本,以及以本程序思路或部分代碼為基礎(chǔ)設(shè)計的其它程序,必需開源所有代碼。未經(jīng)第一著作權(quán)所有人(@BEAT)之書面授權(quán),任何單位和個人不得將上述程序(包括本程序及所有衍生版本和參考本程序設(shè)計的其它程序)及本文檔以任何形式用于商業(yè)用途。
本程序受著作權(quán)法保護(hù),本人保留對侵權(quán)者及違反開源協(xié)議者追究法律責(zé)任的權(quán)利。請遵守此開源協(xié)議,尊重原作者、及所有衍生版本作者的勞動成果,遵守著作權(quán)人所在地法律法規(guī)!
0.3 免責(zé)聲明
              本人只進(jìn)行程序的設(shè)計,并無償分享給網(wǎng)友。本人只保證該程序在我的手中可以正常工作,不保證其他人以任何形式得到的電路板、元器件及源程序均可正常工作,不承擔(dān)其他任何人使用本人所設(shè)計的所有軟硬件造成的一切后果。如您不同意此聲明,請您立即刪除本文檔及其相關(guān)程序。
0.4 致謝
              本程序中部分內(nèi)容參考了@BEAT的相關(guān)算法;@ xzhyahoo1在V2.0和V2.1版本設(shè)計時提供了建議;V2.8版本修復(fù)的BUG是由@理解源于真誠發(fā)現(xiàn)的。V3.0中的UI是由@BEAT設(shè)計的。以上朋友的幫助,對程序的開發(fā)和更新起到了良好的作用,在此一并致謝。

1 硬件準(zhǔn)備1.1 硬件介紹1.1.1 本人設(shè)計的PCB介紹
①存在已知問題是編碼器和OLED屏距離太近,如果選用1.3寸OLED,編碼器裝上旋鈕后會擋住部分OLED屏。因此需要各位試用的朋友自己飛線,或給屏裝上排線,或EC11采用飛線,總之將屏和編碼器分開。
              ②焊接蜂鳴器和編碼器時,應(yīng)先焊蜂鳴器再焊編碼器,并用膠帶或熱熔膠將蜂鳴器的兩個焊盤妥善絕緣,否則編碼器背部的金屬會將蜂鳴器短路,并且需要將編碼器兩個固定腳剪掉。
              ③選用5V供電的OLED屏?xí)r,R4/R5應(yīng)選用1k,采用3.3V供電時,R4/R5選用470R,具體選用5V還是3.3V,由JP1跳線決定。
              ④請在5V加470uF以上電容,運放VCC加104電容。
⑤電容C5設(shè)計有誤,實際不需要。
1.1.2 智萌版硬件介紹
              ①正面三個電容不需要焊接,否則無法下載程序;
              ②建議MOS更換為AO4413.
1.1.3 海綿寶寶版硬件介紹
              ①單片機(jī)應(yīng)改為STC15W2K60S2;
1.2 燒錄固件1.2.1 燒錄步驟
              固件在Prj文件夾下Objects子文件夾內(nèi),文件名為HAKKO.hex。
①將CH340模塊連接焊臺,先只接TX、RX、GND三根線,VCC不接;
②按圖1-1步驟勾選相關(guān)選項;
圖1-1 STC-ISP軟件操作步驟
③將下載器VCC與焊臺連接。
1.2.2 燒錄失敗排查
①編碼器位置不合適,旋轉(zhuǎn)編碼器再試(請確保編碼器轉(zhuǎn)到位,不要卡在中間);
②TX、RX接反,V1.0beta版本硬件應(yīng)是T-R、R-T;
③下載器供電不穩(wěn),檢查下載器帶載后的電源電壓;
④降低下載時的最高波特率,并取消勾選“使用快速下載模式”。
2 功能介紹2.1 界面介紹
烙鐵工作時,分為兩種工作模式,即普通工作模式和通道工作模式,兩種模式可短按編碼器切換,以下將分別介紹。
2.1.1 普通工作模式
普通工作模式下,允許用戶以自定義的步進(jìn)(在菜單中可調(diào)),調(diào)整設(shè)定溫度值。步進(jìn)取值范圍為1-50。普通工作模式界面如圖2-1。
圖2-1普通工作模式界面
2.1.2 通道工作模式
              通道工作模式下,用戶可以在0~5共計6個溫度通道中選擇設(shè)定溫度,其中通道0為0℃,通道5為“最高溫度”值,其余四個通道的值可在工廠模式中設(shè)定。通道工作模式界面如圖2-2。
2.2 主菜單介紹
長按編碼器進(jìn)入一級菜單,旋轉(zhuǎn)編碼器選擇想要進(jìn)入的二級菜單,短按進(jìn)入該二級菜單。再次旋轉(zhuǎn)編碼器,將光標(biāo)移動至需要修改的具體參數(shù)上,短按編碼器選中該內(nèi)容(選中后該選項值顯示在文字后方)。再次旋轉(zhuǎn)編碼器修改該值,修改完成后短按編碼器取消選中(取消選中后該選項值消失),再次旋轉(zhuǎn)編碼器可以移動光標(biāo)至其他參數(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ù)時的溫度步進(jìn)值;
休眠溫度:烙鐵進(jìn)入“休眠模式”下的工作溫度,該選項值如小于50,則休眠時不加熱,且該選項值不能超過“最高溫度”的設(shè)定值(已在固件中進(jìn)行了限制,下同);
默認(rèn)溫度:烙鐵開機(jī)后默認(rèn)的設(shè)定溫度,該選項值不能超過“最高溫度”的設(shè)定值,如希望焊臺保存上次關(guān)機(jī)時的設(shè)定溫度值,則可以將該選項置為“0”;
最高溫度:烙鐵可以設(shè)置的最高溫度,該選項值不能超過500(在溫度超過450℃后精度沒有保證,請謹(jǐn)慎使用);
2.2.2 時間設(shè)置
休眠時間:當(dāng)烙鐵手柄停止振動且編碼器沒有動作后開始計時,到時進(jìn)入休眠模式,以“休眠溫度”進(jìn)行工作,直至進(jìn)入“待機(jī)模式”,在此時間內(nèi)通過振動手柄或編碼器動作可喚醒烙鐵,重新以原先的設(shè)定溫度進(jìn)行加熱。如不需要休眠,該位置0。該位置0后,不會進(jìn)入休眠和待機(jī)模式,也不會切斷220V電源。
待機(jī)時間:在進(jìn)入休眠模式后開始計時,到時進(jìn)入待機(jī)模式,烙鐵停止加熱。該位置0表示到休眠時間后直接進(jìn)入待機(jī)模式。待機(jī)模式下,只能由編碼器動作喚醒烙鐵。
關(guān)機(jī)時間:在進(jìn)入待機(jī)模式后開始計時,到時由單片機(jī)IO口(可自定義,參見第三章第五節(jié))給出低電平信號,由硬件配合切斷220V電源,該位置0表示不切斷220V電源,沒有硬件配合的該位無效,可置任何值不影響程序運行。由于單片機(jī)掉電喚醒定時器時鐘不準(zhǔn),該時間存在較大誤差(20%)。
2.2.3 通道設(shè)置
默認(rèn)通道:烙鐵開機(jī)后默認(rèn)的設(shè)定通道,該選項取值范圍為1-5,如希望焊臺保存上次關(guān)機(jī)時的設(shè)定通道,則可以將該選項置為“0”;
通道1-4:允許用戶設(shè)定通道1-通道4的通道值,在通道模式中調(diào)用,該選項取值不得大于“最高溫度”值。
2.2.4 其它設(shè)置
              焊咀選擇:允許用戶在工廠模式中事先儲存4支烙鐵頭的參數(shù);
              振動閾值:烙鐵頭振動喚醒烙鐵時的靈敏度設(shè)定,取值0~10,0為最靈敏;
              按鍵音量:編碼器轉(zhuǎn)動或按下時的音量設(shè)定,取值為0~10,0為關(guān)閉蜂鳴器;
保護(hù)電壓:烙鐵停止加熱的電壓值,當(dāng)電源(或電池)電壓低于該設(shè)定值時,烙鐵停止加熱,但不影響菜單操作;
溫度波動:烙鐵顯示溫度波動較大時,可提高該值使顯示穩(wěn)定,取值范圍1-5,1為顯示實時值。
恢復(fù)出廠設(shè)置:如需恢復(fù)出廠設(shè)置,則將該位置1,退出菜單后所有參數(shù)均恢復(fù)出廠設(shè)置。
2.2.5 焊咀校準(zhǔn)
              焊咀選校: 如需矯正并存儲烙鐵頭參數(shù),需將該選項調(diào)整為想要校準(zhǔn)的烙鐵頭編號,之后在其余子菜單中進(jìn)行校準(zhǔn)。
0~600℃: 單擊選中100℃至500℃選項后,將按照“焊咀選校”中設(shè)置的烙鐵頭編號對應(yīng)的溫度表對烙鐵加熱,取消選中后自動停止加熱。在校準(zhǔn)過程中,如實際溫度低于設(shè)定的溫度,則調(diào)大AD值;如實際溫度高于設(shè)定的溫度,則調(diào)小AD值。0℃及600℃一般為默認(rèn)值無需調(diào)整。溫度有過沖比較嚴(yán)重的現(xiàn)象時,反復(fù)多次校準(zhǔn)溫度一般可以解決. 在烙鐵頭校準(zhǔn)時,切記該組數(shù)據(jù)必須嚴(yán)格從小到大遞增,否則溫度無效。例如,如果校準(zhǔn)前:100℃,AD=110;200℃,AD =270;300℃,AD = 380,當(dāng)校準(zhǔn)200℃時,溫度不足200℃,需要將AD值從270調(diào)大,但其大小不能超過300°時的AD值380,如果從270調(diào)到380溫度還不能達(dá)到200℃,那就說明300℃時的380這個值也偏小了,需先將300℃的380也增大。
2.2.6 其他校準(zhǔn)
按鍵校準(zhǔn):不同廠家的編碼器AB通道不一定相同,如編碼器方向與習(xí)慣不符,可將該選項調(diào)整為1,默認(rèn)為0。
電壓校準(zhǔn):如需矯正電源電壓,需旋轉(zhuǎn)編碼器將當(dāng)前電源電壓的測量值乘10取整保存在菜單中,如當(dāng)前電源電壓為24.4V,那么將該值調(diào)整為244即可;(注意此值對應(yīng)的編碼器步進(jìn)不為1,需多次旋轉(zhuǎn)才會進(jìn)1)
室溫校準(zhǔn):如需矯正室溫,需旋轉(zhuǎn)編碼器將當(dāng)前室溫的測量值取證保存在菜單中,如當(dāng)前室溫為18℃,那么將該值調(diào)整為18即可;(注意此值對應(yīng)的編碼器步進(jìn)不為1,需多次旋轉(zhuǎn)才會進(jìn)1)

3 程序修改
為方便各位朋友在本程序的基礎(chǔ)上繼續(xù)添加或修改自己需要的功能,在此介紹一些常見的問題。
3.1 準(zhǔn)備工作
首先需安裝Keil軟件(見群文件),并下載解壓STC-ISP軟件(見群文件)。添加型號和頭文件到Keil中,如圖3-1。然后打開prj文件夾下的HAKKO.uvproj文件即可開始修改。
圖3-1 添加型號和頭文件
3.2 可快捷修改的幾個設(shè)置
              (1)打開程序文件的config.h文件,找到圖3-2(a)所示位置。
(a) config.h文件部分代碼
(b)編譯按鈕
圖3-2 可快捷操作的幾個設(shè)置
(2)根據(jù)需要注釋相關(guān)定義;
(3)設(shè)置完畢后按編譯按鈕,編譯按鈕在Keil界面左上角如圖3-2(b)所示的紅圈內(nèi)。
3.3 修改開機(jī)LOGO
①準(zhǔn)備一張128*64的logo圖片,單色BMP格式;
②打開PCtoLCD2002軟件;
③點菜單上的模式,改成圖片模式。
④點菜單上文件、打開(打開準(zhǔn)備好的bmp格式的logo圖片)如圖3-3;
圖3-3
⑤點上面的齒輪,設(shè)字模選項,陰碼,列行式,逆向,C51,自定義格式(刪去行前綴和行后綴的大括號),如圖3-4所示;
圖3-4 字模選項
⑥設(shè)定好后,點確定,然后點生成字模,如圖3-6;
⑦復(fù)制生成的代碼,替換源程序中LQ12864.C中的LOGO[1024]數(shù)組,如圖3-5所示;
圖3-5 替換LOGO數(shù)組
⑧點擊圖3-2(b)所示的編譯按鈕,編譯后即可下載。
3.4 提高烙鐵最大輸出功率
烙鐵最大輸出功率(24V側(cè))實測已經(jīng)達(dá)75w以上,如果認(rèn)為不滿意可以手動修改程序。但提高效果并不明顯且會造成進(jìn)口頭溫度檢測的波動。為滿足更多人需要,特給出修改方法:
(1)打開程序文件的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功能并改用定時器生成PWM波,如圖3-7所示.
(1)打開程序的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é)語
本程序為天山T12焊臺最終版程序,程序中不再新增任何功能,不再修復(fù)任何不影響使用的BUG。軟硬件均已經(jīng)開源,希望各位朋友在研究、使用的同時切實遵守開源協(xié)議,尊重各版本作者勞動成果,共同營造一個自由、平等、排除商業(yè)模式干擾的交流平臺。再次感謝開發(fā)本焊臺過程中向我提供過幫助的所有人,衷心感謝!


修訂歷史
版本
更新日期
更新說明
作者
V1.0
2017-06-05
第一次發(fā)布
王志浩
V2.0
2017-08-23
增加中文菜單,優(yōu)化溫度控制,修復(fù)若干BUG
王志浩
V2.1
2017-08-29
修復(fù)工廠模式中的若干BUG,優(yōu)化溫度控制
王志浩
V2.2
2017-08-30
修復(fù)蜂鳴器音量的相關(guān)BUG
王志浩
V2.3
2017-08-31
調(diào)整進(jìn)入工廠模式的方法
王志浩
V2.4
2017-09-01
調(diào)整顯示界面,修復(fù)若干BUG
王志浩
V2.5
2017-09-03
提高回溫速度,提高烙鐵可靠性
王志浩
V2.6
2017-09-13
修改程序適用于采用V1.0beta版硬件
王志浩
V2.7
2017-09-18
修改休眠和待機(jī)邏輯
王志浩
V2.7A
2017-09-19
修復(fù)若干BUG
王志浩
V2.8
2017-09-21
修復(fù)重要BUG,改進(jìn)程序修改方法
王志浩
V2.9.0
2017-10-07
增加進(jìn)口頭的兼容性,調(diào)整程序結(jié)構(gòu),修復(fù)BUG
王志浩
V2.9.1
2017-10-08
優(yōu)化程序結(jié)構(gòu),優(yōu)化對進(jìn)口頭的兼容性
王志浩
V2.9.2
2017-10-09
優(yōu)化溫度顯示,增加按鍵功能
王志浩
V2.9.3
2017-10-10
優(yōu)化按鍵功能,優(yōu)化菜單顯示,修復(fù)BUG
王志浩
V2.9.4
2017-10-11
徹底移除STC庫函數(shù)
王志浩
V2.9.5
2017-10-20
修改程序結(jié)構(gòu),為移植UI做最后準(zhǔn)備
王志浩
V3.0.0
2017-10-21
更換菜單界面,取消工廠模式,修改焊咀校準(zhǔn)
BEAT
V3.0.1
2017-10-22
修復(fù)若干BUG
BEAT
V3.0.2
2017-10-23
修復(fù)若干BUG
王志浩
V3.1.0
2017-10-27
更換新的UI界面,修復(fù)若干BUG
王志浩
V3.0.0 版更新詳細(xì)說明:
①更換新的菜單界面;
②將工廠模式功能移植到主菜單中;
③修改校準(zhǔn)烙鐵頭的方法;
V3.0.1 版更新詳細(xì)說明:
①修復(fù)1.3吋OLED顯示不全的BUG;
②修復(fù)菜單中默認(rèn)通道不能置0的BUG;
③修復(fù)菜單中時間設(shè)置最大只能為10的BUG;
V3.0.2 版更新詳細(xì)說明:
①修復(fù)部分硬件蜂鳴器不響的BUG;
②修復(fù)休眠時屏幕顯示的BUG;
③修復(fù)菜單中版本號顯示的BUG;
④嘗試修復(fù)待機(jī)喚醒的花屏BUG.
V3.1.0 版更新詳細(xì)說明:
①在保留原先UI界面的同時,添加仿JBC界面可供選擇;
②修復(fù)最高溫度限制可能無效的BUG;
③修復(fù)部分獨立按鍵無提示音的BUG。


單片機(jī)源程序如下:
  1. /*********************************************************************************
  2. * COPYRIGHT NOTICE
  3. * Copyright (c) 2017, XinJiang University
  4. * All rights reserved.
  5. *
  6. * 文件名                :        Sys_Basic.c
  7. * 描述                 :        系統(tǒng)基礎(chǔ)函數(shù),包括中斷和MCU底層,延時函數(shù)等
  8. *
  9. * 版本                        :        V3.0.2
  10. * 作者                        :        王志浩
  11. * 日期                        :        2017-10-22
  12. *
  13. * 以下全部程序之著作權(quán)歸屬新疆大學(xué)所有,受《中華人民共和國著作權(quán)法》保護(hù)!
  14. * 未經(jīng)第一著作權(quán)所有人書面授權(quán),任何單位和個人不得將以下程序用于商業(yè)用途!
  15. * 修改此程序請保留上述版權(quán)聲明,引用程序請注明出處!
  16. **********************************************************************************/
  17. #include "config.h"

  18. /********************** 全局變量定義 ************************/
  19. PWM_s                                                        PWM                                                 =         {0,Disable};        //PWM相關(guān)變量
  20. IRON_STATUS_e                        IronStateFlag         =         NORMAL;                                //烙鐵工作狀態(tài)標(biāo)志位
  21. TIMER_s                                                Timer                                                 =         {0,0,0};                        //定時計數(shù)器
  22. IRONUSE_STATUS_s        IronUse_Status         =         {FREE,FREE};        //烙鐵使用狀態(tài)標(biāo)志位


  23. /************************************************************
  24. * 函數(shù)名                :        timer0_int
  25. * 功能說明        :        定時器0中斷,生成PWM波,蜂鳴器響
  26. *
  27. * 輸入?yún)?shù)        :        無
  28. * 輸出參數(shù)        :        無
  29. *
  30. * 修改記錄        :        新增函數(shù),第一次編輯
  31. * 歷次作者        :        王志浩
  32. * 日期                        :        2017-10-18
  33. *************************************************************/
  34. void timer0_int (void) interrupt TIMER0_VECTOR
  35. {
  36.         static unsigned int                 BeepCounter = 0;
  37.         static unsigned char         PWM_counter        =        0;
  38.        
  39.         //PWM生成
  40.         PWM_counter++;
  41.         if((PWM_counter<PWM.Duty) && PWM.Run)
  42.                 IRON = 1;
  43.                 //IRON = 0;
  44.         else
  45.                 IRON = 0;
  46.        
  47.         //蜂鳴器響
  48.         //旋轉(zhuǎn)或按下后BeepCounterFlag被置位,開始計數(shù)
  49.         if(BeepCounterFlag)
  50.         {
  51.                 BeepCounter++;
  52.         }
  53.         //計數(shù)小于設(shè)定值時打開,大于時關(guān)閉,Beep_Volume的值決定了占空比
  54.         if((BeepCounter > 0) && (BeepCounter <= MENU_DATA_Table.Other_s.Beep_Volume*BEEP_TIME))
  55.         {
  56.                 BEEP_ON;
  57.         }
  58.         else
  59.         {
  60.                 BEEP_OFF;
  61.         }
  62.         //清零
  63.         if(BeepCounter >MENU_DATA_Table.Other_s.Beep_Volume*BEEP_TIME)
  64.         {
  65.                 BeepCounter = 0;
  66.                 BeepCounterFlag = 0;
  67.         }
  68. }


  69. /************************************************************
  70. * 函數(shù)名                :        timer1_int
  71. * 功能說明        :        定時器1中斷,主要控制
  72. *
  73. * 輸入?yún)?shù)        :        無       
  74. * 輸出參數(shù)        :        無
  75. *
  76. * 修改記錄        :        新增函數(shù),第一次編輯
  77. * 歷次作者        :        王志浩
  78. * 日期                        :        2017-10-18
  79. *************************************************************/       
  80. void timer1_int (void) interrupt TIMER1_VECTOR
  81. {
  82.         static unsigned int                 IronUseCounter=0;
  83.         static        unsigned int         ShutDownCounter = 0;
  84.         static unsigned char         P01_Old = 0;
  85.        
  86.         //1ms處理部分
  87.         Timer.mSec++;                        //定時器0分段計數(shù)器自加
  88.         EC11_Capture();                //捕捉EC11信息       

  89.         //10ms處理部分
  90.         if(Timer.mSec%10 == 0)
  91.         {
  92.                 if(IronUse_Status.Handle || IronUse_Status.Coder)//烙鐵或編碼器用了,那要看看現(xiàn)在是不是休眠什么的狀態(tài)了
  93.                 {
  94.                         if(IronStateFlag)
  95.                         {
  96.                                 Timer.Sec = 0;
  97.                                 Timer.Min = 0;
  98.                                 ec11_state.Key = KEY_FREE;
  99.                                 ec11_state.Coder = CODER_FREE;
  100.                                 IronStateFlag = NORMAL;
  101.                                 Beep(MENU_DATA_Table.Other_s.Beep_Volume);
  102.                         }
  103.                 }
  104.         }
  105.        
  106.         //100ms處理部分
  107.         if(Timer.mSec%100 == 0)
  108.         {
  109.                 //水銀開關(guān)跳變沿檢測并計數(shù)
  110.                 if(SLEEP != P01_Old)
  111.                 {
  112.                         IronUseCounter++;
  113.                 }
  114.                 P01_Old = SLEEP;
  115.                
  116.                 //溫度控制(正常工作按IronTemp_AM控制,休眠按Slp_Temp控制,否則關(guān)烙鐵)
  117.                 if(IronStateFlag == NORMAL)
  118.                 {
  119.                         IronTempControl(IronTemp.Set);
  120.                 }
  121.                 else if(IronStateFlag==SLEEPING)
  122.                 {
  123.                         IronTempControl(MENU_DATA_Table.Temp_s.Slp_Temp);
  124.                 }
  125.                 else
  126.                 {
  127.                         IronTempControl(0);
  128.                 }
  129.         }
  130.        
  131.         //1s處理部分
  132.         if(Timer.mSec == 1000)
  133.         {
  134.                 //一秒內(nèi)看10次跳變沿,如果這10次有N次烙鐵手柄狀態(tài)發(fā)生變化,那么認(rèn)為是確實在使用
  135.                 if(IronUseCounter>MENU_DATA_Table.Other_s.Shock_Sensor)
  136.                 {
  137.                         IronUse_Status.Handle = USING;
  138.                 }
  139.                 else
  140.                 {
  141.                         IronUse_Status.Handle = FREE;
  142.                 }
  143.                 //看完后清計數(shù)器
  144.                 IronUseCounter = 0;
  145.                
  146.                 //如果認(rèn)為沒有使用,那么開始計時,只要用了就清零(烙鐵沒有使用&&編碼器沒有使用&&沒有進(jìn)菜單)
  147.                 if(IronUse_Status.Handle == FREE && IronUse_Status.Coder == FREE && ShutdownCounterFlag==0)
  148.                 {
  149.                         Timer.Sec++;
  150.                 }
  151.                 else
  152.                 {
  153.                         Timer.Sec = 0;
  154.                         Timer.Min = 0;
  155.                         IronUse_Status.Coder = FREE;
  156.                 }
  157.                 Timer.mSec = 0;
  158.         }
  159.        
  160.         //1min處理部分
  161.         if(Timer.Sec == 55)//定時不準(zhǔn)
  162.         {
  163.                 Timer.Min++;
  164.                 Timer.Sec = 0;
  165.                 //以下是休眠、關(guān)屏、和軟關(guān)機(jī)
  166.                 //如果 (睡眠時間不為0&&在正常工作狀態(tài))
  167.                 if((MENU_DATA_Table.Time_s.Slp_Time > 0) && (IronStateFlag == NORMAL))
  168.                 {
  169.                         if(Timer.Min == MENU_DATA_Table.Time_s.Slp_Time)
  170.                         {
  171.                                 IronStateFlag = SLEEPING;
  172.                                 Beep(MENU_DATA_Table.Other_s.Beep_Volume);
  173.                                 //清計時器為待機(jī)做準(zhǔn)備
  174.                                 Timer.Sec = 0;
  175.                                 Timer.Min = 0;
  176.                         }
  177.                 }
  178.                 //如果軟關(guān)機(jī)時間>=0&&已經(jīng)休眠
  179.                 if((MENU_DATA_Table.Time_s.Shutdown_Time >= 0) && (IronStateFlag == SLEEPING))
  180.                 {
  181.                         if(Timer.Min == MENU_DATA_Table.Time_s.Shutdown_Time)
  182.                         {
  183.                                 //清計時器為掉電喚醒做準(zhǔn)備
  184.                                 Timer.Sec = 0;
  185.                                 Timer.Min = 0;
  186.                                 //置烙鐵狀態(tài)標(biāo)志位
  187.                                 IronStateFlag = STANDBY;
  188.                                 //蜂鳴器響,確保烙鐵關(guān)到位了
  189.                                 BEEP_ON;
  190.                                 Delay_ms(100);
  191.                                 PWM.Run = Disable;
  192.                                 IRON = 0;
  193.                                 BEEP_OFF;
  194.                                 Delay_ms(150);
  195.                                 BEEP_ON;
  196.                                 Delay_ms(150);
  197.                                 OLED_CLS();
  198.                                 BEEP_OFF;
  199.                                 //如果關(guān)機(jī)時間大于零,則初始化掉電喚醒定時器為16s,并且進(jìn)入掉電模式,否則直接掉電
  200.                                 if(MENU_DATA_Table.Time_s.Suicide_Time > 0)
  201.                                 {
  202.                                         //掉電喚醒定時器初始化
  203.                                         WKTCL = 0xfe;                           //設(shè)置喚醒周期16s
  204.                                         WKTCH = 0xff;                           //使能掉電喚醒定時器
  205.                                         PCON |= 0x02;//掉電
  206.                                         _nop_();
  207.                                         _nop_();
  208.           InitSPI();
  209.                                 }
  210.                                 else
  211.                                 {
  212.                                         PCON |= 0x02;//掉電
  213.                                         _nop_();
  214.                                         _nop_();
  215.           InitSPI();
  216.                                 }
  217.                                 while(MENU_DATA_Table.Time_s.Suicide_Time > 0)
  218.                                 {
  219.                                         //記錄掉電次數(shù),如果等于定時時間則自殺,否則繼續(xù)掉電
  220.                                         ShutDownCounter++;
  221.                                         if(ShutDownCounter > MENU_DATA_Table.Time_s.Suicide_Time*4+1)
  222.                                         {
  223.                                                 SHUTDOWN = 0;
  224.                                         }
  225.                                         //如果是由掉電喚醒定時器喚醒,則繼續(xù)掉電;否則清計數(shù)器跳出循環(huán)
  226.                                         if(WKTCL==0xff && WKTCH==0xff)
  227.                                         {
  228.                                                 PCON |= 0x02;//掉電
  229.                                           _nop_();
  230.                                           _nop_();
  231.             InitSPI();
  232.                                         }
  233.                                         else
  234.                                         {
  235.                                                 ShutDownCounter = 0;
  236.                                                 break;
  237.                                         }
  238.                                         _nop_();
  239.                                         _nop_();
  240.                                 }
  241.                                 IronUse_Status.Coder = USING;
  242.                         }
  243.                 }
  244.         }
  245. }


  246. /************************************************************
  247. * 函數(shù)名                :        timer2_int
  248. * 功能說明        :        大字設(shè)定溫度和擴(kuò)展按鍵掃描,讀室溫和電壓
  249. *
  250. * 輸入?yún)?shù)        :        無
  251. * 輸出參數(shù)        :        無
  252. *
  253. * 修改記錄        :        新增函數(shù),第一次編輯
  254. * 歷次作者        :        王志浩
  255. * 日期                        :        2017-10-18
  256. *************************************************************/       
  257. void timer2_int (void) interrupt TIMER2_VECTOR
  258. {
  259.         static unsigned char SetTempCounter = 0;

  260.         //如果正在設(shè)定溫度,那么大字顯示設(shè)定溫度值
  261.         if(SetTempFlag == 1)
  262.         {
  263.                 SetTempCounter++;
  264.         }
  265.         if(SetTempCounter == 50)
  266.         {
  267.                 SetTempCounter = 0;
  268.                 SetTempFlag = 0;
  269.                 if((MENU_DATA_Table.Temp_s.Default_Temp == 0) || (MENU_DATA_Table.Temp_s.Default_CH == 0))
  270.                 {
  271.                         EEPROM_SectorErase(0x0);
  272.                         EEPROM_write_n(0x0,(unsigned char *)&MENU_DATA_Table,sizeof(MENU_DATA_Table));
  273.                 }
  274.         }
  275.        
  276.         //讀室溫和電壓
  277.         RoomTemp = GetRoomTemp();
  278.         VCCVoltage = GetVoltage();
  279.        
  280.         //按鍵掃描
  281.         Key_Scan();
  282. }

  283. void exint4() interrupt 16
  284. {}
  285.        
  286. //float ADC_BandGap_Volt(void)     //讀取ADC內(nèi)部電壓數(shù)據(jù),轉(zhuǎn)化為10位
  287. //{
  288. //        unsigned int         BangGap=0;
  289. //        unsigned char code *BandAddr;
  290. //       
  291. //        BandAddr=BangGap_Addr;
  292. //        BangGap=*BandAddr++;
  293. //        BangGap=BangGap<<8;
  294. //        BangGap+=*BandAddr;
  295. //       
  296. //        return (float)BangGap / 4.88f;
  297. //}

  298. //u16 ADC_GetDat(u8 Ch,u8 ChASF)   //讀ADC數(shù)據(jù)
  299. //{
  300. //        u16 ADC_Dat=0;
  301. //        P1ASF=ChASF;
  302. //        ADC_CONTR&=~(0x07<<0);
  303. //        ADC_CONTR|=(Ch&0x07)<<0;
  304. //        ADC_CONTR&=~(1<<4);
  305. //         ADC_RES=0;
  306. //         ADC_RESL=0;
  307. //        ADC_CONTR|=1<<3;  //啟動ADC轉(zhuǎn)換
  308. //       
  309. //        while((ADC_CONTR&0x10)==0);  //等待ADC轉(zhuǎn)換完成
  310. //        ADC_CONTR&=~(1<<4);
  311. //       
  312. //        ADC_Dat=ADC_RES<<8;
  313. //        ADC_Dat+=ADC_RESL;
  314. //       
  315. //        return ADC_Dat;
  316. //}

  317. //u16 ADC_BandGap_Dat()    //讀取ADC基準(zhǔn)電壓
  318. //{
  319. //        u16 AD_Return = 0;
  320. //        u8  i;
  321. //       
  322. //        ADC_GetDat(0,0x00);  //讀取2次取得穩(wěn)定
  323. //        ADC_GetDat(0,0x00);
  324. //       
  325. //        EA = 0;
  326. //        for (i = 0 ; i <DATA_SUM ; i++ )   //連續(xù)讀取DATA_SUM次基準(zhǔn)電壓 求和取得平均值
  327. //        {
  328. //                AD_Return += ADC_GetDat(0,0x00);
  329. //        }
  330. //        EA = 1;
  331. //        return AD_Return        >>        DATA_DIV;
  332. //}
  333. //u16 ADC_ReadCH_Dat(u8 CH)   //讀取通道電壓
  334. //{
  335. //        u16 AD_Return = 0;
  336. //        u8  i;
  337. //       
  338. //        ADC_GetDat(CH,0xff);    //讀取2次取得穩(wěn)定
  339. //        ADC_GetDat(CH,0xff);
  340. //       
  341. //        EA = 0;
  342. //        for (i = 0 ; i <DATA_SUM ; i++ )   //連續(xù)讀取DATA_SUM次基準(zhǔn)電壓求和取得平均值
  343. //        {
  344. //                AD_Return += ADC_GetDat(CH,0xff);
  345. //        }
  346. //        EA = 1;
  347. //        return AD_Return >> DATA_DIV;
  348. //}
  349. /************************************************************
  350. * 函數(shù)名                :        Get_ADC10bitResult
  351. * 功能說明        :        讀ADC值
  352. *
  353. * 輸入?yún)?shù)        :        channel,ADC通道號(0-7)
  354. * 輸出參數(shù)        :        返回ADC值(0-1023)
  355. *
  356. * 修改記錄        :        新增函數(shù),第一次編輯
  357. * 歷次作者        :        王志浩
  358. * 日期                        :        2017-10-18
  359. *************************************************************/       
  360. unsigned int        Get_ADC10bitResult(unsigned char channel)
  361. {
  362.         u16        adc;
  363.         u8        i;

  364.         ADC_RES = 0;
  365.         ADC_RESL = 0;

  366.         ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
  367.         NOP(4);                        //對ADC_CONTR操作后要4T之后才能訪問

  368.         for(i=0; i<250; i++)                //超時
  369.         {
  370.                 if(ADC_CONTR & ADC_FLAG)
  371.                 {
  372.                         ADC_CONTR &= ~ADC_FLAG;
  373.                         adc = (u16)(ADC_RES & 3);
  374.                         adc = (adc << 8) | ADC_RESL;
  375.                         return        adc;
  376.                 }
  377.         }
  378.         return        1024;        //錯誤,返回1024,調(diào)用的程序判斷
  379. }


  380. /************************************************************
  381. * 函數(shù)名                :        DisableEEPROM
  382. * 功能說明        :        失能EEPROM
  383. *
  384. * 輸入?yún)?shù)        :        無
  385. * 輸出參數(shù)        :        無
  386. *
  387. * 修改記錄        :        新增函數(shù),第一次編輯
  388. * 歷次作者        :        王志浩
  389. * 日期                        :        2017-10-18
  390. *************************************************************/       
  391. void        DisableEEPROM(void)
  392. {
  393.         ISP_CONTR = 0;                        //禁止ISP/IAP操作
  394.         ISP_CMD   = 0;                        //去除ISP/IAP命令
  395.         ISP_TRIG  = 0;                        //防止ISP/IAP命令誤觸發(fā)
  396.         ISP_ADDRH = 0xff;                //清0地址高字節(jié)
  397.         ISP_ADDRL = 0xff;                //清0地址低字節(jié),指向非EEPROM區(qū),防止誤操作
  398. }


  399. /************************************************************
  400. * 函數(shù)名                :       
  401. * 功能說明        :        從指定EEPROM首地址讀出n個字節(jié)放指定的緩沖.
  402. *
  403. * 輸入?yún)?shù)        :        EE_address讀出EEPROM的首地址,DataAddress讀出數(shù)據(jù)放緩沖的首地址,number讀出的字節(jié)長度.
  404. * 輸出參數(shù)        :        無
  405. *
  406. * 修改記錄        :        新增函數(shù),第一次編輯
  407. * 歷次作者        :        王志浩
  408. * 日期                        :        2017-10-18
  409. *************************************************************/       
  410. void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
  411. {
  412.         EA = 0;                //禁止中斷
  413.         ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY);        //設(shè)置等待時間,允許ISP/IAP操作,送一次就夠
  414.         ISP_READ();                                                                                                                                        //送字節(jié)讀命令,命令不需改變時,不需重新送命令
  415.         do
  416.         {
  417.                 ISP_ADDRH = EE_address / 256;                                                        //送地址高字節(jié)(地址需要改變時才需重新送地址)
  418.                 ISP_ADDRL = EE_address % 256;                                                        //送地址低字節(jié)
  419.                 ISP_TRIG();                                                                                                                                //先送5AH,再送A5H到ISP/IAP觸發(fā)寄存器,每次都需要如此
  420.                                                                                                                                                                                         //送完A5H后,ISP/IAP命令立即被觸發(fā)啟動
  421.                                                                                                                                                                                         //CPU等待IAP完成后,才會繼續(xù)執(zhí)行程序。
  422.                 _nop_();
  423.                 *DataAddress = ISP_DATA;                                                                        //讀出的數(shù)據(jù)送往
  424.                 EE_address++;
  425.                 DataAddress++;
  426.         }while(--number);

  427.         DisableEEPROM();
  428.         EA = 1;                //重新允許中斷
  429. }


  430. /************************************************************
  431. * 函數(shù)名                :        EEPROM_SectorErase
  432. * 功能說明        :        把指定地址的EEPROM扇區(qū)擦除
  433. *
  434. * 輸入?yún)?shù)        :        EE_address:要擦除的扇區(qū)EEPROM的地址.
  435. * 輸出參數(shù)        :        無
  436. *
  437. * 修改記錄        :        新增函數(shù),第一次編輯
  438. * 歷次作者        :        王志浩
  439. * 日期                        :        2017-10-18
  440. *************************************************************/       
  441. void EEPROM_SectorErase(u16 EE_address)
  442. {
  443.         EA = 0;                //禁止中斷
  444.                                                                                                                                                                                         //只有扇區(qū)擦除,沒有字節(jié)擦除,512字節(jié)/扇區(qū)。
  445.                                                                                                                                                                                         //扇區(qū)中任意一個字節(jié)地址都是扇區(qū)地址。
  446.         ISP_ADDRH = EE_address / 256;                                                                //送扇區(qū)地址高字節(jié)(地址需要改變時才需重新送地址)
  447.         ISP_ADDRL = EE_address % 256;                                                                //送扇區(qū)地址低字節(jié)
  448.         ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY);        //設(shè)置等待時間,允許ISP/IAP操作,送一次就夠
  449.         ISP_ERASE();                                                                                                                                //送扇區(qū)擦除命令,命令不需改變時,不需重新送命令
  450.         ISP_TRIG();
  451.         _nop_();
  452.         DisableEEPROM();
  453.         EA = 1;                //重新允許中斷
  454. }


  455. /************************************************************
  456. * 函數(shù)名                :        EEPROM_write_n
  457. * 功能說明        :        把緩沖的n個字節(jié)寫入指定首地址的EEPROM.
  458. ……………………

  459. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
白光烙鐵_V3.1.1硬件SPI(天山V1.2).rar (995.1 KB, 下載次數(shù): 357)



評分

參與人數(shù) 4黑幣 +38 收起 理由
daiya + 10 絕世好帖!
wangxindir + 8 很給力!
楊雪飛 + 15 曾經(jīng)的過往是誰啊,你同學(xué)嗎?
youyou1979 + 5 很給力!很好的學(xué)習(xí)資料、案例

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏40 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:98992 發(fā)表于 2018-8-30 11:03 | 只看該作者
感謝分享 我想做一個
回復(fù)

使用道具 舉報

板凳
ID:73182 發(fā)表于 2018-8-30 15:14 | 只看該作者
這個可以有,感謝
回復(fù)

使用道具 舉報

地板
ID:57896 發(fā)表于 2018-8-31 11:31 | 只看該作者
謝謝分享,花這么多精力寫的,這么好的源碼能拿出來共享不是一般人能做得到的,謝謝!
回復(fù)

使用道具 舉報

5#
ID:61140 發(fā)表于 2018-8-31 21:42 | 只看該作者
可惜沒代碼,下載不了
回復(fù)

使用道具 舉報

6#
ID:394041 發(fā)表于 2018-9-5 15:22 | 只看該作者
謝謝樓主分享,學(xué)習(xí)下。
回復(fù)

使用道具 舉報

7#
ID:392501 發(fā)表于 2018-9-25 09:19 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

8#
ID:402026 發(fā)表于 2018-9-25 10:19 | 只看該作者
感謝樓主分享,下載學(xué)習(xí)!
回復(fù)

使用道具 舉報

9#
ID:399799 發(fā)表于 2018-9-25 10:52 | 只看該作者
謝謝,我也學(xué)習(xí)一下
回復(fù)

使用道具 舉報

10#
ID:399179 發(fā)表于 2018-9-25 11:06 來自手機(jī) | 只看該作者
這個好復(fù)雜啊!
回復(fù)

使用道具 舉報

11#
ID:327783 發(fā)表于 2018-9-30 20:23 | 只看該作者
下載研究一下!
回復(fù)

使用道具 舉報

12#
ID:411954 發(fā)表于 2018-10-18 21:50 | 只看該作者
感謝樓主分享,下載學(xué)習(xí)!
回復(fù)

使用道具 舉報

13#
ID:408539 發(fā)表于 2018-11-2 03:34 | 只看該作者
樓主無私精神
回復(fù)

使用道具 舉報

14#
ID:199427 發(fā)表于 2018-11-5 14:10 | 只看該作者
謝謝樓主分享的資料。
回復(fù)

使用道具 舉報

15#
ID:525688 發(fā)表于 2019-5-1 20:30 | 只看該作者

謝謝,我也學(xué)習(xí)一下
回復(fù)

使用道具 舉報

16#
ID:62553 發(fā)表于 2019-5-5 09:01 | 只看該作者
謝謝樓主   謝謝   
回復(fù)

使用道具 舉報

17#
ID:432192 發(fā)表于 2019-5-11 22:31 來自手機(jī) | 只看該作者
感謝樓主開源
回復(fù)

使用道具 舉報

18#
ID:462163 發(fā)表于 2019-5-14 09:32 | 只看該作者
硬件套件你有賣嗎?想買來玩玩
回復(fù)

使用道具 舉報

19#
ID:538330 發(fā)表于 2019-5-29 14:06 | 只看該作者
感謝樓主開源
回復(fù)

使用道具 舉報

20#
ID:384581 發(fā)表于 2019-11-22 00:15 | 只看該作者

謝謝分享,  不支知樓主有用PID, 能自整定不?
回復(fù)

使用道具 舉報

21#
ID:392145 發(fā)表于 2019-12-13 22:52 | 只看該作者
原理圖在什么文件里面?
回復(fù)

使用道具 舉報

22#
ID:392145 發(fā)表于 2019-12-13 22:52 | 只看該作者
原理圖在什么文件里面 ,請問,有知道的嗎?
回復(fù)

使用道具 舉報

23#
ID:716660 發(fā)表于 2020-11-21 17:08 | 只看該作者
程序?qū)懙奶A耍上]有原理圖參考
回復(fù)

使用道具 舉報

24#
ID:353831 發(fā)表于 2021-3-1 21:45 | 只看該作者
qin531100 發(fā)表于 2019-12-13 22:52
原理圖在什么文件里面 ,請問,有知道的嗎?

同問????
回復(fù)

使用道具 舉報

25#
ID:95809 發(fā)表于 2021-3-2 08:39 | 只看該作者
呦呦奧利給 發(fā)表于 2020-11-21 17:08
程序?qū)懙奶A耍上]有原理圖參考

原理圖,固件版本不同,可以自己修改IO.

天山T12_V1.0原理圖.pdf

25.4 KB, 下載次數(shù): 73, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

26#
ID:707558 發(fā)表于 2022-1-26 09:51 | 只看該作者
非常感謝樓主的開源程序,程序非常牛,且可以根據(jù)自己需要進(jìn)行修改,真的很好。
回復(fù)

使用道具 舉報

27#
ID:707558 發(fā)表于 2022-1-26 09:59 | 只看該作者
呦呦奧利給 發(fā)表于 2020-11-21 17:08
程序?qū)懙奶A耍上]有原理圖參考

這是同時支持4位數(shù)碼管和OLED12864顯示的T12控制板原理圖,不過IO與天山版的有所不同,需要修改IO。

數(shù)顯T12控制板.PDF

79.9 KB, 下載次數(shù): 31, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

28#
ID:1043341 發(fā)表于 2022-8-30 18:05 | 只看該作者
剛買了個T12 用的這個方案
回復(fù)

使用道具 舉報

29#
ID:1060550 發(fā)表于 2023-1-6 23:11 | 只看該作者
非常感謝樓主的開源程序
回復(fù)

使用道具 舉報

30#
ID:1057863 發(fā)表于 2023-1-13 09:54 | 只看該作者
程序有點多啊,不過oled固定在里面也是挺厲害,不容易損壞
回復(fù)

使用道具 舉報

31#
ID:20772 發(fā)表于 2024-1-9 14:36 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報

32#
ID:1109254 發(fā)表于 2024-1-15 09:18 | 只看該作者
文章真是好,抽時間學(xué)習(xí)!!
回復(fù)

使用道具 舉報

33#
ID:1139591 發(fā)表于 2024-12-21 23:16 | 只看該作者
多年以后i感謝樓主開源
回復(fù)

使用道具 舉報

34#
ID:402677 發(fā)表于 2024-12-22 10:47 | 只看該作者
感謝樓主把最好的東西無私的分享給大家
回復(fù)

使用道具 舉報

35#
ID:705870 發(fā)表于 2024-12-23 13:08 | 只看該作者
下載復(fù)刻一個T12,消耗一下手里的T12耗材。感謝作者開源。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久视频在线观看 | 激情毛片| 午夜激情网 | 午夜精品福利视频 | 九九九久久国产免费 | 亚洲国产欧美在线 | 国产精品久久久久久久久久免费看 | 亚洲网视频 | 密色视频 | 一区二区三区在线免费观看 | 免费日本视频 | 国产9 9在线 | 中文 | 亚洲国产一区二区三区 | 一区二区三区中文字幕 | 秋霞电影一区二区三区 | 久久se精品一区精品二区 | 免费国产视频在线观看 | 国产福利91精品一区二区三区 | 欧美日韩国产一区二区三区 | 激情五月综合 | 成人久久久久 | 中文字幕一区二区在线观看 | 日韩欧美国产精品 | 日韩伦理一区二区三区 | 五月激情综合网 | 2021天天躁夜夜看 | 亚洲喷水 | 中文字幕精品一区久久久久 | 毛片高清 | 国产色网站 | 国产伦一区二区三区久久 | 视频一区在线 | 国产精品福利久久久 | 在线播放日韩 | 久久精品无码一区二区三区 | 成人不卡 | 男女在线网站 | 一区二区三区国产在线观看 | 激情五月婷婷综合 | 国产亚洲精品久久午夜玫瑰园 | 97伦理电影网 |