您当前的位置:五五电子网电子知识单片机-工控设备源码-程序基于单片机的读矩阵键盘,用数码管显示相应键值 正文
基于单片机的读矩阵键盘,用数码管显示相应键值

基于单片机的读矩阵键盘,用数码管显示相应键值

点击数:7308 次   录入时间:03-04 11:43:36   整理:http://www.55dianzi.com   源码-程序

    /*****************************************************
    007.ASM

        接线:P0口接数码管
          P2接矩阵键盘
    用定时中断,若一段时间无操作,数码管进入自到循环显示 
      2010.09.05 
  *******************************************************/
  ORG 0000H
    LJMP MAIN
  ORG 000BH
    LJMP INT_T0
  ORG 0020H
MAIN:      ;主程序
    MOV SP,#50H
  MOV DPTR,#LED_DATA  ;取表首地址
  MOV TMOD,#01H    ;设置定时器T0工作模式
  MOV TH0,#15H    ;写计时初值
    MOV TL0,#9FH
  MOV P2,#0FFH    ;P2口赋初值
  MOV R4,#00H    ;赋定时计数初值
  SETB 00H      ;00H为键值改变标志位
  SETB TR0      ;启动定时器T0
  MOV IE,#82H  ;开中断
  LCALL SHOW    ;数码管初始化
loop:      ;主循环
    LCALL KEY_READ  ;读键盘
JBC 00H,LOOP0  ;判断是否有键被按下,有则转去刷新输出并清零定时计数
CJNE R4,#0C8H,LOOP  ;没有键被按下,则判断定时时间是否达到,到,则进入数码管循环输出
LCALL SHOW1    ;没到,则回到主循环,重新扫描键盘
SJMP LOOP
LOOP0:
    LCALL SHOW
    MOV R4,#00H
SJMP LOOP    ;输出刷新完毕,回到主循环,重新扫描键盘

    /*键盘扫描程序*/
KEY_READ:
    CLR P2.6    ;P2.6输出低
JB P2.0,N0_0
MOV R0,#01H
LCALL DELAY
JB P2.0,N0_0
JNB P2.0,$
MOV R5,#04H
SETB 00H
SETB P2.6
LJMP NEAT
N0_0:
    JB P2.1,N0_1
MOV R0,#01H
LCALL DELAY
JB P2.1,N0_1
MOV R5,#03H
JNB P2.1,$
SETB 00H
SETB P2.6
LJMP NEAT
N0_1:
    JB P2.2,N0_2
MOV R0,#01H
LCALL DELAY
JB P2.2,N0_2
JNB P2.2,$
MOV R5,#02H
SETB 00H
SETB P2.6
LJMP NEAT
N0_2:
    JB P2.3,N1_0
MOV R0,#01H
LCALL DELAY
JB P2.3,N1_0
JNB P2.3,$
MOV R5,#01H
SETB 00H
SETB P2.6
LJMP NEAT
N1_0:
    SETB P2.6
CLR P2.5
JB P2.0,N1_1
MOV R0,#01H
LCALL DELAY
JB P2.0,N1_1
JNB P2.0,$
MOV R5,#08H
SETB 00H
SETB P2.5
LJMP NEAT
N1_1:
JB P2.1,N1_2
MOV R0,#01H
LCALL DELAY
JB P2.1,N1_2
JNB P2.1,$
MOV R5,#07H
SETB 00H
SETB P2.5
LJMP NEAT
N1_2:
JB P2.2,N1_3
MOV R0,#01H
LCALL DELAY
JB P2.2,N1_3
JNB P2.2,$
MOV R5,#06H
SETB 00H
SETB P2.5
LJMP NEAT
N1_3:
JB P2.3,N2_0
MOV R0,#01H
LCALL DELAY
JB P2.3,N2_0
JNB P2.3,$
MOV R5,#05H
SETB 00H
SETB P2.5
LJMP NEAT
N2_0:
    SETB P2.5
CLR P2.4
JB P2.0,N2_1
MOV R0,#01H
LCALL DELAY
JB P2.0,N2_1
JNB P2.0,$
MOV R5,#0CH
SETB 00H
SETB P2.4
LJMP NEAT
N2_1:
JB P2.1,N2_2
MOV R0,#01H
LCALL DELAY
JB P2.1,N2_2
JNB P2.1,$
MOV R5,#0BH
SETB 00H
SETB P2.4
LJMP NEAT
N2_2:
JB P2.2,N2_3
MOV R0,#01H
LCALL DELAY
JB P2.2,N2_3
JNB P2.2,$
MOV R5,#0AH
SETB 00H
SETB P2.4
LJMP NEAT
N2_3:
JB P2.3,NEAT
MOV R0,#01H
LCALL DELAY
JB P2.3,NEAT
JNB P2.3,$
MOV R5,#09H
SETB 00H
SETB P2.4
LJMP NEAT
NEAT:
    SETB P2.4
    RET
 

    /*显示子程序*/
SHOW:
    MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
    RET

    /*循环显示子程序*/

    SHOW1:      ;
  MOV R3,#00H
LOOP1:
    MOV A,R3
  MOVC A,@A+DPTR
  MOV P0,A
  MOV R0,#35H
  LCALL DELAY
  INC R3
  LCALL KEY_READ
  JB 00H,RETUN1
  CJNE R3,#10H,LOOP1
  MOV R3,#00H
  SJMP LOOP1
RETUN1:
    RET

    /*延时子程序*/

    DELAY:
D0:  MOV R2,#0FH
D1:  MOV R1,#0BFH
D2:  DJNZ R1,D2
    DJNZ R2,D1
  DJNZ R0,D0
  RET   
   

    /*定时中断T0处理子程序*/

   
INT_T0:
    CLR EA
    PUSH ACC
  INC R4
  MOV TH0,#15H
    MOV TL0,#9FH
  POP ACC
  SETB EA
    RETI

    /*数码管显示代码,0~F*/

    LED_DATA:
    DB 03H,9FH,25H,0DH,99H,49H,41H,1FH
  DB 01H,09H,11H,0C1H,63H,85H,61H,71H

      END
 




本文关键字:单片机  数码管  键盘  源码-程序单片机-工控设备 - 源码-程序