找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2901|回复: 6
打印 上一主题 下一主题
收起左侧

大神帮忙看一下这个单片机汇编程序,为什么动态数码管只能显示一个数字啊?

[复制链接]
跳转到指定楼层
楼主
ID:846769 发表于 2020-11-28 20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MAIN:   
        MOV P1,#0FFH
        MOV A,P1
        CPL A              ;输入此时温度
        LED_0        EQU         30H
    LED_1         EQU         31H
    LED_2         EQU         32H
zhuanhuan:
                MOV         B,#100
                DIV         AB
                MOV         LED_2,A
                MOV         A,B
                MOV         B,#10
                DIV         AB
                MOV         LED_1,A
                MOV         LED_0,B  
                MOV   DPTR, #TABLE
DISP:      

                        
            MOV                A,LED_0                        ;数码显示子程序
                MOVC        A,@A+DPTR
                CLR                P2.2
                MOV                P0,A
                LCALL        DELAY
                SETB        P2.2

                MOV                A,LED_1
                MOVC        A,@A+DPTR
                CLR                P2.1
                MOV                P0,A
                LCALL        DELAY
                SETB        P2.1

                            MOV                A,LED_2
                MOVC        A,@A+DPTR
                CLR                P2.1
                                CLR              P2.2
                MOV               P0,A
                LCALL        DELAY
                SETB        P2.0

                RET

DELAY:        MOV                R6,#10
D1:                MOV                R7,#250
                DJNZ        R7,$
                DJNZ        R6,D1
                RET
DELAY2:        MOV                R5,#20
D2:                MOV                R6,#20
D3:                MOV                R7,#250
                DJNZ        R7,$
                DJNZ        R6,D3
                DJNZ        R5,D2
                RET
TABLE:         DB                 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
                END

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:235200 发表于 2020-11-29 01:26 | 只看该作者
程序结构有问题,第一,主程序未构成循环并且去调用DISP显示子程序,第二,转换程序到底是主程序的一部分还是单独的一个子程序,若为子程序,没有RET指令,第三,延时程序DELAY2在本程序中未调用,可删去。因为对程序结构未搞清,所以不能正常显示
回复

使用道具 举报

板凳
ID:851000 发表于 2020-11-29 09:37 | 只看该作者
程序结构确实有点乱.....
回复

使用道具 举报

地板
ID:401564 发表于 2020-11-30 14:14 | 只看该作者
整个程序没有用到一个JMP指令来循环
程序结构太乱
回复

使用道具 举报

5#
ID:255377 发表于 2020-12-4 17:33 | 只看该作者
回复

使用道具 举报

6#
ID:255377 发表于 2020-12-4 17:33 | 只看该作者
回复

使用道具 举报

7#
ID:517466 发表于 2020-12-5 11:30 | 只看该作者
DISP:      
            MOV         A,LED_0           ;取得第一个显示数据
            MOVC        A,@A+DPTR         ;取得笔段数据           
            CLR         P2.2              ;关闭显示
            MOV         P0,A              ;笔段数据输出到IO口
            SETB        P2.2              ;打开显示
            LCALL       DELAY             ;延迟显示一段时间
            CLR         P2.2              ;关闭第一个数码显示,防止下一个笔段数据串位显示到第一个数码管上

            MOV         A,LED_1           ;取得第二个显示数据
            MOVC        A,@A+DPTR
            CLR         P2.1
            MOV         P0,A
            SETB        P2.1
            LCALL       DELAY
            CLR         P2.1              ;关闭第二个数码显示显示,防止下一个笔段数据串位显示到第二个数码管上
            

            MOV         A,LED_2           ;取得第三个显示数据
            MOVC        A,@A+DPTR
            CLR         P2.0
            MOV         P0,A
            SETB        P2.0
            LCALL       DELAY
            CLR         P2.0              ;不加这个代码,并且没有下面的LJMP语句的话,第三个数码管会一直亮下去
            
            LJMP        DISP              ;循环显示


你之前的代码有几个问题:
1、在显示下一个数码管之前,一定要关闭位驱动,否则会出现一个笔段数据同时显示给几个数码管。
2、在DISP处理中最后执行的是RET。在执行了
CLR                P2.1
CLR              P2.2
SETB        P2.0
之后,P0口保持着第三个数码管的笔段数据,第三个数码管被点亮,并一直保持。

如果想循环显示,必须及时点亮一段时间,然后关闭,处理下一个,并且要保持不断的循环才行
注意,以上代码,是基于P2的IO口输出‘1’时点亮数码管的前提下,才成立。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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