51单片机汇编语言编程独立按键

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
51单片机入门编程(汇编语言)

ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 SETB ET0 SETB EA CLR P1.0 SJMP $T0ISR: CLR TR0 MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 CPL P1.0 RETI END

你这没有给出原理图,数码管和按键是怎么接的?是仿真实现吗,下图是仿真图,用了四位一体的共阴数码管,4个按键在P3.4~P3.7上。
仿真结果,你要是仿真,就按这个仿真图画,程序就完全适用。如果是实物开发板,就是根据开发板,适当修改程序了。

汇编程序如下
S1 BIT P3.4
S2 BIT P3.5
S3 BIT P3.6
S4 BIT P3.7
DISM1 EQU 31H
DISM2 EQU 32H
DISM3 EQU 33H
DISM4 EQU 34H
START:MOV R0,#7FH
CLEAR:MOV @R0,#0
DJNZ R0,CLEAR
MAINP:ACALL DISUP;主程序
TEST1:JB S1,TEST2
ACALL DELK4
JB S1,TEST2
INC DISM1
MOV A ,DISM1
CJNE A ,#10,CMPM1
CMPM1:JC WAIT1
MOV DISM1,#0
WAIT1:JNB S1 ,$
AJMP MAINP
TEST2:JB S2,TEST3
ACALL DELK4
JB S2,TEST3
INC DISM2
MOV A ,DISM2
CJNE A ,#10,CMPM2
CMPM2:JC WAIT2
MOV DISM2,#0
WAIT2:JNB S2 ,$
AJMP MAINP
TEST3:JB S3,TEST4
ACALL DELK4
JB S3,TEST4
INC DISM3
MOV A ,DISM3
CJNE A ,#10,CMPM3
CMPM3:JC WAIT3
MOV DISM3,#0
WAIT3:JNB S3 ,$
AJMP MAINP
TEST4:JB S4,MAINP
ACALL DELK4
JB S4,MAINP
INC DISM4
MOV A ,DISM4
CJNE A ,#10,CMPM4
CMPM4:JC WAIT4
MOV DISM4,#0
WAIT4:JNB S4 ,$
AJMP MAINP
DISUP:MOV DPTR,#TABLE;显示子程序
MOV R0 ,#DISM1
MOV R2 ,#0FEH
DISB1:MOV P2 ,R2
MOV A ,@R0
MOVC A ,@A+DPTR
MOV P0 ,A
MOV A ,R2
RL A
MOV R2 ,A
ACALL DELAY
INC R0
CJNE R0 ,#DISM4+1,DISB1
RET
DELK4:MOV R6 ,#10
SJMP DELA1
DELAY:MOV R6 ,#2
DELA1:MOV R7 ,#150
DJNZ R7 ,$
DJNZ R6 ,DELA1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H;共阴段码表
DB 6DH,7DH,07H,7FH,6FH
END

四个按键,定义如下:

KEY1 BIT P3.0
KEY2 BIT P3.1
KEY3 BIT P3.2
KEY4 BIT P3.3

按键处理程序:
;-----------------------------------
READ_KEY:

JB KEY1, K2
CALL DELAY
JB KEY1, K2
JNB KEY1, $

PUSH ACC
INC 75H
MOV A, 75H
CJNE A, #10, ZINT01
MOV 75H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K2: JB KEY2, K3
CALL DELAY
JB KEY2, K3
JNB KEY2, $

PUSH ACC
INC 76H
MOV A, 76H
CJNE A, #10, ZINT01
MOV 76H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K3: JB KEY3, K4
CALL DELAY
JB KEY3, K4
JNB KEY3, $

PUSH ACC
DEC 75H
MOV A, 75H
CJNE A, #255, ZINT03
MOV 75H, #9
ZINT03:
POP ACC

JMP K_EXIT
;---------------
K4: JB KEY4, K_EXIT
CALL DELAY
JB KEY4, K_EXIT
JNB KEY4, $

