數碼管掃描程序(採用數據表格)

;此數碼管爲共陽極數碼管,此程序中的取反指令可以不必,可以直接賦給原始值也是可以的
CNT  EQU  30H   ;賦值指令:給標號CNT賦值,標號CNT=30H
  ORG  0000H
  MOV  P1,3FH

;剛開始的數據恢復程序(延時)  
START: MOV  R1,#00H
L0:  DJNZ R1,L0
  MOV  SP,#50H
  
  MOV  CNT,#00H  ;計數器先清零
LOOP: MOV  A,CNT  ;把CNT(地址)中的數(存的是程序表中的地址)付給A
  MOV  DPTR,#TABLE ;定義字形表的起始地址
  MOVC A,@A+DPTR ;TABLE爲表的起始地址
  CALL OUTPUT  ;跳轉到輸出程序
  INC  CNT   ;計數器加一
  MOV  A,CNT  ;重新把CNT放在A中
  CJNE A,#10,LOOP ;比較不相等轉移指令,如果數碼管顯示過9後,就不再轉移了
  MOV  CNT,#00H ;數碼管顯示9後,從新使計數器記0
  SJMP LOOP  ;重新循環
    

;程序中的數據表格,DB爲定義字節指令(從指定的地址開始,在程序存儲器的連續單元中定義字節數據)
TABLE: DB  3FH   ;0
  DB  06H   ;1
  DB  5BH   ;2
  DB  4FH   ;3
  DB  66H   ;4
  DB  6DH   ;5
  DB  7DH   ;6
  DB  27H   ;7
  DB  7FH   ;8
  DB  6FH   ;9

;輸出函數
OUTPUT: PUSH PSW
  CPL  A     ;取反指令
  MOV  P1,A
  CALL DELAY
  POP  PSW
  RET

;延時函數,延時125ms
DELAY: PUSH PSW
  MOV  R0,#00H
L1:  MOV  R1,#00H
L2:  DJNZ R1,L2
  DJNZ R0,L1
  POP  PSW
  RET
  
  END
   

發佈了33 篇原創文章 · 獲贊 19 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章