免電源的電話使用計時器設計
出處:互聯網 發布于:2011-09-03 22:22:37
電話通信是通過聲能與電能相互轉換、并利用"電"這個媒介來傳輸語言的一種通信技術。兩個用戶要進行通信,簡單的形式就是將兩部電話機用一對線路連接起來。在通訊溝通頻繁的今日,相信家家戶戶都有一臺以上的電話機,您家必定發生過打完電話后未掛好而造成電話無法打進的困擾吧。或者您的家人或同事或朋友打電話一打就打了許久又不自知吧。
下面為您介紹一款DIY制作:免電源電話使用計時器
特點說明:
DIY制作基本上要有著三個特點:
一看就懂:指電路簡單明了。
一買就有:指電路容易取得。
一做就成:指制作成功率高。
免用外部電源,整個DIY電子產品是利用電話線電壓來工作的。對通話品質無影響,所謂的無影響其實有著二個含意,一為無雜訊干擾,一為通話音量不增減。大家都知道多位數的LED七段顯示得用掃描方式,如此一來會有脈沖電流雜訊產生,這點對聽覺靈敏的耳朵而言是不可忽視的。另外整個電路的AC阻抗得非常的低,以免除聲音的衰減。針對這二個要求,這里介紹一個簡單又實用的電源取得電路供您參考。
LED顯示采用省元件的互補式,即一個LED七段顯示器為共陰,另一為共陽,如此即可直接用四個I/O直接推動而得到亮度了。
利用OTP型單片機EM78P156來做控制,整個程序小小的,若您想更改或增加功能都是非常容易的。
功能說明:當您的電話使用后沒有放置好,或者是打電話聊長天的時候給您顯示通話使用時間給予心理壓力。基本上可算是有提醒指示及顯示二大功能。
提醒指示:只要LED七段顯示器點亮則表示電話線正被使用,此時不是您正在打電話就是話筒未被放置好。
顯示:只要話筒一被拿起,電話回路被建立后單片機開始做計時及顯示動作,以分為單位,可顯示99分,之后又從0開始。若您要有精準的計時時可在電話通之后按CLR鍵,此時單片機清除計數從新開始計數顯示。線路圖如圖1所示。

圖1
圖1線路說明:整個線路說實在的,太小了,不過增一分則肥,減一分則瘦。還是老老實實的交待清楚吧,那么您要購買或更換電路時才不會走冤枉路。
直接從電話線路取得工作電源,如圖2所示。

圖2
為一簡單的檢波器π型濾波器及基納穩壓器所構成,經過這5個元件的打點而得到從電話端看到的是一個AC低阻抗,同時隔離了單片機掃描LED七段顯示器所衍生的雜音。另外5V的穩壓更提供了很穩定的電源供電路使用。有二個地方需注意的是5V得選購5W以上的比較不會過熱,同時電感得選購直流內阻低的,愈低愈不會發熱。
LED七段顯示器采用一共陰極,一共陽極的,故顏色及亮度選相近的。如圖3所示。

圖3
當PORT5輸出為HIGH時,共陽極的LED七段顯示器被選到,此時PORT6輸出為LOW時LED被點亮,反之LED不會亮。當PORT5輸出為LOW時,共陽極的LED七段顯示器被選到,此時PORT6輸出為HIGH時LED被點亮,反之LED不會亮。之所以要四個I/O都并聯在一起是要保證有50mA的輸出顯示電流,不是四個并聯使用的話則顯示亮度會打折扣。
單片機部份,見圖4。

圖4
選用臺灣EMC公司的EM78P156OTP或8位單片機,不但指令少,程序撰寫容易外,所需外部元件也是精簡得很,我們不妨看看只需一個32768Hz的石英晶體及一個助振電容就行了,另外的1K電阻是關機泄放電流用的,可避免重置失效,而CLR按鍵是用來清除顯示時間的。若您不再乎那撥號時間的誤差則可以不用此元件的。
程序列:





