汇编语言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

温馨提示:内容为网友见解,仅供参考
无其他回答

...1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1?_百度...
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 ...

51单片机按键加减清零汇编语言编程
键计数加1JMP KEY_P_ENDLOOP2:DEC K_COUNT ;键计数减1JMP KEY_

51单片机为基础用汇编语言编写用数码管显示一个同时有"加""减""乘...
KEYI:ACALL KS1 CJNE A,#0F0H,LK1 ACALL DIR AJMP KEYI LK1:ACALL DIR ACALL DIR ACALL KS1 CJNE A, #0F0H,LK2 ACALL DIR AJMP KEYI LK2: ACALL KS1 MOV R2,A ORL A,#0FH MOV P0,A ANL A,#0FH ADD A,R2 ;键特征值 CJNE A,#0EEH,JZHI1 MOV A,#00H PUSH ACC JZHI...

51单片机怎么让数码管显示学号?用汇编语言
数码管显示方式为动态扫描方式,当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个...

51单片机按键控制数码管?
TMOD = 0x20; \/\/TMOD: timer 1, mode 2, 8-bit reload PCON = 0x80; \/\/ 数据位8、停止位1。效验位无 (11.0592M)TH1 = 0xF4; \/\/TH1: reload value for 2400@11.0592MHz TR1 = 1; \/\/启动定时器1 ES = 1; \/\/允许串口中断位 EA = 1; \/\/允许总中断位 c=...

用完整的汇编语言编写使数码管循环显示0,1,2,3,4,5,6,7,8,9的程序
程序如下:\/ 用P0口输出到数码管显示0-9 编写:jzy23 交流:paulucy@126.com \/ include<reg52.h> define uint unsigned int define uchar unsigned char \/ 共阴数码管显示码 \/ uchar code display[10]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };\/ 延时函数 功...

51单片机汇编语言按键控制数码管加1加到999
思路是对的,细节描述有问题,算法描述要严谨。为什么要99时清零啊,这可能就是错误的地方了。系统初始化时,清除使用到的寄存器!!然后,当需要加1时做如下动作 寄存器a = a+1 如果寄存器a == 100,{寄存器b=b+1;寄存器a = 0} 这样就可以了,b中的1代表100,a中的1就是1 ...

在51单片机上用C语言实现电子琴功能,但同时数码管可以显示简谱,怎么...
1,数据管显示就没什么了,找几个简单的数码管驱动程序改改就可以了,一般都是先选中数码管,然后设置值,就可以显示了,不过需要注意刷新,10ms刷新一个应该就可以了,刷新频率比较低的话会闪闪的,这个你应该明白。2,蜂鸣器发do音,这个硬件实现我就不知道了,也许有硬件可以 编码控制自动生成对应...

关于STC51单片机按键影响数码管亮度的问题
你的程序是在等待按键释放吧,不再去执行显示子程序了,所以,才出现这种情况。你可以在等待按键释放的同时调用显示子程序。假设按键定义为ins1,显示子程序是display(),可以这么写:if(ins1==0){ 想要写的语句;while(ins1==0) display(); \/\/等待按键释放时调用显示子程序 } ...

关于STC51单片机按键影响数码管亮度的问题
你的程序是在等待按键释放吧,不再去执行显示子程序了,所以,才出现这种情况。你可以在等待按键释放的同时调用显示子程序。假设按键定义为ins1,显示子程序是display(),可以这么写:if(ins1==0){ 想要写的语句;while(ins1==0) display(); \/\/等待按键释放时调用显示子程序 } ...

相似回答