⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2.asm

📁 本软件程序为KEILc51开发环境
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;              PS2键盘接口程序     ;;;;;;;;;;;;;;;;;;;;;;;
;;               言军工作室         ;;;;;;;;;;;;;;;;;;;;;;;
;;               2005.7.10         ;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CLOCK    EQU     P3.2      ;时钟线
KDATA    EQU     P3.1      ;数据线
CAPSLOCK EQU     00H       ;大小写切换
SHIFT    EQU     01H       ;双切换
BFLAG0   EQU     30H       ;位计数
BFLAG1   EQU     31H       ;位计数
BDATA0   EQU     32H       ;数据暂存
BDATA1   EQU     33H

ORG      0000H
LJMP     START
ORG      0003H
LJMP     INTEX0            ;外部中断0
ORG      000BH
RETI
ORG      0013H
RETI
ORG      001BH
RETI
ORG      0023H
RETI

START:CLR     CAPSLOCK
      CLR     SHIFT
      MOV     BDATA0,#0
      MOV     BDATA1,#0
      MOV     BFLAG0,#9 
      MOV     BFLAG1,#11
      SETB    EA
      SETB    EX0 
      LCALL   INIT_LCD
      AJMP    $
 

DECODE:JNB    CAPSLOCK,CODE0               ;译码
       MOV    DPTR,#TABLE0
       AJMP   CODE1
 CODE0:MOV    DPTR,#TABLE
 CODE1:JNB    SHIFT,CODE2
       MOV    DPTR,#TABLE1       
 CODE2:MOV    A,BDATA0
       MOVC   A,@A+DPTR
       MOV    BDATA0,A
       ;CLR    SHIFT
       RET

TABLE:DB    ' ',' ',' ',' ',' ',' ',' ',' '
      DB    ' ',' ',' ',' ',' ',' ','`',' '
      DB    ' ',' ',' ',' ',' ','q','1',' '
      DB    ' ',' ','z','s','a','w','2',' '
      DB    ' ','c','x','d','e','4','3',' '
      DB    ' ',' ','v','f','t','r','5',' '
      DB    ' ','n','b','h','g','y','6',' '
      DB    ' ',' ','m','j','u','7','8',' '
      DB    ' ',',','k','i','o','0','9',' '
      DB    ' ','.','/','l',';','p','-',' '
      DB    ' ',' ','"',' ','[','=',' ',' '
      DB    58H,' ',' ',']',' ',' ',' ',' '
      DB    ' ',' ',' ',' ',' ',' ',' ',' '
      DB    ' ','1',' ','4','7',' ',' ',' '
      DB    '0','.','2','5','6','8',' ',' '
      DB    ' ','+','3','-','*','9',' ',' '

TABLE0:DB    ' ',' ',' ',' ',' ',' ',' ',' '
      DB    ' ',' ',' ',' ',' ',' ','~',' '
      DB    ' ',' ',' ',' ',' ','Q','1',' '
      DB    ' ',' ','Z','S','A','W','2',' '
      DB    ' ','C','X','D','E','4','3',' '
      DB    ' ',' ','V','F','T','R','5',' '
      DB    ' ','N','B','H','G','Y','6',' '
      DB    ' ',' ','M','J','U','7','8',' '
      DB    ' ',',','K','I','O','0','9',' '
      DB    ' ','.','/','l',';','P','-',' '
      DB    ' ',' ','"',' ','[','=',' ',' '
      DB    58H,' ',' ',']',' ',' ',' ',' '
      DB    ' ',' ',' ',' ',' ',' ',' ',' '
      DB    ' ','1',' ','4','7',' ',' ',' '
      DB    '0','.','2','5','6','8',' ',' '
      DB    ' ','+','3','-','*','9',' ',' '
 
