基于AT89C51的密碼電源開關(guān)設(shè)計
隨著現(xiàn)代技術(shù)的發(fā)展,電與我們生活的關(guān)系越來越密切,從工業(yè)生產(chǎn)到居家生活的每一個細節(jié)都離不開電。但令人頭疼的是卻有許多人在偷電漏電,盜用別人的電源使用,給別人造成了經(jīng)濟上的損失?,F(xiàn)在,在同一間辦公室辦公的情況越來越普遍了,為了使非法用戶在不知道密碼的情況下,無法使用電源,筆者在這里設(shè)計了一個密碼電源開關(guān),它是基于微控制芯片A T89C51 的一項新的具有實用價值的系統(tǒng)。這個系統(tǒng)結(jié)構(gòu)簡單,保密性好,可以同時控制多路電源,具有輸入錯誤密碼告警,輸入正確密碼開、關(guān)電源,用電器關(guān)電后自動啟動保護延時等功能。
本文引用地址:http://cafeforensic.com/article/179086.htm工作原理及硬件結(jié)構(gòu)
利用89C51 設(shè)計的密碼電源開關(guān)原理如圖1所示,系統(tǒng)以89C51 為核心,89C51 是Intel 公司的一款集CPU 、RAM、ROM、I/ O 接口、定時器/ 計數(shù)器、中斷系統(tǒng)為一體的單片機, 片上帶有4 K 的ROM 和128 ×8 位的RAM。系統(tǒng)中按鍵采用查詢方法與單片機連接,可以實現(xiàn)輸入正確密碼開電源,輸入正確密碼關(guān)電源,修改密碼,修改延時等功能。8 路繼電器全部連接在P0口,通過P0口的電平變化來控制繼電器,進而控制電源的開關(guān),為了節(jié)省端口,L ED 顯示連在普通口,因為要在關(guān)電后保證密碼不丟失,利用I2 C 技術(shù)在單片機外部擴展了一個E2 PROM(A T24C02) ,來存儲正確的密碼。
單片機最小系統(tǒng)
如圖2 所示,89C51 的外部通過18 ,19 腳連接一個晶振和兩個電容,構(gòu)成振蕩電路,可以為單片機提供時鐘頻率。9 腳通過一個10kΩ 電阻和一個10μF 的電容構(gòu)成了一個簡單的復(fù)位電路, EA 接高電平,AL E、PSEN 信號不用,這樣就構(gòu)成了一個單片機最小系統(tǒng)。這個最小系統(tǒng)未設(shè)復(fù)位鍵,系統(tǒng)加電時自動復(fù)位。
繼電器電路
本系統(tǒng)中要實現(xiàn)用弱電去控制強電,所以我們使用了繼電器,用以對電源通斷的控制,如圖3 所示,繼電器通過一個三極管直接連接到P0 口,當(dāng)P0口為高電平時,繼電器導(dǎo)通,接通外部電源,反之,斷開外部電源。
外部存儲器的擴展
為了把修改后的正確密碼保存起來,不至于在斷電后密碼丟失,所以在設(shè)計中通過I2 C 技術(shù)擴展了一個外部存儲器。I2 C 總線是一種串行數(shù)據(jù)總線,只有二根信號線,一根是雙向的數(shù)據(jù)線SDA ,另一根是時鐘線SCL 。如圖4 所示,因為89C51 沒有直接的I2 C 接口,所以使用模擬I2 C 技術(shù),SDA 連接在P2. 3 口,SCL 連接在P2. 2 口,用軟件程序控制數(shù)據(jù)的輸入輸出。
在I2 C 總線上傳送的一個數(shù)據(jù)字節(jié)由8 位組成??偩€對每次傳送的字節(jié)數(shù)沒有限制,但每個字節(jié)后必須跟一位應(yīng)答位。數(shù)據(jù)傳送首先傳送最高位(MSB) ,首先由主機發(fā)出啟動信號“S”(SDA 在SCL高電平期間由高電平跳變?yōu)榈碗娖? ,然后由主機發(fā)送一個字節(jié)的數(shù)據(jù)。啟動信號后的第一個字節(jié)數(shù)據(jù)具有特殊含義:高7 位是從機的地址,第8 位是傳送方向位,0 表示主機發(fā)送數(shù)據(jù)(寫) ,1 表示主機接收數(shù)據(jù)(讀) 。被尋址到的從機設(shè)備按傳送方向位設(shè)置為對應(yīng)工作方式。標(biāo)準(zhǔn)I2 C 總線的設(shè)備都有一個七位地址,所有連接在I2 C 總線上的設(shè)備都接收啟動信號后的第一個字節(jié),并將接收到的地址與自己的地址進行比較,如果地址相符則為主機要尋訪的從機,應(yīng)在第9 位應(yīng)答時鐘脈沖時向SDA 線送出低電平作為應(yīng)答。除了第一字節(jié)是通用呼叫地址或十位從機地址之外,第二字節(jié)開始即數(shù)據(jù)字節(jié)。數(shù)據(jù)傳送完畢,由主機發(fā)出停止信號“P”( SDA 在SCL 高電平期間由低電平跳變?yōu)楦唠娖? 。A T24CX 系列串行E2 PROM 具有I2 C 總線接口功能,功耗小,寬電源電壓(根據(jù)不同型號2. 5V~6. 0V) ,工作電流約為3mA ,靜態(tài)電流隨電源電壓不同為30μA~110μA ,所以在本系統(tǒng)中使用A T24C02 作為外部存儲器。
其他硬件電路
本系統(tǒng)中的使用到的按鍵較少,只有4 個,分別是通道選擇,功能切換,數(shù)字切換/ 修改延時,確認/修改密碼。為了簡化電路結(jié)構(gòu),節(jié)省成本,在系統(tǒng)中未使用掃描鍵盤的連接思路,而是采用了圖5 的連接方法。
按鍵一端接P3 口,一端接地,當(dāng)有按鍵按下時,相應(yīng)口的電平就會被拉低。然后用軟件程序就可以檢查出是哪個鍵按下,隨后執(zhí)行相應(yīng)的功能。因為P3 口全做了I/ O 口使用,所以在連接硬件的時候,每一個口上都接了一個上拉電阻。L ED 顯示部分通過模擬串行口來進行顯示,時鐘線和數(shù)據(jù)線連接到單片機的普通口。電源電路使用典型的電源電路,一個整流橋加一個穩(wěn)壓管,就可以構(gòu)成一個電源電路。為了增加系統(tǒng)的可操作性,特加了三個L ED 指示燈,分別是修改延時指示燈、修改密碼指示燈、告警燈,都直接連接在P1 口,用程序控制。
控制軟件設(shè)計
結(jié)合設(shè)計的要求和電路要實現(xiàn)的功能,系統(tǒng)的主要程序流程如下:
主程序
這個程序采用了數(shù)枝狀的結(jié)構(gòu),這樣比較適合于此硬件電路,也容易實現(xiàn)系統(tǒng)的功能。在主程序中,反復(fù)查詢與按鍵相連的端口,一但發(fā)現(xiàn)有按鍵按下,迅速判斷出來是哪個按鍵按下,然后調(diào)用相應(yīng)的子程序,并執(zhí)行功能,待執(zhí)行完后,又返回主程序等待。
輸入數(shù)字子程序
輸入數(shù)字鍵可以實現(xiàn)兩個功能,一個是單純的輸入數(shù)字,從0 到9 循環(huán),每修改一次,數(shù)字都要保存到顯示緩沖區(qū)中,以便打開電源,關(guān)閉電源,修改密碼時使用。輸入數(shù)字鍵一般是和確認鍵配合使用的,因為在這個系統(tǒng)中采用的是串行顯示,所以每次只能顯示一位,共有四位數(shù)字,從低位到高位顯示的時候,當(dāng)每一位上的數(shù)字選好后,都要確認一下,才能移到下一位顯示。如圖7 所示在每一次輸入完數(shù)字以后,都要查詢一下是否有修改延時的要求,如果有,那么就要執(zhí)行修改延時的功能,在本系統(tǒng)中,最大延時取了5 分鐘,這個值到實際中是可以修該的。修改后的延時值存在一個特定的存儲區(qū)中,以備觸發(fā)定時器時使用。本系統(tǒng)中采用延時的功能主要是為了保護用電器,例如冰箱之類的大功率用電器,它要求在每次關(guān)電和開電之間應(yīng)該有一定的延時,以保護用電器,延長壽命。而這個設(shè)計就恰恰滿足了這種要求,它可以在你關(guān)閉電源時自動啟動定時器延時,如果定時時間未結(jié)束,即使密碼輸入正確,也無法開機。
選路子程序
選路子程序比較簡單,通過反復(fù)循環(huán)來實現(xiàn)路數(shù)的選擇,選好的路數(shù)存到特定的存儲單元中,作為判斷條件供其他程序使用。
確認子程序
確認程序主要實現(xiàn)對輸入數(shù)字的確認及判斷系統(tǒng)是否有延時要求。
修改延時/ 修改密碼子程序
程序主要作用就是實現(xiàn)修改密碼和修改延時,可以通過外部按鍵來切換,在外部各有一個指示燈,來顯示現(xiàn)在處于什么狀態(tài)。修改延時時只要修改延時燈點亮,就可以通過輸入數(shù)字鍵來修改延時。當(dāng)修改密碼指示燈亮?xí)r,就可以修改密碼。修改好的密碼通過特定的端口送到外部存儲器AT24C02 保存起來。
比較子程序
比較子程序主要實現(xiàn)對輸入的密碼和原始密碼進行比較的作用,可以實現(xiàn)對繼電器的開與關(guān)的控制及控制延時的打開的控制。延時的關(guān)閉是在定時器里完成的,在這里就不再過多的闡述了。
部分程序如下:
MAIN :
MOV SP , # 60H
MOV TMOD , # 01H ;設(shè)置定時器T0
MOV TH0 , # 3CH
MOV TL0 , # 0B0H ;100 毫秒初值
SETB EA
MOV DINGSHI_CZ , # 01H ;存計數(shù)次數(shù)
MOV XGMM_PASS , # 00H ;修改密碼允許標(biāo)志清0
MOV 0CH , # 0C8H ;循環(huán)200 次
MOV 0DH , # 0C8H ;循環(huán)200 次
MOV 0EH , # 0C8H ;循環(huán)200 次
; ....................
MOV 4AH , # 00H
MOV 4BH , # 00H
MOV 4CH , # 00H
MOV 4DH , # 00H ;清顯示屏的代碼
LCALL CL EAR ;清顯示器
MOV A , # 00H
MOV P0 ,A
MOV R4 , # 08H ;控制路數(shù)的次數(shù)
MOV R3 , # 00H ;控制路數(shù),默認第1 路
MOV R0 , # 30H ;密碼緩存首地址
MOV R5 , # 00H
MOV R7 , # 05H ;控制定時次數(shù),最大5 分鐘
MOV A , # 01H
MOV 38H ,A
MOV OPEN_SHU T1 , # 00H ;控制各路的開與關(guān)
MOV OPEN_SHU T2 , # 00H
MOV OPEN_SHU T3 , # 00H
MOV OPEN_SHU T4 , # 00H
MOV OPEN_SHU T5 , # 00H
MOV OPEN_SHU T6 , # 00H
MOV OPEN_SHU T7 , # 00H
MOV OPEN_SHU T8 , # 00H
MOV YANSHI , # 00H ;關(guān)延時標(biāo)志位
; ........查詢是否有鍵按下........
START :
SETB P3. 2
SETB P3. 3
SETB P3. 4
SETB P3. 5
LCALL DL10_MS
MOV A ,P3
JNB ACC. 2 ,FUN0
JNB ACC. 3 ,FUN1
JNB ACC. 4 ,FUN2
JNB ACC. 5 ,FUN3
LCALL DL10_MS
LJMP START ;查詢是否有鍵按下
FUN0 : LJMP XUANLU ;調(diào)用選路子程序
FUN1 : LJMP INPU T_SZ ;調(diào)用輸入數(shù)字子程序
FUN2 : LJMP YES_MOVE ;調(diào)用確認子程序
FUN3 : LJMP GNQH ;調(diào)用功能切換子程序
結(jié)束語
本文較為詳細地介紹了以單片機為核心的密碼電源開關(guān)的設(shè)計,使51 系列單片機充分應(yīng)用在了控制系統(tǒng)中。該系統(tǒng)實現(xiàn)簡單,結(jié)構(gòu)靈活(按鍵部分也可以采用中斷的連接方法) ,開發(fā)經(jīng)濟,具有一定的市場前景。
評論