魏軍丞
定時(shí)開關(guān)控制器在各種場(chǎng)合都有著極為廣泛的用途。本文利用凱思迪公司的K-51A單片機(jī)實(shí)驗(yàn)板設(shè)計(jì)的定時(shí)開關(guān)控制器具有簡單易制、價(jià)格低廉、控制點(diǎn)數(shù)多、控制時(shí)間可精確到秒等特點(diǎn),供有興趣的朋友參考。
1.主板電路部分
本電路主要是利用單片機(jī)AT89C2051(-24PI)作為主控制元件,通過外圍電路控制用電設(shè)備的電源,以達(dá)到定時(shí)開、關(guān)機(jī)的目的。AT89C2051具有體積小、功能強(qiáng)大、運(yùn)行速度快、價(jià)格低廉等優(yōu)點(diǎn),非常適合制作集成度較高的控制電路。圖1為主電路原理圖,圖2為按其制作的主板(雙面)大小只有95mm×70mm的器件位置圖。主板電路包括MCU AT89C2051、鍵盤與顯示、輸入與輸出口、復(fù)位和電源濾波等電路組成。
(1) 鍵盤與顯示 顯示電路由U2、U3、Q1~Q7和L1A、L2A組成。U2為BCD-7段譯碼器(74LS47),通過單片機(jī)U1的P1.4~P1.7口將要顯示字符的BCD碼輸出到U2的四個(gè)輸入端,經(jīng)U2譯碼后輸出相應(yīng)的筆段驅(qū)動(dòng)LED數(shù)碼管(共陽)。LED數(shù)碼管顯示采用動(dòng)態(tài)掃描方式,即在某一時(shí)刻,只有一個(gè)數(shù)碼管被點(diǎn)亮。數(shù)碼管的位選信號(hào)由單片機(jī)U1的P3.3~P3.5輸出,經(jīng)U3(74HC138)譯碼后通過Q1~Q6放大,驅(qū)動(dòng)相應(yīng)的數(shù)碼管。R17~R24為限流電阻。
由于U2只能輸出7段筆段碼,而數(shù)碼管除了七段筆段外,還要控制點(diǎn)亮小數(shù)點(diǎn),因此,小數(shù)點(diǎn)必須有另外的驅(qū)動(dòng)電路來完成,在這里,通過Q7來驅(qū)動(dòng)小數(shù)點(diǎn)。當(dāng)需要點(diǎn)亮小數(shù)點(diǎn)時(shí),在U1的P1.3輸出高電平即可。
鍵盤電路跟顯示電路一樣,采用掃描方式,利用動(dòng)態(tài)顯示時(shí)的數(shù)碼管驅(qū)動(dòng)位置信號(hào)來判斷相應(yīng)按鍵的狀態(tài)。U1的P3.3~P3.5口輸出的BCD碼經(jīng)U3譯碼后,相應(yīng)Y口呈低電平,而U1的P3.7口平時(shí)為高電平(由于R8上拉),當(dāng)某一鍵按下時(shí), P3.7被下拉為低電平,這時(shí)MCU利用程序查詢P3.7是否為低電平,如果P3.7為低電平,就讀回U1 P3.3~P3.5口的值(從緩沖區(qū)讀?。瑒t可判斷是哪個(gè)按鍵按下,然后調(diào)用相應(yīng)的處理程序進(jìn)行處理。
(2)控制輸出、復(fù)位與電源濾波電路 MCU對(duì)控制的輸出是通過P3.0~P3.2口完成的。程序開始時(shí)這三個(gè)口的輸出狀態(tài)是低電平,MCU通過程序查詢?nèi)份敵龅腛N或OFF狀態(tài)預(yù)置時(shí)間是否已到,如果已到時(shí)間,則改變相應(yīng)的輸出狀態(tài),就完成了對(duì)外部電路的控制。復(fù)位電路如圖1左上角所示,C3和R25完成上電復(fù)位,S6為手動(dòng)復(fù)位,按鍵輸入干擾和抖動(dòng)的預(yù)防是由軟件完成的。+5V電源由JP2輸入,經(jīng)C4~C9濾波后給U1和其它器件供電。
2.電源與控制電路
電源及控制電路如圖3。其中,市電經(jīng)總開關(guān)K后由B降壓、V1整流、C11~C14濾波、U4、U5穩(wěn)壓后給主板和控制電路板提供穩(wěn)定的工作電源;主板送過來的三路控制信號(hào)通過Q12~Q14分別控制繼電器J1、J2、J3,對(duì)外部電路實(shí)施直接控制。繼電器這里沒有給出具體型號(hào),您可根據(jù)耐壓及通流大小選用相應(yīng)的繼電器,如在大電流和強(qiáng)電磁場(chǎng)干擾的環(huán)境里工作,最好利用中間繼電器來間接控制。
3.程序軟件工作過程
(1)秒脈沖發(fā)生器 秒脈沖發(fā)生器是由定時(shí)器T0和內(nèi)存空間TT0配合完成的。T0工作于16位計(jì)數(shù)器模式,當(dāng)T0向上計(jì)數(shù)由全1變?yōu)槿?時(shí)產(chǎn)生中斷,本程序中T0的初值為0DC00H,大約0.01s中斷一次。這里使用的晶振頻率為11.0592MHz,由此可計(jì)算出日誤差約為0.78s。
圖4為程序流程圖。系統(tǒng)產(chǎn)生中斷后,首先保存ACC和PSW的值,然后為T0重裝初值,判斷中斷次數(shù)是否小于100,是則轉(zhuǎn)出中斷服務(wù),反之則為秒計(jì)數(shù)器加1,秒計(jì)數(shù)器如果大于59,則為分計(jì)數(shù)器加1,同時(shí)秒計(jì)數(shù)器清0。同樣分計(jì)數(shù)器如大于59則為時(shí)計(jì)數(shù)器加1,同時(shí)分計(jì)數(shù)器清0,時(shí)計(jì)數(shù)器如大于23則清0并轉(zhuǎn)出中斷服務(wù)。T0中斷100次的時(shí)間剛好為1秒鐘。
(2)主程序 上電復(fù)位過程:首先P0~P2口全部置1,P3口高5位置1,低3位置0。設(shè)置定時(shí)器T0工作于16位計(jì)數(shù)器模式,并賦初值TH0=0DCH,TL0=00H,關(guān)閉外部中斷和串行口中斷,時(shí)間計(jì)數(shù)器TS、TM、TH清0,所有預(yù)置時(shí)間存儲(chǔ)區(qū)全部賦值FFH,至此所有初始化工作完成。
主程序工作過程:首先循環(huán)進(jìn)行六個(gè)數(shù)碼管掃描顯示(DISPLY段),然后比較所有預(yù)置時(shí)間(COMP段)是否與當(dāng)前時(shí)間相等,如相等則轉(zhuǎn)向相應(yīng)處理程序。在比較完成(或處理完成)后判斷有無按鍵(PP2段),沒有則返回繼續(xù)顯示、比較、判斷;有按鍵則轉(zhuǎn)向相應(yīng)處理程序。按鍵轉(zhuǎn)移采用偏移量加表格跳轉(zhuǎn)轉(zhuǎn)移法(KEY段),簡單、明了。預(yù)置時(shí)間比較則采用逐一比較法,即對(duì)每一個(gè)預(yù)置值進(jìn)行比較,如相等則做相應(yīng)處理。具體比較時(shí)(COMP1段)先比較TH值,如不相等則直接轉(zhuǎn)出并置“時(shí)間到”標(biāo)志CCB為0,如TH、TM、TS全部對(duì)應(yīng)相等,則置該標(biāo)志為1。
本程序在顯示及按鍵處理(設(shè)置過程)中巧妙使用R1寄存器作為公用地址寄存工具,對(duì)實(shí)時(shí)時(shí)間和預(yù)置時(shí)間的顯示和修改調(diào)用同一程序完成,使源代碼長度大大縮短,提高了程序的可讀性和運(yùn)行效率。在本刊的網(wǎng)站(www.eleworld.com)上給出了源程序,供讀者參考。
4.制作與調(diào)試
(1)主板的制作與調(diào)試主板的制作稍微復(fù)雜一點(diǎn)。首先是制作印刷板,利用Protel99按照本文所示器件位置圖放置好元器件,然后手動(dòng)布線(雙面),線寬為0.8mm左右,太寬做出的板子太大,太窄無法進(jìn)行自制。繪好印制板圖后轉(zhuǎn)成BMP格式利用電腦刻字機(jī)鏤空(要用進(jìn)口的即時(shí)貼紙,不然容易斷開),貼在雙面敷銅板上,就可以用FeCl3腐蝕了。具體的制作方法這里不再贅述,但最好在印制板布線時(shí)做個(gè)阻焊層,同時(shí)在即時(shí)貼上刻出來,當(dāng)板子制好清洗干凈后敷在上面,用淺綠色油漆或清漆噴上薄薄的一層,好看又防腐蝕。
(2)元器件的選擇 如果按照本文所附器件位置圖布線的話,數(shù)碼管需選用圖示型號(hào)才能安裝(5361BH,一拖三數(shù)碼管),選用不同型號(hào)數(shù)碼管時(shí)可能需修改器件位置參數(shù),然后再布線即可;晶振為11.0592MHz ;S1~S5選用黑色小型輕觸開關(guān),S6則用紅色同類型開關(guān);變壓器B選用15V、10W左右即可,V1硅堆應(yīng)與B配合選用;控制繼電器根據(jù)需要選用適合的型號(hào),如5、12、24V等,如果選用5V的,相應(yīng)的B、V1可選小一點(diǎn)的,7812則不要。如選用24V的,那么B、V1、7812、7805都需同時(shí)根據(jù)實(shí)際情況來選用;交流220V輸出插座沒有特殊要求,其耐壓和通流符合受控器件要求即可。其它元器件選用通用的就行。
(3)焊接元器件元器件購回后應(yīng)先進(jìn)行預(yù)處理(引腳打磨、上焊錫),然后逐一焊接。在焊接MCU(當(dāng)然2051要燒好程序后才能焊接)和其它集成電路時(shí)應(yīng)使用有良好接地的烙鐵(斷電焊接也可),以免被擊穿。由于雙面印刷板存在一個(gè)穿孔問題,器件引腳穿過后,兩面都要點(diǎn)上焊錫;如只是過孔,可用細(xì)銅線穿過并在兩面焊接后剪掉即可。
在印刷板制作良好,連線沒有不應(yīng)有的開路或短路,且焊接沒有虛焊的情況下,不用調(diào)試即可正常工作(本程序已制作成品并調(diào)試通過,不需再行調(diào)試)。如果您覺得自己制作的印刷板不夠漂亮或太麻煩可聯(lián)絡(luò)凱思迪郵購(焊接好的整板也有),本刊網(wǎng)站有與凱思迪公司網(wǎng)站的鏈接。
(4)電源與控制板的制作 可以將電源與控制板做在同一個(gè)板子上,也可分開制作,視所使用的情況而定,但JP1與JZ1之間的連線不宜太長。印刷板的制作同前所述,要注意的是在布線時(shí)對(duì)220V市電進(jìn)入和輸出(包括中線)的線寬設(shè)計(jì)要寬一點(diǎn)(根據(jù)工作電流大小來定為好),還要注意市電與直流電源的隔離,以免在使用中造成觸電事故。
5.操作使用
本系統(tǒng)在加電后數(shù)碼管顯示“00.00.00”,輸出繼電器均不動(dòng)作,此時(shí)可直接按S1、S2、S3鍵分別對(duì)時(shí)、分、秒進(jìn)行調(diào)整,使當(dāng)前時(shí)間與北京時(shí)間相符,時(shí)間設(shè)置過程中將停止計(jì)時(shí),在設(shè)置好后按S4退出,時(shí)鐘即進(jìn)入正常計(jì)時(shí)。如果要設(shè)置輸出控制的預(yù)置時(shí)間則先按S5,數(shù)碼管顯示“95.95.95”,此時(shí)可再按S1、S2、S3鍵分別對(duì)第一路輸出狀態(tài)ON的時(shí)、分、秒進(jìn)行設(shè)置,設(shè)好后再按一次S5鍵,數(shù)碼管也顯示“95.95.95”,然后按S1、S2、S3鍵則分別對(duì)第一路輸出狀態(tài)OFF的時(shí)、分、秒進(jìn)行設(shè)置,依此類推,按第七次時(shí)退出設(shè)定。任一路任一狀態(tài)被執(zhí)行后其預(yù)置值即被清除,24小時(shí)后并不有效,如果需要每天循環(huán)執(zhí)行則對(duì)程序進(jìn)行簡單的修改即可(預(yù)置值不清除就可)。
6.改進(jìn)與擴(kuò)展
本文所述的AT89C2051在控制輸出時(shí)只使用了P3.0~P3.2三個(gè)口,所以只能控制三路六個(gè)狀態(tài),如果把不用的P1.0~P1.2三個(gè)口用起來,則可控制六路十二個(gè)狀態(tài),外圍電路相應(yīng)增加三路繼電器,程序軟件只需稍事修改即可。當(dāng)然如果需要控制更多路輸出狀態(tài),那么在使用鎖存器、譯碼器、觸發(fā)器等后最多可以擴(kuò)展到控制26=64路128個(gè)狀態(tài)。在對(duì)控制輸出的路數(shù)要求不多,而顯示部分需要比較多的情況下,如還要顯示年月日、農(nóng)歷、星期等,只要對(duì)其進(jìn)行擴(kuò)展就可實(shí)現(xiàn):P1.4~P1.7不動(dòng),選通端用兩個(gè)138,輸出口用P3.2~P3.5就有24=16個(gè)數(shù)碼顯示。這時(shí)仍然利用上述方法最多可擴(kuò)展到控制25=32路64個(gè)狀態(tài)。當(dāng)然年月日、農(nóng)歷、星期的計(jì)算(如大月小月、閏年、閏月等)分別匯編相應(yīng)的子程序插入即可,這方面的資料很多報(bào)刊雜志都有介紹,這里不再贅述。