標題: 我這數(shù)碼管控制為啥不對呢 [打印本頁]

作者: darksoulson    時間: 2015-2-14 10:48
標題: 我這數(shù)碼管控制為啥不對呢
我的是四位七段數(shù)碼管,想顯示99秒計時,現(xiàn)在秒的低位不顯示,和高位變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位數(shù)據(jù)保存
  YUN:MOV P1,#0FFH;將p1口置高電平
         
          
          
          
          MOV R0,#30H  ;把數(shù)碼管顯示數(shù)據(jù)表首地址傳送到工作寄存器R0,R0作為數(shù)碼管間接地址指針使用

          MOV R1,#10 ;作為p1.3數(shù)碼管從0-9循環(huán)顯示計數(shù)
  SAN:     ;此為計時p1.3從0-9循環(huán)顯示子程序
      SETB P1.2;將p1.2置高電平,
      CLR P1.3 ;置低電平,準備向P1.3寫入數(shù)據(jù)
       
      MOV P0,@R0;向p0寫入數(shù)碼管現(xiàn)實數(shù)據(jù)表第一位,也就是p1.3此時應該顯示地址30h中的數(shù)據(jù)40h,此時數(shù)碼管顯示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
作者: ahshmj    時間: 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,全部程序結(jié)束。第一次顯示瞬間而過?匆姷幕揪褪堑诙蔚亩未a“24H”,好像兩位數(shù)碼管顯示的一樣(因都是P1.3).不知道是不是編程的本意。
作者: 明白    時間: 2015-2-15 20:02
是低電平點亮數(shù)碼管的位,對嗎?

作者: 明白    時間: 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位數(shù)據(jù)保存
  YUN:    MOV P1,#0FFH;將p1口置高電平        
          MOV R0,#30H  ;把數(shù)碼管顯示數(shù)據(jù)表首地址傳送到工作寄存器R0,R0作為數(shù)碼管間接地址指針使用
          MOV R1,#30H
          MOV R2,#10 ;作為p1.3數(shù)碼管從0-9循環(huán)顯示計數(shù)
          MOV R3,#10 ;
  SAN:     ;此為計時p1.3從0-9循環(huán)顯示子程序      
          MOV P0,@R0;向p0寫入數(shù)碼管現(xiàn)實數(shù)據(jù)表第一位,也就是p1.3此時應該顯示地址30h中的數(shù)據(jù)40h,此時數(shù)碼管顯示0
          CLR P1.3 ;置低電平,準備向P1.3寫入數(shù)據(jù)
          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
作者: darksoulson    時間: 2015-2-15 22:33
ahshmj 發(fā)表于 2015-2-14 22:25
程序的文字說明太少。但可以看出好像P0是段碼,不知道你的P1.2和P1.3是不是位控制?如果是,下面的兩段程序 ...

是啊前輩,我就弄得測試,沒寫十位3以后的,我這個是開始顯示00,過了十秒后就是p1.3位選秒的低位那個10次循環(huán)結(jié)束后顯示11,然后再十次循環(huán)結(jié)束后顯示22,能告訴我您的q嗎
作者: ahshmj    時間: 2015-2-16 18:21
darksoulson 發(fā)表于 2015-2-15 22:33
是啊前輩,我就弄得測試,沒寫十位3以后的,我這個是開始顯示00,過了十秒后就是p1.3位選秒的低位那個10 ...

就這樣聊不是蠻好么。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1