• 整理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

  • 相关阅读:
    .html(),.text()和.val()的差异总结:
    获取或设置checkbox radio select的值
    sublime 搜索时忽略文件夹
    转载------一小时包教会 —— webpack 入门指南
    转载--git教程
    转载--网站数据统计分析中的日志收集原理及其实现
    devexpress 安装及破解
    基于socket的客户端和服务端聊天简单使用 附Demo
    Ajax技术原理小结
    oracle 资源学习汇总
  • 原文地址:https://www.cnblogs.com/tao560532/p/2408932.html
Copyright © 2020-2023  润新知