在 51 单片机的片内数据存储器 20H 和 21H 单元中,分别存放了数据 9 和 2,编写程序计算两者之差以及乘积。
差,存放到 30H 里,并通过发光二极管的点亮个数显示出来。
乘积,存放到 31H 里, 并通过数码管显示出来。
8 只发光二极管连接在 P1 口。
数码管为共阴极,其段选端 a、b、......g、dp,依次连接在单片机的 P2.0~P2.7;公共端连接于 P3.0 和 P3.1。
要求画出电路图,并写出程序。
题目网址:http://zhidao.baidu.com/question/473736784.html
=======================================
回答如下:
按照要求,画出了电路图,图中的 LED 和数码管,已经显示出了 7 和 18:
图片链接:
程序编写如下:
ORG 0000H
LJMP STA
ORG 0030H
STA:
MOV 20H, #9 ;11
MOV 21H, #2 ;9
;在这里设置数字。要求如下:
;1. 20H 中的数字,必须大于 21H 中的数字,但是不能超过 8。
;2. 20H 中的数字和 21H 中的数字,乘积不能超过 99,因为下面采用了十进制数字的显示。
;-----------------------
MOV A, 20H
CLR C
SUBB A, 21H
MOV 30H, A ;差
;-----------------------
MOV A, 20H
MOV B, 21H
MUL AB
DA A
MOV 31H, A ;乘积
;-----------------------
MOV A, #255
MOV R2, 30H
L1:
CLR C
RLC A
DJNZ R2, L1
MOV P1, A ;以个数显示差
;-----------------------
MOV DPTR, #TAB
L2:
MOV A, 31H
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV P2, A
CLR P3.0
CALL DELAY
SETB P3.0
MOV A, B
MOVC A, @A + DPTR
MOV P2, A
CLR P3.1
CALL DELAY
SETB P3.1
SJMP L2
;-----------------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
TAB: DB 3FH, 06H, 5BH, 4FH ;显示字符存放表
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H
;-----------------------
END
;=======================================
上面的内容,做而论道已经写在百度知道的题目中回答了,但是,百度知道又犯混了,不显示我的答案。
呵呵,不显示就不显示吧,不跟它们一般见识。