这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » LCD 键盘与LCD

共2条 1/1 1 跳转至

LCD 键盘与LCD

院士
2006-09-17 18:14:16     打赏
LCD 键盘与LCD



关键词: 键盘    

院士
2006-12-22 22:43:00     打赏
2楼
问 各位高手和同仁,我遇到了问题,希望大家帮我解决一下.我写一个液晶显示和键盘的程序.但是只能输入一次,不能第二次输入,不知道为什么.下面是我的程序.
RS EQU P2.5
RW EQU P2.6
E EQU P2.7
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:  MOV R0,#16
CSH:   MOV P1,#01H       ;液晶初始化。
       LCALL ENABLE
       MOV P1,#01H
       LCALL ENABLE
       MOV P1, #38H
       LCALL ENABLE
       MOV P1,#0FH
       LCALL ENABLE
       MOV P1,#06H
       LCALL ENABLE

       MOV P1,#80H
       LCALL ENABLE
;键盘程序。
START:MOV R1,#00H
      MOV 21H,#80H

KINP: LCALL KAP         /*调用查询函数*/
      JNZ KP1          /*调用延时去抖函数*/
      LJMP  KINP
KP1:  LCALL DLY
      LCALL KAP        /*调用是否松开按键*/
      JNZ   KP2       /*调用判断按键函数开始*/
      LJMP KINP
KP2:  MOV R2,#0FEH

KP4:  MOV P3,R2    
      MOV A,P3      
      JB  ACC.4,L1
      MOV A,#0
      LJMP  KP5             /*判断按键函数*/   
L1:   JB ACC.5,L2
      MOV A,#1
      LJMP KP5
L2:   JB ACC.6,L3         /*A存储相对偏移量*/
      MOV A,#2
      LJMP  KP5
L3:   JB ACC.7,NEXT
      MOV A,#3
          
KP5:  MOV B,A             /*先将A 的值放在B 中*/
      LCALL JS
      MOV A,B
      ADD  A,R4            /*保存键值*/   
      MOV 20H,A
      MOV R4,#0

KP3:  LCALL KAP           /*显示调用*/
      JNZ KP3    
      POP ACC
      MOV R3,A
      LCALL XIANSHI
      LCALL DELAY                                     
      LCALL KINP

NEXT: MOV A,R2
      RL  A    
      MOV R2,A           /*列值判断函数*/
      JNB ACC.4,START
      INC R1             
      LJMP  KP4

KAP:  MOV P3,#0F0H    /*查询函数*/
      MOV A,P3
      CPL A
      ANL A,#0F0H    
      RET

DLY:  MOV R5,#14H             /*延时函数*/
DL:  MOV R7,#0FFH  
LS:   DJNZ R7,LS                  
      DJNZ R5,DL                 
       RET
JS:      MOV DPTR,#BDS      /*基数的首地址*/
      MOV A,R1            /*查基数函数*/
      MOVC A,@A+DPTR
      MOV  R4,A
      RET        
   
XIANSHI:MOV A,20H           /*显示函数*/
        MOV DPTR,#DISPTABLE
        MOVC A,@A+DPTR
        LCALL DISP
        MOV R4,#255
     D4:MOV R5,#255
     D3:DJNZ R5,DELAY
        DJNZ R4,D4
        INC 21H
        MOV A,21H
        MOV P1,A
        LCALL ENABLE
        CJNE A,#90H,RET1
        LJMP D5
RET1:      RET

ENABLE:CLR RS
       CLR RW
       CLR E
       NOP
       LCALL DELAY
       SETB E
       RET

DISP: MOV P1,A
      SETB RS
      CLR  RW
      CLR E
      NOP
      NOP
      LCALL DELAY
      SETB E
      RET

DELAY: MOV R7,#255
    D1:MOV R6,#255
    D2:DJNZ R6,D2
       DJNZ R7,D1
       RET
D5:MOV 21H,#80H
   RET

BDS: DB 0H,4H,8H,0CH       /*基数*/
DISPTABLE:DB 43H,38H,34H,30H,44H,39H,35H,31H,45H,41H,36H,32H,46H,42H,37H,33H      /*键符*/

END          1: 没仔细看不过LCALL KINP有问题,kinp并非一个子程序。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]