PUSH ACC
DEC 76H
MOV A, 76H
CJNE A, #255, ZINT04
MOV 76H, #9
ZINT04:
POP ACC

K_EXIT:
RET
;---------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
;-----------------------------------

  • 单片机独立按键按下后为什么要取反汇编编程
    答:取反的情况,那个是因为你端口高低电平的问题,不取反也可以,你知道是怎么回事就行。比如4个按键,第二个按下,我们假定应该得到的是0100。但是实际上按键另一端接地了,按下按键是低电平,我们得到的就是1011 取反就得到了我们认知上的统一,0100,表示第二个按下 ...
  • ...实现按键控制发光二极管的点亮和熄灭(汇编语言)
    答:START:ORL P1, #01H ; 准备读入P1.0的引脚信号 MOV C, P1.0 ; 读入的P1.0信号暂存于C JC NEXT ; 判断P1.0的信号是否为高,K是否闭合 SETB P1.1 ; K闭合,P1.1输出高电平,点亮发光二极管 SJMP START ; 转向START重新测试 NEXT:CLR P1.1 ; K断开,...
  • 单片机习题(用汇编语言)
    答:P2_0 P2_2的那两个按钮就是你说的独立式键盘接口,P2_0标号的位置直接连接到P1的口就可以了。按下按钮,端口为低电平
  • 51单片机如何在主程序循环的时候通过按键进入中断子程序?
    答:只要在P3.2和P3.3脚外部有按键,而且按下是接地,那按下键就会引起外部中断0和外部中断1申请中断。在主程序初始化时,设置外部中断为下降沿触发,并开中断就行。
  • 单片机求编写程序,C51
    答:2018-10-01 单片机,c51汇编语言编写程序 1 2018-07-09 C51单片机程序编写 2018-08-07 c51单片机用什么编写程序?keil还是c++? 9 2018-04-18 设单片机系统如何编写一个完整的C51程序使P1.6和P1? 2018-05-02 求大神用c51编写一个单片机小程序 4 2011-12-19 求51单片机浮点运算子程序 C51编程 11 2013...
  • 单片机题目,可以用汇编语言,也可以用c语言
    答:这是典型的流水灯仿真,P1口接有8个LED灯,P3口接4个独立式按键。4个按键控制流水灯的4种花样,延时都是一秒,所以用定时器T0定时50ms,采用T0的中断方式,在中断程序中对中断计数,20次为1秒。仿真图如下。
  • 89C51 单片机 汇编语言 实现下面的应用,一定采纳。跪求
    答:KEY EQU P1.0 PULSE EQU P1.1 NUM EQU 30H FLAG BIT 00H ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#01H MOV NUM,#5 MOV TH0,#HIGH(65536-NUM*100)MOV TL0,#LOW(65536-NUM*100)SETB TR0 SETB ET0 SETB EA CLR FLAG LOOP:JB KEY,JNB KEY,INC NUM...
  • 方波发生器设计 汇编语言编程
    答:方波发生器设计 汇编语言编程 频率范围1-9999HZ,先通过3X4键盘选择方波频率,并在4位数码管上显示出来,再出单片机的并口输出该频率的方波信号,可用按键进行加减1HZ调整... 频率范围1-9999HZ,先通过3X4键盘选择方波频率,并在4位数码管上显示出来,再出单片机的并口输出该频率的方波信号,可用按键进行加减1HZ调整 展开 ...
  • 51单片机输出C延时设计
    答:include<reg51.h> sbit P3.0=P3^0;sbit P1.0=P1^0;int x;int y;void delay(int x){ for(y=110;y>0;y--);for(x;x>0;x--);} void main(){ P1.0=1;while(){ if(P3.0==1){ P1.0=0;delay(780);P1.0=1;} } } 参考资料:自己写的·...
  • 汇编语言设计程序
    答:ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,P1 MOV P0,A SJMP MAIN END