标题: 单片机串行控制七段数码管代码错误? [打印本页]

作者: mentooo    时间: 2021-12-29 00:02
标题: 单片机串行控制七段数码管代码错误?
本帖最后由 mentooo 于 2021-12-29 12:23 编辑

《实例解读51单片机完全学习与应用》程序8-15
目标:数码管显示1和5
原代码如下:Keil调试不正确!!新手求解
  1. ORG                00H                           
  2. START:
  3.         MOV                30H,#1                        ; 低位七段数码管DS0显示数据
  4.         MOV                31H,#5                        ; 高位七段数码管DS1显示数据
  5. MOV             R0,#30H                        ; R0=30H
  6.         MOV             R1,#40H                        ; R1=40H
  7. MOV             R2,#2                        ; R2=2
  8. DP10:   
  9. MOV      DPTR,#TABLE           ; 装表
  10. MOV             A,@R0                        ; 将R0所指的数据载入A
  11.         MOVC            A,@A+DPTR              ; 取表
  12.         MOV             @R1,A                        ; 把数据暂时保存在R1所指的地址中
  13. INC                R1                                ; R1自增1
  14. INC                R0                                ; R0自增1
  15.         DJNZ        R2,DP10                        ; 如果R2不等于0,说明没有取完两个段码,跳回DP10循环
  16.         MOV             R0,#40H               ; R0=40H,指向刚才保存段码的空间
  17.         MOV             R1,#2                  ; R1=2,段码共有2个字节数
  18. DP11:   
  19. MOV             R2,#8                  ; R2=8,每位显示数据共有8个段码,R2作计数器 
  20.         MOV             A,@R0                 ; 把R0指向的段码数据载入A
  21. DP12:   
  22. RLC                A                      ; 段码数据向左移动一位
  23.         MOV                P2.0,C                  ; 串行输出一位段码数据
  24.         CLR                P2.1                    ; 发送位移脉冲
  25.         SETB        P2.1                        ; 形成上升沿
  26.         DJNZ        R2,DP12                        ; 判断是否输出8位段码
  27.         INC                R0                                ; R0自增1
  28.         DJNZ        R1,DP11                        ; 判断是否输出两个显示数据
  29.         JMP                $

  30. TABLE:                                                ;七段数码管显示数据表(段码)
  31. DB                40H,79H,24H,30H,19H ;0,1,2,3,4
  32.         DB                12H,02H,78H,00H,10H ;5,6,7,8,9
  33.         END
复制代码





作者: angmall    时间: 2021-12-29 17:52
Keil没有问题呀



你的Keil有什么错误?



作者: mentooo    时间: 2021-12-29 22:00
angmall 发表于 2021-12-29 17:52
Keil没有问题呀

这个程序 p2.0口 会一直输出0  ,因为RLC  A的值就是0
《实例解读51单片机完全学习与应用》第210页。
我再研究下。
作者: 188610329    时间: 2021-12-30 09:55

        SETB        P2.1                        ; 形成上升沿
        CLR          P2.1                    ; 发送位移脉冲




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1