一个 51 单片机的编程题

在 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:



图片链接:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/b970570e4bfbfbedc137b7fe78f0f736aec31f22.html


程序编写如下:


    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  

;=======================================

上面的内容,做而论道已经写在百度知道的题目中回答了,但是,百度知道又犯混了,不显示我的答案。
呵呵,不显示就不显示吧,不跟它们一般见识。

你可能感兴趣的:(51汇编语言)