程序說明
DIY制作的軟件程序長度僅有78個指令,整個程序可以分成5個段落來做說明,寄存器使用說明:
DL-----子程序用寄存器
MIN-----存放分鐘資料寄存器
SEC-----存放秒鐘資料寄存器
DD-----存放顯示位數資料寄存器
DDH-----存放顯示資料寄存器
AB-----存放ACC的副本
RFB-----存放STATUS的副本
⑴ TCC中斷子程序
從0000--001B行為每秒發生的TCC中斷子程序,其中0008--000B及0017--0019行為進入及離開中斷子程序的ACC及STATUS保留動作。其中000C為每進入中斷子程序就將SEC這寄存器予以進位。其中000D--0012為判斷SEC寄存器是否大于59,是則將MIN寄存器予以進位并清除SEC寄存器。其中0013--0016為判斷MIN寄存器是否大于99,是則將MIN寄存器予以清除,其中001A為清除TCC中斷旗標。
⑵ LED字型轉換程序
從001C--0026行存放了字型轉換表,可將0--9的數字轉成相對的LED七字顯示器的資料。
⑶ 顯示時間長度延遲程序
從0028--002B延遲程序,而0027及002C--002D為啟動顯示及關掉顯示之指令。
⑷ 微控制器啟始設定程序
從002F--0039行對微控制器內部相關硬件做了必要性的設定動作。值得特別一提的是0035--0039行對TCC中斷記數器予以設定成每秒中斷。計算式如下:
系統時基/(2周期模式×1秒×256進位)而得預除數為64.
⑸ LED七字顯示器掃描主程序
從003A--004E行為本軟件程序之主程序部份,又可分三部份。003C--0040行為取得MIN的拾位數之值。0042--0046行顯示MIN的個位數資料到共陽極的LED七字顯示器上。0047--004D行為顯示MIN的拾位數資料到共陰極的LED七字顯示器上。希望這短短的程序難不倒您才是。
程序撰寫步驟:
許多人習慣上撰寫程序的過程是依照「先小而大」,「先難后繁」,「邊測邊寫」等三項原則來從事的,底下便將電話使用計時器程序分成六個段落來完成。
1 先給予心跳
一般撰寫程序碰到計時的工作時不外乎三個方式來解決:
①用TIMER計數器來產生中斷來計時;②用POLLINGTIMER計數器來計時;③用計算程序指令個數來計時。
這三個方式中以方式一為簡單也為準確,故這里打算重要之秒的進位問題就交給TIMER計數器中斷方式來解決了。


這程序的目的是欲了解TCC中斷能否滿足秒的進位問題。
程序說明:
⑴ 中斷子程序
從0008--000A行為簡單的中斷子程序,每做就將PORT6反向,離開前順便清除中斷FLAG.
⑵ 微控制器起始設定程序
起始設定是每個程序一開始必須做的,主要功能是將一些會用到的硬件部份做一起始狀態的設定以發揮充分的掌控能力。
⑶ 從000B~0013行為起始設定程序

在EM78系列中有所謂的MEMORY及I/O兩大空間,一些MEMORY空間的寄存器處理時可用MOV、BS、BC、XOR、OR……等指令,而另一些I/O空間的控制寄存器處理時可用IOW、IOR等指令,這點不要弄混了才是。
0010MOVA,@0x01;將A內放置1
0011IOW0x0F;僅致能TCC中斷能力
在EM78156中原本能有WDT中斷、外部中斷及TCC中斷等三種能力,如今我們只保留TCC中斷來使用。
0012MOVA,@0x05;將A內放置5
0013CONTW;設定TCC控制寄存器
0014ENI;啟動中斷能力
TCC是一個很好用也很復雜的硬件線路,下面僅列出局部有關的地方于附錄供大家參考。由于系統時基是采用32768Hz的石英晶體,故本制作之準確度應該不被懷疑才是。當選用2CYCLE及2CLOCK的狀態時,若再將TCC設成除以64,那剛好每一秒鐘TCC發生溢位中斷。
掃描程序:從0015--0015行,總共1行,僅做跳躍自身之用。
效果觀察:程序寫到此時,倘若您手上的線路沒焊錯的話,那么您將會看到七字幕顯示8并且以1秒亮1秒滅的速度亮滅著。
2 具有七段顯示能力
接下來就是加強掃描能力,使它有著正確的顯示數字的能力。



整個程序與TC0.ICE的差異就是增加了SEC計數的顯示能力,故有三處改動:
⑴ 中斷子程序中有了INCSEC指令來做每秒進位的動作。
⑵ 掃描程序功能加強:從0020--0026行所做之事為重覆的將SEC數字經過查表后丟到P6上。為了方便了解,此時僅對數字0有做顯示動作。
⑶ 效果觀察:程序到此時您會看到個位數的七字顯示屏幕從0→9每秒進位。到9以后程序將會錯亂。
3 具有二位數的顯示能力
能夠做七段顯示之后,各位想看到的當然是二位數字的顯示了,由于這里采用一共陰、一共陽的七段顯示器,故處理起來還得稍費腦筋。



