当前位置:首页 » 编程软件 » 单片机按键程序汇编程序

单片机按键程序汇编程序

发布时间: 2022-06-21 07:18:08

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

四个按键,定义如下:

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
;-----------------------------------

Ⅱ 单片机汇编语言键盘操作程序

//初始化
P1.6 = 0
P1.7 = 0

// 键盘扫描
P1.6 = 1
check (P2.0 - P2.7) , ouput (P16_20-P16_27 register)

P1.6 = 0
P1.7 = 1
check (P2.0 - P2.7), ouput (P17_20-P17_27 register)
P1.7 = 0

// LED显示
check (P16_20-P16_27), set LED20-27
check (P17_20-P17_27), set LED20-27

Ⅲ 朋友们帮忙写个51单片机的按键小程序汇编的

(1);P3.3小键盘按下P1.3亮再按0.5秒灭。
org 0000h
ajmp main0
org 0080h
MAIN0:
CLR 21H ;清标志
main:
mov c,p3.3 ;检测按键
jc main
MOV R6,#200 ;设定延时
MOV R7,#200
TT0:
JNB 21H,TT2 ;检测灯状态
tt:
mov c,p3.3 ;检测按键
jnc tt1

JNB 20H,MAIN ;检测时间标志
CLR 20H
AJMP TT3
TT2:
mov c,p3.3 ;检测按键
jnc tt2
TT3:
CPL 21H ;改变灯状态
cpl p1.3
ajmp main
TT1: NOP ;延时但不是子程序
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
end
(2)数码管数据 p0,数码管控制p2 独立按键p1口 ,;对独立键进行按键次数计数,三位数码管显示。 *
;K1按下后,进行加1计数 *
;K2按下后,进行减1计数。 *
;K3按下后,进行加5计数。 *
;K4按下后,清计数单元,数码管显示0。 *
;按住键可以快速计数。
K1 BIT P1.4
K2 BIT P1.5
K3 BIT P1.6
K4 BIT P1.7
K_OLD EQU 30H
K_NEW EQU 31H
K_COUNT EQU 32H
DISSTART EQU 40H ;显示单元首地址
LED_DATA EQU P0 ;数码管数据口定义
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0080H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV K_COUNT,#00H
MAIN1:
CALL CONVT
CALL PLAY
CALL KEY_PROG
JMP MAIN1

KEY_PROG:
CALL K_SCAN ;键扫描
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP KEY_P_END
KEY_P1:
MOV R4,#20
KEY_P2:
CALL CONVT ;用显示程序来进行键延时
CALL PLAY
DJNZ R4,KEY_P2

CALL K_SCAN ;再判断键是否按下
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP KEY_P_END
KEY_P3:
JB ACC.0,LOOP1 ;K1按下
JB ACC.1,LOOP2 ;K2按下
JB ACC.2,LOOP3 ;K3按下
JB ACC.3,LOOP4 ;K4按下
JMP KEY_P_END
LOOP1:
INC K_COUNT ;键计数加1
JMP KEY_P_END
LOOP2:
DEC K_COUNT ;键计数减1
JMP KEY_P_END
LOOP3:
INC K_COUNT ;键计数加5
INC K_COUNT
INC K_COUNT
INC K_COUNT
INC K_COUNT
JMP KEY_P_END
LOOP4:
MOV K_COUNT,#00H ;键计数单元清零
KEY_P_END:
RET
;---------------------------------------------------------
;代码变换 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
MOV A,K_COUNT
MOV B,#100
DIV AB
MOV DISSTART+2,A ;百位存放在DISSTART+2
MOV A,#10
XCH A,B
DIV AB
MOV DISSTART+1,A ;十位存放在DISSTART+1
MOV DISSTART,B ;个位存放在DISSTART
RET
;---------------------------------------------------------
; 键扫描子程序
;---------------------------------------------------------
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
;---------------------------------------------------------
;延时子程序
;---------------------------------------------------------
DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
PLAY:
MOV R0,#DISSTART ;获得显示单元首地址
MOV R1,#07FH ;从第一个数码管开始
MOV R2,#03H ;共显示3位数码管
DISP1:
MOV A,@R0 ;获得当前位地址
MOV DPTR,#TAB_NU ;获得表头
MOVC A,@A+DPTR ;查表获得显示数据
MOV LED_DATA,A ;显示数据
MOV P2,R1 ;开始显示当前位
MOV A,R1 ;准备显示下一位
RR A
MOV R1,A ;下一位
INC R0 ;取下一个单元地址
LCALL DELAY2MS ;延时 2 MS
DJNZ R2,DISP1 ;重复显示下一个
MOV P2,#0FFH ;关闭显示
RET ;显示完成,返回
;---------------------------------------------------------
;延时子程序
;---------------------------------------------------------
DELAY2MS:
MOV R6,#10
DEL1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
TAB_NU:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代码表
;**********************************************************
END

两个例子我想够你明白的了。详细的解释,代表性的例子,可慢慢学习

Ⅳ 求51单片机按键点灯汇编程序,按一下按键灯亮(一直亮),再按一下灭

;以下为一个按键控制一个灯的程序!!!
ORG 0000H
SETB P1.0
START:
JB P1.0,NEXT ;设按键为低电平有效。
JNB P1.0,$
CPL P3.0
NEXT:
SJMP START
END

Ⅳ 单片机 汇编语言如果要实现按键按下后连加或连减的效果,程序该怎么编写

汇编很久没用过了,提供一下思路,供参考!
可采用计时的方式,检测按键按下状态超过2秒后,数据开始增大递加递减的步距(之前是每次加减1,增大后,每次加减10),松开按键后,计时器清零!
采用计次的方式也可以实现,按键后,数据递加或递减一次,延时300毫秒,再次检测按键,未松开,继续递加,加满5次后,开始增发递加或递减步距,松开按键后,计次清零!

