整理2010年51单片机程序4*4按键与数码管显示

;----------------------------------------------------------------------
;2010年10月5号

;----------------------------------------------
;控制数码管点阵的8255片选端为P2.1管脚CS1
;PA0---PA7依次接四位数码管的A,B,C,D,E,F,G,DP
;-----------------------------------------------------------------------
;功能: 4*4按键与数码管显L示
;-----------------------------------------------------------------------
 ORG 0000H
 LJMP MAIN
 ORG 0100H
MAIN:
 MOV SP,#60H;给堆栈赋地址初值
 MOV P2,#00H ;P2口5,4,3,2四位为数码管的位选端
 MOV DPTR,#0FDFFH
 MOV A,#80H
 MOVX @DPTR,A  ;将方式控制字写入8255的控制寄存器,将8255的A,B,C口设置为输出口

;-------------扫描第一行-------------------------------------
;------------------------------------------------------------
LOOP0:
 MOV P1,#0FEH;给P3口赋值11111110
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP
 JMP LOOP20
LOOP:
 LCALL DELAY10MS
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP1
 LJMP LOOP0
LOOP1:
 MOV R0,P1
 CJNE R0,#0EEH,LOOP12
 MOV A,#0

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP
LOOP12: CJNE R0,#0DEH,LOOP3
 MOV A,#1

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP
LOOP3:
 CJNE R0,#0BEH,LOOP4
 MOV A,#2

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP
LOOP4:
 CJNE R0,#07EH,LOOP
 MOV A,#3

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP
;---------------扫描第二行------------------------------
LOOP20:
 MOV P1,#0FDH;给P3口赋值11111101
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP2
 JMP LOOP30
LOOP2:
 LCALL DELAY10MS
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP21
 LJMP LOOP20
LOOP21:
 MOV R0,P1
 CJNE R0,#0EDH,LOOP22
 MOV A,#4

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP2
LOOP22: CJNE R0,#0DDH,LOOP23
 MOV A,#5

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP2
LOOP23:
 CJNE R0,#0BDH,LOOP24
 MOV A,#6

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP2
LOOP24:
 CJNE R0,#07DH,LOOP2
 MOV A,#7

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP2
;------------------------------------------------------
;------------------扫描第三行--------------------------
LOOP30:
 MOV P1,#0FBH;给P3口赋值11111101
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP33
 JMP LOOP40
LOOP33:
 LCALL DELAY10MS
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP31
 LJMP LOOP30
LOOP31:
 MOV R0,P1
 CJNE R0,#0EBH,LOOP32
 MOV A,#8

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP33
LOOP32: CJNE R0,#0DBH,LOOP333
 MOV A,#9

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP33
LOOP333:
 CJNE R0,#0BBH,LOOP34
 MOV A,#10

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP33
LOOP34:
 CJNE R0,#07BH,LOOP33
 MOV A,#11

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP33
;--------------------------------------------------------------
;------------------扫描第四行----------------------------------
LOOP40:
 MOV P1,#0F7H;给P3口赋值11111101
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP44
 JMP LOOP0
LOOP44:
 LCALL DELAY10MS
 MOV R0,P1
 MOV A,#0F0H
 ANL A,R0;将R0与到累加器中
 CJNE A,#0F0H,LOOP41
 LJMP LOOP40
LOOP41:
 MOV R0,P1
 CJNE R0,#0E7H,LOOP42
 MOV A,#12

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP44
LOOP42: CJNE R0,#0D7H,LOOP43
 MOV A,#13

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP44
LOOP43:
 CJNE R0,#0B7H,LOOP444
 MOV A,#14

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP44
LOOP444:
 CJNE R0,#077H,LOOP44
 MOV A,#15

 LCALL DISPLAY
 LCALL DELAY10MS
 JMP LOOP44

;--------------------------------------------------------------
DELAY10MS:   ;误差 0us
    MOV R7,#01H
DL1:
     MOV R6,#26H
DL0:
     MOV R5,#82H
     DJNZ R5,$
     DJNZ R6,DL0
     DJNZ R7,DL1
     RET

DISPLAY:
  MOV DPTR,#TABLE
  MOVC A,@A+DPTR
  CALL SHUCHU
  RET

;---------------------------------------------------------------------------------
;子程序功能:输出数据
;入口参数:R0
;出口参数:
;---------------------------------------------------------------------------------
SHUCHU:
 MOV DPTR,#0FDFCH
 MOVX @DPTR,A;将R0中的数据输出到8255的PA口
 RET
;---------------------------------------------------------------------------------
;共阴数码管的段码,供查表使用
;---------------------------------------------------------------------------------
TABLE:
        DB        03FH;0
        DB        006H;1
        DB        05BH;2
        DB        04FH;3
        DB        066H;4
        DB        06DH;5
        DB        07DH;6
        DB        007H;7
        DB        07FH;8
        DB        06FH;9
        DB        077H;A
        DB        07CH;b
        DB        039H;C
        DB        05EH;d
        DB        079H;E
        DB        071H;F
END

原文地址:https://www.cnblogs.com/tao560532/p/2408932.html