ScanDisp.asm
上传用户:cnlazy
上传日期:2021-04-25
资源大小:163k
文件大小:1k
源码类别:

单片机开发

开发平台:

DOS

  1. ;要求将R5中的值显示在二个数码管上 并且R5中的值小于等于99
  2. ;编程思路:  有两个数码管 用30H、31H作显示缓存 30H存个位 31H存十位 R5中的值为一个二进制的值,将其转化为
  3. ;BCD码显示在两个二极管上
  4. ORG  0000H
  5. AJMP Main
  6. Main: MOV SP,#60H
  7.         MOV R5,#53H
  8. LOOP: CLR P1.0
  9.         CALL DispProtec  
  10.         CALL Disp
  11.         CALL DELAY
  12. SETB P1.0
  13. CALL DELAY
  14. AJMP  LOOP      
  15. DispProtec: MOV A,R5
  16.             MOV B,#10
  17. DIV AB
  18. MOV 31H,A ;十位存入31H
  19. MOV A,B
  20. MOV 30H,A ;个位存入30H           
  21. RET
  22.        DELAY: MOV R7,#0DH
  23. DE10: MOV R6,#0FFH
  24. DE01: DJNZ R6,DE01
  25.         DJNZ R7,DE10
  26. RET
  27. Disp: MOV DPTR,#TAB1      ;DPTR指向7段数码显示的译码表(亦即段选)
  28.             MOV A,@R0           ;R0为显示缓存单元指针,初始值指向个位的30H,个位显示后 加1指向下一位,当R1超过33H后又回到30H
  29. MOVC A,@A+DPTR
  30. MOV P0,#0
  31. MOV P0,A
  32. MOV DPTR,#TAB2     ;DPTR指向位选表
  33. MOV A,R0            ;A中的值为当前要显示的缓存地址,由于缓存地址从30H开始,如果A减去30H,就得到当前正显示的是个、十、百、千中的哪一位
  34. CLR  CY             ;因为带借位减 CY清0
  35. SUBB A,#30H
  36. MOVC A,@A+DPTR
  37. MOV P2,A
  38. INC R0               ;显示下一位
  39. CJNE R0,#32H,Over
  40. MOV R0,#30H
  41. Over: RET
  42.         TAB1: DB 3FH,06H,5BH,4FH,66H ,6DH ,7DH ,07H ,7FH ,6FH ,77H,7CH,39H,5EH,79H,71H
  43. TAB2: DB 0FDH,0FEH
  44. END