一個 51 單片機(jī)的編程題
在51單片機(jī)的片內(nèi)數(shù)據(jù)存儲器20H和21H單元中,分別存放了數(shù)據(jù)9和2,編寫程序計算兩者之差以及乘積。
差,存放到30H里,并通過發(fā)光二極管的點亮個數(shù)顯示出來。
乘積,存放到31H里,并通過數(shù)碼管顯示出來。
8只發(fā)光二極管連接在P1口。
數(shù)碼管為共陰極,其段選端a、b、......g、dp,依次連接在單片機(jī)的P2.0~P2.7;公共端連接于P3.0和P3.1。
要求畫出電路圖,并寫出程序。
按照要求,畫出了電路圖,圖中的LED和數(shù)碼管,已經(jīng)顯示出了7和18:
程序編寫如下:
ORG0000H
LJMPSTA
ORG0030H
STA:
MOV20H,#9;11
MOV21H,#2;9
;在這里設(shè)置數(shù)字。要求如下:
;1.20H中的數(shù)字,必須大于21H中的數(shù)字,但是不能超過8。
;2.20H中的數(shù)字和21H中的數(shù)字,乘積不能超過99,因為下面采用了十進(jìn)制數(shù)字的顯示。
;-----------------------
MOVA,20H
CLRC
SUBBA,21H
MOV30H,A;差
;-----------------------
MOVA,20H
MOVB,21H
MULAB
DAA
MOV31H,A;乘積
;-----------------------
MOVA,#255
MOVR2,30H
L1:
CLRC
RLCA
DJNZR2,L1
MOVP1,A;以個數(shù)顯示差
;-----------------------
MOVDPTR,#TAB
L2:
MOVA,31H
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP2,A
CLRP3.0
CALLDELAY
SETBP3.0
MOVA,B
MOVCA,@A+DPTR
MOVP2,A
CLRP3.1
CALLDELAY
SETBP3.1
SJMPL2
;-----------------------
DELAY:
DJNZR7,$
DJNZR7,$
RET
TAB:DB3FH,06H,5BH,4FH;顯示字符存放表
DB66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH
DB39H,5EH,79H,71H
;-----------------------
END
;=======================================