程序與TC1.ICE差異之處僅在掃描動作上不同罷了。若要掃共陽的位數時,必須將PORT5外設為高電位輸出,而要亮的字劃,在PORT6外設為低電位輸入即可。若要掃共陰的位數1時,必須將PORT5外設為低電位輸出即可,而要亮的字劃,在PORT6外設為高電位輸出即可。故有了0020--0025行,位數0的顯示處理及0026--002C行,位數1的顯示處理。
效果觀察:程序到此時您會看到二位數的七字顯示屏幕,同時從0→9每秒進位,到9以后程序將會錯亂。
4 具有限數能力
以上的程序對SEC(秒)都不予限數,當然會造成CALLTABLERETEW錯誤發生,故底下增加MIN(分)并對SEC、MIN做59及99的限數動作。




程序與TC2.ICE差異之處有下:
TCC中斷子程序部份增加了A,R3的暫存動作及SEC、MIN的限數動作。0008--000A及0016--0018行系對A及R3做暫存及復原的動作。
000C--0011行系對秒做59的比較動作,SEC比59大則SEC=0,MIN=MIN+1.
0012--0015行系對分做99的比較動作,若MIN比99大則MIN=0。
在掃描程序部份增加了16進制變成10進制的動作。縱然二位數字來顯示MIN(分)的訊息是可行的,然將16進制變成10進制才能符合人類的習性。0033--0038行即在做16進制轉10進制的動作,將MIN的數值拆成個位數及拾位數,并在0039--003D時顯示個位數,而在003E--0044時顯示拾位數。
效果觀察:程序到此為止,理論上已做完該完成的所有行為了。但執行起來…為何…為何…忽好忽壞呢?
完成正確功能:將TC3.ICE程序左看右看,上看下看,怎么看也看不出破綻出來,但為何程序跑起來很不穩定,忽好忽壞的呢?答案是程序錯誤。




原來問題就在中斷子程序的A及R3暫存及復原這部份。
原來程序在A及R3的暫存部份:

錯就錯在0009時MOVA,RF指令會破壞ZEROFLAG的資料。新的程序在A及R3的暫存部份:

新的程序在A及R3的復原部份:

效果觀察:此時此刻的您一定是歡喜異常,眼睛看著分鐘一分一分的增加又不死機,剛才緊繃的心情頓時得到解脫,一切的心血總算有了回報了。
再動手將秒的閃爍呈現在七段的小數點上以滿足動感要求。





要如何增加小數點秒的閃爍呢?其實看結果一點也不困難。增加001D~0020這四行程序就可迎刃而解了。
5 好上加好
如果用示波器來看看制作成果的良好程度時,可以看到顯示周期比才近50%左右,讓人總覺得可惜,倘若能夠讓顯示周期比接近100%不亦快哉!
再動手改吧.





人的眼眼睛實在很容易被欺騙,只要掃描頻率大于30Hz其實已經看不到閃爍的現象,故在不產生閃爍的現象中如何增加顯示周期比呢?
增加顯示時之時間,故這里增加了一個DELAY子程序(002C--0033行所示)供掃描顯示時呼叫之用。固定的在個位數及拾位數顯示時各呼叫來增加顯示周期比。
效果觀察:增加了DELAY子程序之后約可提升亮度一倍左右。
6 要善始善終-----永不死機
正當要關掉ICE準備燒寫OTP的時候,仔細想想程序才那么小小的,留那么多的空白做什么?不妨拿來「增加穩定度」之用。







與TC6.ICE程序的差異之處:
⑴ 在每個程序的段落"加入JMPINIT"指令。
⑵ 在程序節結尾以后「加入JMPINIT」指令。
這樣一來,不論IC何時死機錯亂都會跳到開始來執行了。
加入WATCHDOGTIMER:來避免程序的錯誤而造成死LOOP現象。
加入錯誤偵測能力:利用剩余的寄存器來做引子,隨時去讀取這些寄存器,若和不為零則代表錯誤發生了,應該重新開始。
效果觀察:不論如何故意的去弄死機都會從頭開始正常執行程序了,大功告成。可以加上您認為漂亮合適的外殼,投入使用了。
附源程序






版權與免責聲明
凡本網注明“出處:維庫電子市場網”的所有作品,版權均屬于維庫電子市場網,轉載請必須注明維庫電子市場網,//www.qxvs.cn,違反者本網將追究相關法律責任。
本網轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品出處,并自負版權等法律責任。
如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
- 51單片機電平特性是什么2025/9/26 13:11:43
- 單片機檢測直流信號:常用電路全解析2025/8/21 15:49:26
- 探秘三極管在單片機中的關鍵作用2025/8/18 16:24:42
- 51單片機和52單片機有什么區別2025/8/8 16:52:42
- DSP與單片機到底有什么區別2025/7/28 17:02:00