Ⅵ 请教关于单片机按键扫描的汇编语言

这是一个典型的T扫电路,具体代码我就不说了,我现在来说一下它的原理
扫描是一次把一个IO置0,其它的IO均为输入状态(51是准双向IO,没有输入输出概念,把输出高当输入即可)。比如说,现在是扫描P00,那么把P00写0,其它的IO写1,然后把所有的IO读取回来,把值赋给一个临时变量用来判断,eg key_buffer_temp =P0; 把扫描(写0的相应)位强制性写上1, 即
key_buffer_temp=key_buffer_temp|0x01;这时看这个key_buffer_temp的值,有没有位是0的,即这个值是不是0xff,如果是0xff,则和P00接的按键都没有按键。如果不是0xff,则有几位是0就有几个按键。这样循环下去,一直扫到P06(不用扫P07)。
程序的注意点:
1扫描P00时,只看读回来key_buffer_temp的位1--位7,扫描P01时,只看读回来key_buffer_temp的位2--位7,……扫描P06时,只看读回来key_buffer_temp的位7,不用扫描P07
2每扫描一个就判断一次key_buffer_temp的值,一个个位来判断,同时把计数加1,如果有按键则把计数的值赋给key_value0,key_value1……
3扫描结束后看key_value0,key_value1……里面的值,有几个就几个按键
4比如说key_value0为1,key_value为10,那么就是S1,和S10有按键

至于消抖,这一般的做法就是多采样几次

Ⅶ 单片机按键控制LED汇编程序

一键多功能按键识别技术 1.实验任务 开关K1接在P3.2管脚上,在AT89S51单片机的P0.0端口接有1个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流下去。 2.系统板上硬件连线 把“单片机系统”区域中的P3.2端口连接到“独立式键盘”区域中的K1端口上;把P0.0连到L1上 3.程序设计方法 (1. 设计思想由来 在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。 (2. 设计方法 从上面的要求我们可以看出,L1到亮灭受开关K1来控制,我们给L1亮灭定义出不同的ID号,当L1在亮时,ID=0;当L1在灭时,ID=1;分别给出不同的ID号我们就能够完成上面的任务了 4.汇编程序: ID EQU 30H K1 BIT P3.2 L1 BIT P0.0 ORG 0000H CLR P1.7 MOV ID,#00H START: JB K1,REL ;K1没闭合转 LCALL DELAY10MS ;K1闭合,延时消抖动 JB K1,REL :再判断 INC ID MOV A,ID CJNE A,#02,REL MOV ID,#00H REL: JNB K1,$ ;等待开关弹起 MOV A,ID CJNE A,#00H,IS0 ;判断相应ID CLR L1 :ID=0,灯亮 LCALL DELAY光 ;延时 SJMP START IS0: CJNE A,#01H,START; SETB L1 LCALL DELAY SJMP START DELAY10MS: MOV R6,#20 ;延时10MS子程序 LOOP1: MOV R7,#248 DJNZ R7,$ DJNZ R6,LOOP1 RET DELAY: MOV R5,#20 ;延时20MS子程序 LOOP2: LCALL DELAY10MS DJNZ R5,LOOP2 RET END
请采纳答案,支持我一下。

Ⅷ 51单片机汇编语言按键如何编程

编程时,要把整个程序,分解成一个一个模块。
一个模块,只包括一个功能。
那么,KEY 模块:
读出按键、消除抖动、读取键值,返回键值。
键值包括:00H、08H... 20H,FFH(无键)。
这个 KEY 模块,到这就完了。
按键如何处理,则是另外的模块。
楼主流程图,包罗万象,好像是个主程序。不好弄。

Ⅸ 求AT89C51 单片机的按钮长按2秒的汇编程序!

loop: lcall key ;无键按下
jz loop ;
cjne a,#16,loop_next1 ;看看是否是需要的键值,不是就跳走,是就继续
setb flag_2s ;启动定时器2秒定时开始
mov 1dh,#0 ;2秒寄存器清0
loop_2: lcall read_data ;等待期间可以做些其他的事
lcall nibtd_ymd ;等待期间可以做些其他的事
lcall nibtd_hms ;等待期间可以做些其他的事
lcall nibtd_run ;等待期间可以做些其他的事
lcall key ;扫描键盘
jz loop ;无键按下跳走
cjne a,#16,loop ;有键按下 看看是否是需要的键值
jb flag_2s,loop_2 ;还没按住保持2秒,继续等待
loop_1: 2秒已到,继续

Ⅹ 单片机按键控制点阵显示 汇编程序

你是说在
P1.0

P3.0
之间连上一个开关吗?
-----------------------------
MOV
C,
P1.0
MOV
P3.0,
C
上述两句即可把P1.0的信号传送到P3.0。
MOV
C,
P3.0
MOV
P1.0,
C
上述两句即可把P3.0的信号传送到P1.0。

热点内容
phpnow解压版 发布:2025-05-16 02:52:49 浏览:810
dmporacle数据库 发布:2025-05-16 02:44:31 浏览:831
云主机上传 发布:2025-05-16 02:44:30 浏览:82
鼠标如何编程 发布:2025-05-16 02:29:09 浏览:816
安卓70能用什么软件 发布:2025-05-16 01:45:09 浏览:481
编程发展史 发布:2025-05-16 01:38:52 浏览:529
android图片气泡 发布:2025-05-16 01:38:40 浏览:887
文件加密编辑器下载 发布:2025-05-16 01:30:41 浏览:344
linuxapacheyum安装 发布:2025-05-16 01:30:31 浏览:477
大连宾利浴池wifi密码是多少 发布:2025-05-16 01:25:36 浏览:172