求大侠改进程序、优化电路,8051汇编,数码管从0000-9999循环跳转。。。

overmind 2012-01-26 09:08:05
初次写这方面的代码,不知道哪里需要优化,哪里应该修改。
以及电路图是否合理等等。

请高手不吝赐教。
下面是代码。

ACALL SETSEG0
ACALL SHOWDIGIT
ACALL SETSEG1
ACALL SHOWDIGIT
ACALL SETSEG2
ACALL SHOWDIGIT
ACALL SETSEG3
ACALL SHOWDIGIT
ACALL SETSEG4
ACALL SHOWDIGIT
ACALL SETSEG5
ACALL SHOWDIGIT
LOOP3:
LOOP2:
LOOP1:
LOOP0:
ACALL SETSEG0
ACALL SHOWDIGIT
ACALL DELAY
INC 0H
MOV R0,0H
CJNE R0,#10,LOOP0
MOV 0H,#0
INC 1H
ACALL SETSEG0
ACALL SHOWDIGIT
ACALL SETSEG1
ACALL SHOWDIGIT
MOV R0,1H
CJNE R0,#10,LOOP1
MOV 0H,#0
MOV 1H,#0
INC 2H
ACALL SETSEG0
ACALL SHOWDIGIT
ACALL SETSEG1
ACALL SHOWDIGIT
ACALL SETSEG2
ACALL SHOWDIGIT
MOV R0,2H
CJNE R0,#10,LOOP2
MOV 0H,#0
MOV 1H,#0
MOV 2H,#0
INC 3H
ACALL SETSEG0
ACALL SHOWDIGIT
ACALL SETSEG1
ACALL SHOWDIGIT
ACALL SETSEG2
ACALL SHOWDIGIT
ACALL SETSEG3
ACALL SHOWDIGIT
CJNE R0,#10,LOOP3
AJMP 0000H

SETSEG0:
MOV R0,0H
MOV P2,#00000101B
RET
SETSEG1:
MOV R0,1H
MOV P2,#00000100B
RET
SETSEG2:
MOV R0,2H
MOV P2,#00000011B
RET
SETSEG3:
MOV R0,3H
MOV P2,#00000010B
RET
SETSEG4:
MOV R0,4H
MOV P2,#00000001B
RET
SETSEG5:
MOV R0,5H
MOV P2,#00000000B
RET

SHOWDIGIT:
MOV A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
RET

DELAY:
MOV R5,#01FH
DL1:MOV R6,#03FH
DL2: MOV R7,#005H
DL3: DJNZ R7,DL3
DJNZ R6,DL2
DJNZ R5,DL1
RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END

我在uVision里面看不到内存的样子0H,1H,2H,3H,如何才能看到呢?
谢谢!!!
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshi_ziyu 2012-01-30
  • 打赏
  • 举报
回复
电路有点复杂

使用一个锁存器就行 动态显示
overmind 2012-01-29
  • 打赏
  • 举报
回复
恩,非常感谢!
[Quote=引用 4 楼 lbing7 的回复:]

给一个思路:

印象中,51时也有BCD码运算的支持指令(如果是我记错,那么就自己实现一个)

实现一个4位数的BCD码计数A

定时器里,定时把A更新显示到数码管上,反正有锁存,定时周期里一次扫完即可
[/Quote]
lbing7 2012-01-29
  • 打赏
  • 举报
回复
给一个思路:

印象中,51时也有BCD码运算的支持指令(如果是我记错,那么就自己实现一个)

实现一个4位数的BCD码计数A

定时器里,定时把A更新显示到数码管上,反正有锁存,定时周期里一次扫完即可
overmind 2012-01-26
  • 打赏
  • 举报
回复
我自己优化了一下,感觉这样效率更高一些,请高手赐教!!!

LOOP5:
ACALL SETSEG5
ACALL SHOWDIGIT
MOV 4H,#0
LOOP4:
ACALL SETSEG4
ACALL SHOWDIGIT
MOV 3H,#0
LOOP3:
ACALL SETSEG3
ACALL SHOWDIGIT
MOV 2H,#0
LOOP2:
ACALL SETSEG2
ACALL SHOWDIGIT
MOV 1H,#0
LOOP1:
ACALL SETSEG1
ACALL SHOWDIGIT
MOV 0H,#0
LOOP0:
ACALL SETSEG0
ACALL SHOWDIGIT
ACALL DELAY
INC 0H
MOV R0,0H
CJNE R0,#10,LOOP0
INC 1H
MOV R0,1H
CJNE R0,#10,LOOP1
INC 2H
MOV R0,2H
CJNE R0,#10,LOOP2
INC 3H
MOV R0,3H
CJNE R0,#10,LOOP3
INC 4H
MOV R0,4H
CJNE R0,#10,LOOP4
INC 5H
MOV R0,5H
CJNE R0,#10,LOOP5
AJMP 0000H

SETSEG0:
MOV R0,0H
MOV P2,#00000101B
RET
SETSEG1:
MOV R0,1H
MOV P2,#00000100B
RET
SETSEG2:
MOV R0,2H
MOV P2,#00000011B
RET
SETSEG3:
MOV R0,3H
MOV P2,#00000010B
RET
SETSEG4:
MOV R0,4H
MOV P2,#00000001B
RET
SETSEG5:
MOV R0,5H
MOV P2,#00000000B
RET

SHOWDIGIT:
MOV A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
RET

DELAY:
RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END

aydf1 2012-01-26
  • 打赏
  • 举报
回复
看不懂
net_friends 2012-01-26
  • 打赏
  • 举报
回复
很复杂 看不懂

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