找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1147|回复: 1
收起左侧

求教:用数码管动态显示法,编汇编程序,使6位数码管显示从000000到FFFFFF,时间间隔1s

[复制链接]
ID:876573 发表于 2021-4-23 13:37 | 显示全部楼层 |阅读模式
求教:用数码管动态显示法,编汇编程序,使6位数码管显示从000000到FFFFFF,时间间隔1s,请大佬指点一下,或者帮忙修改一下下面的程序(次程序是显示:000000-999999,辛苦修改成000000-FFFFFF)






这3张图片是实验书上的,第4张是我画的Proteus原理图(附件的程序是000000-999999显示的参考程序),但是编译好了之后用我的原理图仿真后只显示000000,有问题不知道什么原因,请指点谢谢!是不是我画的原理图哪里不对?原理图如果对的话,把上面的000000-999999的程序hex写进51单片机应该显示000000-999999才对啊,请高手指点一下我的原理图或者程序应该怎么改?(老师的要求是按照实验书上的接法)谢谢!


下面是000000-999999的参考汇编程序

        ORG        0000H
        LJMP        MAIN
        ORG        0030H                ;MAINN主程序
MAIN:        MOV        SP,        #70H        ;设置堆栈SP
        MOV        30H,        #00H        ;设置计算区(30H-32H)的初值
        MOV        31H,        #00H       
        MOV        32H,        #00H
SEND:        LCALL        GIVE                ;计算区的值送至显示缓冲区
        MOV        R7,        #159        ;显示时间初值
SHOW:        LCALL        DISP                ;调用显示子程序
        DJNZ        R7,        SHOW        ;显示时间到?
        LCALL        ADD1                ;计算区的值加1
        LJMP        SEND
;GIVE        送数子程序
GIVE:        MOV        R0,        #45H        ;显示缓冲区末址
        MOV        R1,        #32H        ;计算区末址
        MOV        R2,        #03H       
GETBIT:        MOV        A,        @R1        ;计算区的值送显示缓冲区
        ANL        A,        #0FH
        MOV        @R0,        A
        DEC        R0
        MOV        A,        @R1
        ANL        A,        #0F0H
        SWAP        A
        MOV        @R0,        A
        DEC        R0
        DEC        R1
        DJNZ        R2,        GETBIT        ;送数送完了吗?
        RET
;ADD1:        加1子程序
ADD1:        MOV        R1,        #32H        ;计算区末址
        MOV        R2,        #03H
        SETB        C
BCD1:        CLR        A
        ADDC        A,        @R1
        DA        A                ;调整相加结果为十进制
        MOV        @R1,        A        ;保存结果
        DEC        R1                ;地址指针减1
        DJNZ        R2,        BCD1
        RET
;DISP显示子程序
DISP:        MOV        R0,        #40H        ;显示缓冲区首址
        MOV        R2,        #20H        ;初始位码
        MOV        R3,        #06H       
CLOSE:        CLR        A                ;关显示
        MOV        DPTR,        #8002H
        MOVX        @DPTR,        A
        MOV        A,        @R0        ;查表得段码
        MOV        DPTR,        #TABLE       
        MOVC        A,        @A+DPTR
        MOV        DPTR,        #8004H        ;送段码
        MOVX        @DPTR,        A
        MOV        DPTR,        #8002H        ;送位码
        MOV        A,        R2       
        MOVX        @DPTR,        A
        LCALL        DELAY                ;延时1毫秒
        INC        R0                ;显示缓冲区地址指针加1
        RR        A                ;位码右移
        MOV        R2,        A
        DJNZ        R3,        CLOSE        ;6位数码管显示完了吗?
        RET
;DELAY        延时子程序 晶体震荡频率为12MHz时,延时约1毫秒
DELAY:        MOV        R4,        #5
DELAY1:        MOV        R5,        #100
        DJNZ        R5,        $
        DJNZ        R4,        DELAY1
        RET
;TABLE 段码表对应0-F的段码
TABLE:        DB        3FH,06H,5BH,4FH,66H,6DH,7DH,07H
        DB        7FH,6FH,77H,7CH,39H,5EH,79H,71H
        END       

题目5_3.jpg
题目5_2.jpg
题目5_1.jpg
51hei图片20210423112050.png
回复

使用道具 举报

ID:876573 发表于 2021-4-24 08:24 | 显示全部楼层
没人回复吗,急等大神指点,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表