TABLE1:DB    ' ',' ',' ',' ',' ',' ',' ',' '
      DB    ' ',' ',' ',' ',' ',' ','~',' '
      DB    ' ',' ',' ',' ',' ','Q','!',' '
      DB    ' ',' ','Z','S','A','W','@',' '
      DB    ' ','C','X','D','E','$','#',' '
      DB    ' ',' ','V','F','T','R','%',' '
      DB    ' ','N','B','H','G','Y','^',' '
      DB    ' ',' ','M','J','U','&','*',' '
      DB    ' ','<','K','I','O',')','(',' '
      DB    ' ','>','?','l',':','P','_',' '
      DB    ' ',' ','"',' ','{','+',' ',' '
      DB    58H,' ',' ','}',' ',' ',' ',' '
      DB    ' ',' ',' ',' ',' ',' ',' ',' '
      DB    ' ','1',' ','4','7',' ',' ',' '
      DB    '0','.','2','5','6','8',' ',' '
      DB    ' ','+','3','-','*','9',' ',' '   

LCDDISP:;LCALL FIRST
        MOV   A,BDATA0
        LCALL WRDATA
	RET

INIT_LCD:                   ;液晶初始化
                                                          
       ACALL  DL10MS    
       MOV    A,#30H        ;功能设定
       ACALL  WRCOM
       ACALL  DL500         ;延时500us  

       MOV    A,#0CH        
       ACALL  WRCOM
       ACALL  DL500  
       
       MOV    A,#01H        ;清屏
       ACALL  WRCOM
       ACALL  DL500

       MOV    A,#6H         ;AC递增  
       ACALL  WRCOM
       ACALL  DL500      
       RET

FIRST:;MOV     A,#80H
      ACALL   WRCOM
      RET

SECOND:MOV    A,#0C0H
       ACALL  WRCOM

       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;写指令
WRCOM:ACALL   BUSY
      CLR     P1.0
      CLR     P1.1      
      MOV     P0,A
      NOP 
      SETB    P1.2      
      NOP
      CLR     P1.2     
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;写数据

WRDATA:ACALL   BUSY
       SETB    P1.0
       CLR     P1.1 
       MOV     P0,A
       NOP
       SETB    P1.2       
       NOP
       CLR     P1.2     
       RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;读忙
BUSY:PUSH   ACC
WAIT:CLR    P1.0
     SETB   P1.1
     NOP
     SETB   P1.2
     MOV    A,P0
     JB     ACC.7,WAIT
     CLR    P1.2
     POP    ACC
     RET  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ;;延时程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DL500:MOV         R6,#0FAH
LOOP1:DJNZ        R6,LOOP1
      RET

DL1MS:MOV         R7,#2H
LOOP2:LCALL       DL500
      DJNZ        R7,LOOP2
      RET 

DL10MS:MOV        R5,#0AH
LOOP3:LCALL       DL1MS
      DJNZ        R5,LOOP3
      RET 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;外部中断0程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTEX0:CLR   EX0             ;中断禁能
       MOV   A,BFLAG0        ;判断第九位是否接收
       JZ    EX00
       MOV   C,KDATA         ;右移一位
       MOV   A,BDATA0
       RRC   A 
       MOV   BDATA0,A
       DEC   BFLAG0          ;位计数减一
       DEC   BFLAG1       
       LJMP  EX0OUT
  EX00:MOV   A,BFLAG1        ;判断11位是否接收
       JZ    EX01
       DEC   BFLAG1
       AJMP  EX0OUT
  EX01:MOV   A,BDATA0
       CJNE  A,#58H,EX02     ;是否是CAPSLOC键按下
       CPL   CAPSLOCK
       AJMP  EX06
  EX02:CJNE  A,#12H,EX03     ;是否是左SHIFT键按下
       CPL   SHIFT
       AJMP  EX06
  EX03:CJNE  A,#59H,EX04     ;是否是右SHIFT键按下
       CPL   SHIFT
       AJMP  EX06
  EX04:CJNE  A,#0F0H,EX05    ;键断码
       AJMP  EX06
  EX05:LCALL DECODE          ;调译码程序
       LCALL LCDDISP         ;调显示程序
  EX06:LCALL DL10MS          ;延时10MS
       MOV   BDATA0,#0
       MOV   BFLAG0,#9       ;位计数重置数
       MOV   BFLAG1,#11
EX0OUT:SETB  EX0             ;中断使能 
       JNB   CLOCK,$         ;低电平等待
       RETI                  ;返回


END    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -