汇编语言51单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1?

ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#TAB MOV R4,#00H CLR A LCALL DISPADDLOOP: LCALL CK1 LCALL DISPADD SJMP LOOPCK1: JB P3.4,CK1 LCALL DS1MS JB P3.4,CK1 RETD1: MOV R4,#00HDISPADD: MOV A,R4 MOVC A,@ A+DPTR JZ D1 MOV P0,A SETB P2.6 CLR P2.6 MOV P0,#0FEH SETB P2.7 CLR P2.7 INC R4 LCALL DS1MSCK2: JNB P3.4,CK2 LCALL DS1MS JNB P3.4,CK2 RETDS1MS: MOV r1,#2DS1LO: MOV r2,#20DS2LO: MOV r3,#200 DJNZ r3,$ DJNZ r2,DS2LO DJNZ r1,DS1LO RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00HEND

原有key1为P3.4,添加个key2键为P3.5;

1、按你显示程序的逻辑,对TAB修改如下:

TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H

即数据的首尾为0(这是个标记而已),中间才是七段码 0--F 的显示数据;

2、对CK1、CK2键盘按下及松开程序做了修改;

3、显示程序也进行了修改,唯独延时程序不用修改;

代码如下:

MAIN:

  MOV DPTR,#TAB 

  MOV R4,#00H 

  MOV R5,#01H 

  CLR A 

  LCALL DISPLAY

LOOP: 

  LCALL KEYDOWN

  LCALL DISPLAY 

  SJMP LOOP


KEYDOWN:

  JB P3.4,CK11    ;key1没有按下则转到key2

  LCALL DS1MS    ;P3.4=0表示Key1按下

  JB P3.4,CK11    ;key1还不能松开

  MOV R5,#01H

  INC R4      ;key1按下为加

  RET

CK11:

  JB P3.5,KEYDOWN   ;key2没有按下则转到key1

  LCALL DS1MS     ;P3.5=0表示Key2按下

  JB P3.4,KEYDOWN   ;key2还不能松开

  MOV R5,#10H

  DEC R4       ;key2按下为减

  RET


D1::

  MOV R4,R5

DISPLAY:

  MOV A,R4 

  MOVC A,@A+DPTR 

  JZ D1 //累加器(A)=0转

  MOV P0,A 

  SETB P2.6 

  CLR P2.6 

  MOV P0,#0FEH 

  SETB P2.7 

  CLR P2.7 

  LCALL DS1MS   ;延时

  LCALL KEYUP

  RET


KEYUP:

  JNB P3.4,KEYUP    ;P3.4=0转

  JNB P3.5,KEYUP    ;等待松开按键

  LCALL DS1MS 

  JNB P3.4,KEYUP

  JNB P3.5,KEYUP

  RET 


TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H


END

温馨提示:答案为网友推荐,仅供参考
相似回答