导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→键盘程序请教?[guest]

 *第11025篇: 键盘程序请教?

  
楼 主:guest 2003年4月25日22:26
 键盘程序请教?
现在要在P1口接一八位拔动开关,要求相应位拔则延时在原(10秒)的基础上增加或减少延时时间,P1。0——P1。3拔上则为增加时间,P1。4——P1。7拔上为减少时间,思路为有拔上则相应位放一个十进制数1,然后高四和低四比较,是增加的多还是减少的多,再和10比较,最后结果放R5,子程序是一个1秒的延时程序,延时是看R5里是多少,决定循环多少次。自己编的程序如下,但有很多错,小弟也是第一次学,请高手指教,谢谢
KEY:  MOV  P1, #0FFH       ;置输入状态
      MOV  A,  P1          ;读
      CPL  A               ;取反
      ANL  A,  #0FH        ;屏蔽高四位
      JZ   KL
      LCALL  DELAY         ;调用延时去抖动
      JB  P1.0, KEY0       ;有键按下则执行相应命令
K1:   JB  P1.1, KEY1
K2:   JB  P1.2, KEY2
K3:   JB  P1.3, KEY3
     AJMP  KL
KEY0:MOV  30H, #01         ;有键按下相应位加1
     AJMP K1
KEY1:MOV  31H, #01
     AJMP K2
KEY2:MOV  32H, #01
     AJMP K3
KEY3:MOV  33H, #01
     MOV  A,   #00H
     MOV  A,   #30H
     ADD  A,   #31H
     ADD  A,   #32H
     ADD  A,   #33H
     MOV R4,   A           ;加数放R4
     AJMP KL
KL:  MOV  A,   P1
     CPL  A
     SWAP A                ;高低四位交换
     ANL  A,   #0FH        ;屏蔽高四位
     JZ  GOJMP
     LCALL DELAY           ;调用延时去抖动
     JB  P1.4, KEY4        ;有键按下则转相应命令
K5:  JB  P1.5, KEY5
K6:  JB  P1.6, KEY6
K7:  JB  P1.7, KEY7

KEY4:MOV 34H,  #01
     AJMP K5
KEY5:MOV 35H,  #01
     AJMP K6
KEY6:MOV 36H,  #01
     AJMP K7
KEY7:MOV 37H,  #01
     MOV A,    #00H
     MOV A,     34H
     ADD A,     35H
     ADD A,     36H
     ADD A,     37H        ;减数放A
     CLR C                 ;清C(比较)
     SUBB A,R4             ;A-R4
     JC   JIA              ;A  <0则跳JIA
     MOV 21H,  A           ;交换
     MOV A,   #10
     SUBB A, 21H
     AJMP JG
JIA: MOV 20H, A
     MOV A,   R4
     MOV R4,  20H
     SUBB A,  R4
JG:  MOV R5,  A            ;结果放R5
GOJMP:AJMP   KEY 

DELAY:  MOV    R7,#200     ;10ms延时子程序
D1:  MOV    R6,#123
 NOP
D2:     DJNZ   R6,D2
 DJNZ   R7,d1
 RET
 END


请高手帮我,98dian@163.com
QQ:107437596
谢谢!!!

  
2楼:huzimax 2003年4月26日01:00
 以上应当不是你的全部程序吧
另有一不明:你的拔动开关是不是实现功能如同按键,而不是拔码开关?
  
3楼:红心J 2003年4月26日09:58
 SUB_NUM:MOV A,P1
  

SUB_NUM:MOV A,P1
              CJNE A,P1,SUB_NUM
              PUSH ACC     
              ANL A,#0FH
              MOV R0,A
              POP ACC
              SWAP A
              ANL A,#0FH
              CLR  C
              SUBB A,R0
              MOV R5,A
              JC SUB_END
              JNZ SUB_END
              INC R5
SUB_END:RET

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:多功能编程器改进型,只要148元!

[下一篇主题]:再看一下小弟的vhdl程序!