51單片機(jī)對兩位 BCD撥盤 的讀出程序
問題:做了一個小設(shè)計,用的是AT89C2051,其中P1口接兩位BCD指撥開關(guān),P3.2接了一個開關(guān),P3.3接了一個繼電器。
兩位BCD指撥開關(guān)的具體接法是公共端接P1.1和P1.2口,8421分別接在P1.3~P1.6口。
我想通過開關(guān)控制繼電器開合。具體要求是:按開關(guān)的次數(shù)由BCD開關(guān)的十位來決定,即BCD上顯示的是數(shù)字3,則按3次P3.2所接的開關(guān),繼電器才開始動作,顯示5,則按5次繼電器才動作,以此類推;而繼電器開合時間由BCD開關(guān)的個位控制,如果BCD上顯示的是數(shù)字3,則繼電器開或合3分鐘,是5則開或合5分鐘。
不知道如何讀入的P1口值并分開成兩部分,請哪位前輩高手幫忙寫個程序,讓我學(xué)習(xí)學(xué)習(xí)。在此萬分感謝。
懸賞分:50 - 解決時間:2009-9-12 14:27
;============================
最佳答案:
利用兩個BCD指撥開關(guān),設(shè)定了按鍵次數(shù)和延時時間(分鐘數(shù));按鍵輸入、繼電器輸出。
很簡單,樓主寫的非常清楚。
BCD指撥開關(guān)(又稱為撥盤、撥碼開關(guān)),其輸出是按照8421形式,但是它有個公共端,輸入高電平的時候,輸出的8421碼是高電平有效。
;----------------------------
;讀入BCD(8421)撥碼開關(guān):
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。