問題:做了一個小設計,用的是AT89C2051,其中P1口接兩位BCD指撥開關,P3.2接了一個開關,P3.3接了一個繼電器。
兩位BCD指撥開關的具體接法是公共端接P1.1和P1.2口,8421分別接在P1.3~P1.6口。
我想通過開關控制繼電器開合。具體要求是:按開關的次數(shù)由BCD開關的十位來決定,即BCD上顯示的是數(shù)字3,則按3次P3.2所接的開關,繼電器才開始動作,顯示5,則按5次繼電器才動作,以此類推;而繼電器開合時間由BCD開關的個位控制,如果BCD上顯示的是數(shù)字3,則繼電器開或合3分鐘,是5則開或合5分鐘。
不知道如何讀入的P1口值并分開成兩部分,請哪位前輩高手幫忙寫個程序,讓我學習學習。在此萬分感謝。
懸賞分:50 - 解決時間:2009-9-12 14:27
;============================
最佳答案:
利用兩個BCD指撥開關,設定了按鍵次數(shù)和延時時間(分鐘數(shù));按鍵輸入、繼電器輸出。
很簡單,樓主寫的非常清楚。
BCD指撥開關(又稱為撥盤、撥碼開關),其輸出是按照8421形式,但是它有個公共端,輸入高電平的時候,輸出的8421碼是高電平有效。
;----------------------------
;讀入BCD(8421)撥碼開關:
SETB P1.1 ;屏蔽一組
CLR P1.0 ;P1.0所連接的撥盤有效
MOV A, P1 ;讀入,低有效
CPL A ;有效值變高
RR A
RR A
ANL A, #0FH ;留下低四位
MOV R7, A ;存好
SETB P1.0 ;屏蔽另一組
CLR P1.1 ;P1.1所連接的撥盤有效
MOV A, P1 ;讀入,低有效
CPL A ;有效值變高
RR A
RR A
ANL A, #0FH ;留下低四位
MOV R6, A ;存好
;這樣,就將兩組BCD碼,存到了R6和R7。