一个 51 单片机的编程题
扫描二维码
随时随地手机看文章
在51单片机的片内数据存储器20H和21H单元中,分别存放了数据9和2,编写程序计算两者之差以及乘积。
差,存放到30H里,并通过发光二极管的点亮个数显示出来。
乘积,存放到31H里,并通过数码管显示出来。
8只发光二极管连接在P1口。
数码管为共阴极,其段选端a、b、......g、dp,依次连接在单片机的P2.0~P2.7;公共端连接于P3.0和P3.1。
要求画出电路图,并写出程序。
按照要求,画出了电路图,图中的LED和数码管,已经显示出了7和18:
程序编写如下:
ORG0000H
LJMPSTA
ORG0030H
STA:
MOV20H,#9;11
MOV21H,#2;9
;在这里设置数字。要求如下:
;1.20H中的数字,必须大于21H中的数字,但是不能超过8。
;2.20H中的数字和21H中的数字,乘积不能超过99,因为下面采用了十进制数字的显示。
;-----------------------
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;以个数显示差
;-----------------------
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
;=======================================