標題: [DIY]測溫小夜鐘 [打印本頁]

作者: hutians    時間: 2015-2-10 17:27
標題: [DIY]測溫小夜鐘
        這個板子是去年突發(fā)奇想想要做的,當時讓朋友(東東)幫忙布的線,另一個朋友(老王)給打的樣,感激。!PCB做好出來激情卻沒有,結果一直放到今年底,因為東東手上也有這個板,在他的慫恿下,挑了點時間就把這個板子完成了。
        設計這個板子的最初意圖是想做個可以晚上看時間的時鐘,所以用了數(shù)碼管顯示,并且體積要小巧,所以用了貼片元件,而且用電池供電可以方便放在床頭,所以平時又不用顯示以免浪費電池電量,因此MCU平時是不工作的,不能采用中斷計時的方法,所以在走時上就用了DS1302的專用計時芯片,主要是它比較容易買到并且便宜,而且待機時耗電很小。而僅有溫度顯示可能就比較浪費了,所以把18B20也加了進來,這是個專業(yè)測溫元件,最小分辨率可以達到0.0625度。MCU就用了STC的12C54XX系列了,本來想用12C205X系列,結果IO怎么排也不夠用,只好花點本錢換成多幾根IO的。目前成品用4.2V的可充電鋰電池供電,待機時電流約在0.5ma,工作時20ma,按每天查看10次、每次20秒計算,800mah電池約可以工作一個月,基本上滿足設計要求,下一步就是要為它找個好外殼了。
        電路圖和成品效果圖附后。
        硬件結構:STC12C5410+DS1302+18B20+4共陽數(shù)碼管
        實現(xiàn)功能:時間+測溫+自動關機。長按開關鍵開機顯示當前時分,小數(shù)點閃動代表秒信號,可以短按功能鍵切換到溫度顯示,查詢年、月日、星期、分秒。長按功能鍵進入年、月日、時分設置,星期采用程序自動運算來計算出當前時間是星期幾。設置或查詢狀態(tài)時,當無按鍵達15秒時退出到正常的時間顯示狀態(tài),在時間顯示狀態(tài),15秒無按鍵則自動關機。
        編程思路:5ms中斷一次,切換數(shù)碼管顯示,進行動態(tài)掃描數(shù)碼管,并且做一些時間變量的累加,讀取DS1302內(nèi)部時間,轉換后在數(shù)碼管上顯示,讀取18B20溫度值,并進行轉換和顯示,每0.5秒刷新一次溫度值。單按鍵用長按、短按兩種狀態(tài)進行設置時間,另一按鍵只做電源開關。
        編程難點:處理好掃描顯示、按鍵讀取、18B20讀取的關系,18B20的采用單總線方式讀取,其時序要求較高,所以既要兼顧溫度讀取又要兼顧動態(tài)掃描等,這里會有點難度。
        心得體會:這次編程采用了全新的思路,和以往有較大的差別,基本上脫離了軟件延時的方式,除了18B20的單總線采用軟件延時外,其它延時均采用中斷方式、狀態(tài)機來完成。所以這次的程序個人感覺質(zhì)量相當高,大部分時間主循環(huán)都在空轉,運行效率非常高,既照顧了動態(tài)掃描,又兼顧了按鍵去抖延時,并實現(xiàn)長短按功能,18B20的讀取上也絲毫沒有影響,真正做到了動態(tài)掃描的結果跟靜態(tài)顯示一樣,任何操作均沒有產(chǎn)生閃動,和以往傾向于軟件延時方式所寫出來的程序有質(zhì)的差異。通過這次程序,也使自己編程水平有一個質(zhì)的飛躍,眼界更開闊,對C51編程的駕馭能力又再提高到一個層次,這也是自己近年來編程水平的一個最大的突破。
        下一步功能擴展構思:這個MCU有10K的ROM,目前程序只用了1.6K,還有很多空間,另外還有內(nèi)部EEPROM也沒有利用起來,原意是想做成一個可測體溫的溫度計,并且能保存溫度數(shù)據(jù)在EEPROM里以備翻查,現(xiàn)在又想做個類似“最高溫度保持”和“最低溫度保持”的功能出來,但是四個數(shù)碼管能顯示的信息量太少了,如何區(qū)別這些信息還是個頭痛的問題,留待以后慢慢研究。


電路原理圖:


焊好的電路板正面圖:(右下方4個焊點為ISP編程接口)


板的背面:


顯示時分狀態(tài):(其中小數(shù)點會按秒閃動)


顯示溫度:(范圍是-55°C~+125°C,精度改為0.1度,生活應用足夠)







作者: 1678    時間: 2015-8-7 18:50
不錯值得學習




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1