找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我这数码管控制为啥不对呢

[复制链接]
跳转到指定楼层
楼主
ID:73640 发表于 2015-2-14 10:48 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的是四位七段数码管,想显示99秒计时,现在秒的低位不显示,和高位变1低位也变1
程序如下
ORG 00H
START:
      MOV 30H,#40H
          MOV 31H,#79H
          MOV 32H,#24H
          MOV 33H,#30H
          MOV 34H,#19H
          MOV 35H,#12H
          MOV 36H,#02H
          MOV 37H,#78H
          MOV 38H,#00H
          MOV 39H,#10H          

          MOV 3AH,#40H    ;保存秒  10位
          MOV R7,#00H           ;秒10位数据保存
  YUN:MOV P1,#0FFH;将p1口置高电平
         
          
          
          
          MOV R0,#30H  ;把数码管显示数据表首地址传送到工作寄存器R0,R0作为数码管间接地址指针使用

          MOV R1,#10 ;作为p1.3数码管从0-9循环显示计数
  SAN:     ;此为计时p1.3从0-9循环显示子程序
      SETB P1.2;将p1.2置高电平,
      CLR P1.3 ;置低电平,准备向P1.3写入数据
       
      MOV P0,@R0;向p0写入数码管现实数据表第一位,也就是p1.3此时应该显示地址30h中的数据40h,此时数码管显示0
          SETB P1.3
          CLR P1.2
          MOV P0,3AH
          CLR P1.3
      INC R0
          CALL YAN
          DJNZ R1,SAN
          INC R7
          CALL MIAOSHI
          
          JMP YUN

YAN:  MOV R2,#100
   D1:MOV R4,#50
   D: MOV R3,#200
      DJNZ R3,$
          DJNZ R4,D
          DJNZ R2,D1
          RET

MIAOSHI:CJNE R7,#1,MIAO2
                MOV  3AH,31H
                SETB P1.3
                MOV P0,3AH
                CLR P1.3
                RET
MIAO2: CJNE R7,#2,MIAO3
                MOV  3AH,32H
                SETB P1.3
                MOV P0,3AH
                CLR P1.3
                RET      
MIAO3:  
  END
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2015-2-14 22:25 | 只看该作者
程序的文字说明太少。但可以看出好像P0是段码,不知道你的P1.2和P1.3是不是位控制?如果是,下面的两段程序里面的都是P1.3不好理解。

MIAOSHI:CJNE R7,#1,MIAO2
                MOV  3AH,31H
                SETB P1.3
                MOV P0,3AH
                CLR P1.3
                RET
MIAO2: CJNE R7,#2,MIAO3
                MOV  3AH,32H
                SETB P1.3
                MOV P0,3AH
                CLR P1.3
                RET   

第一次运行到  MIAOSHI  时,R7=1,显示段码“79H”,第二次R7=2,显示段码“24H”,第3次R=3,全部程序结束。第一次显示瞬间而过。看见的基本就是第二次的段码“24H”,好像两位数码管显示的一样(因都是P1.3).不知道是不是编程的本意。
回复

使用道具 举报

板凳
ID:19715 发表于 2015-2-15 20:02 | 只看该作者
是低电平点亮数码管的位,对吗?
回复

使用道具 举报

地板
ID:19715 发表于 2015-2-15 20:07 | 只看该作者
ORG 00H
START:
          MOV 30H,#40H
          MOV 31H,#79H
          MOV 32H,#24H
          MOV 33H,#30H
          MOV 34H,#19H
          MOV 35H,#12H
          MOV 36H,#02H
          MOV 37H,#78H
          MOV 38H,#00H
          MOV 39H,#10H         

          MOV R7,#00H           ;秒10位数据保存
  YUN:    MOV P1,#0FFH;将p1口置高电平        
          MOV R0,#30H  ;把数码管显示数据表首地址传送到工作寄存器R0,R0作为数码管间接地址指针使用
          MOV R1,#30H
          MOV R2,#10 ;作为p1.3数码管从0-9循环显示计数
          MOV R3,#10 ;
  SAN:     ;此为计时p1.3从0-9循环显示子程序      
          MOV P0,@R0;向p0写入数码管现实数据表第一位,也就是p1.3此时应该显示地址30h中的数据40h,此时数码管显示0
          CLR P1.3 ;置低电平,准备向P1.3写入数据
          CALL YAN
          SETB P1.3
          MOV P0,@R1
          CLR P1.2
          CALL YAN
          SETB P1.2;将p1.2置高电平
          INC R0
          DJNZ R2,SAN
          MOV R0,#30H
          MOV R2,#10
          INC R1
          DJNZ R3,SAN
          MOV R1,#30H
          MOV R3,#10         
          JMP YUN

YAN:  MOV R4,#100
   D1:MOV R6,#50
   D: MOV R5,#200
      DJNZ R5,$
          DJNZ R6,D
          DJNZ R4,D1
          RET
  END
回复

使用道具 举报

5#
ID:73640 发表于 2015-2-15 22:33 来自手机 | 只看该作者
ahshmj 发表于 2015-2-14 22:25
程序的文字说明太少。但可以看出好像P0是段码,不知道你的P1.2和P1.3是不是位控制?如果是,下面的两段程序 ...

是啊前辈,我就弄得测试,没写十位3以后的,我这个是开始显示00,过了十秒后就是p1.3位选秒的低位那个10次循环结束后显示11,然后再十次循环结束后显示22,能告诉我您的q吗
回复

使用道具 举报

6#
ID:7485 发表于 2015-2-16 18:21 | 只看该作者
darksoulson 发表于 2015-2-15 22:33
是啊前辈,我就弄得测试,没写十位3以后的,我这个是开始显示00,过了十秒后就是p1.3位选秒的低位那个10 ...

就这样聊不是蛮好么。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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