"单片机按键连续长按程序设计与实现"
版权申诉
138 浏览量
更新于2024-02-29
1
收藏 27KB DOCX 举报
本汇编程序由兰建文在51hei培训机构编写,旨在实现单片机P0口对两个数码管动态显示0到99的功能。通过按键进行递加,当数值达到99时回到0,并且按住按键不会影响数码管的动态显示。在任何时刻,按键连续按下3次,每次按键间隔不超过1秒,则程序会循环显示0到9再回到0。若按键间隔时间超过1秒,则显示数值加1,低电平时亮。此外,P2口实现了数码管的片选功能。
程序的主要功能包括按键触发数值递增、动态显示数值、连续按键循环显示0到9并实现数值加1,以及P2口的片选功能。
具体的系统程序以及初始化过程如下:
```汇编程序开始初始化
SHUCHU EQU ;"。。
; 系统程序正文
; 初始化
INIT:
MOV P0,#00H ; P0口清零
MOV P2,#FFH ; P2口置1片选
ACALL DELAY ; 调用延时程序
RET
; 数值递增
COUNT_UP:
MOV A,P0 ; 将P0口当前值读入累加器A
INC A ; A加1
CJNE A,#64H,DIS_NUM ; 如果A不等于64H(相当于100),跳转到DIS_NUM显示数值
MOV A,#00H ; 否则A置0
ACALL DIS_NUM ; 显示数值
RET
; 数码管显示
DIS_NUM:
MOV P0,A ; 将累加器A的值送往P0口
ACALL DELAY ; 调用延时程序
RET
; 连续按键循环显示
LOOP_DISPLAY:
MOV R2,#03H ; 3次连续按键
WAIT_KEY:
ACALL DELAY_KEY ; 调用按键延时程序
JNB P3.0,RESET_LOOP ; 如果P3.0=0 跳转到RESET_LOOP
DJNZ R2,WAIT_KEY ; R2减1,如果R2不等于0则继续等待按键
RESET_LOOP:
MOV A,#00H ; A置0
ACALL DIS_NUM ; 显示数值
RET
; 按键延时程序
DELAY_KEY:
MOV R0,#0FAH ; R0赋初始值
DELAY_1: ; 延时子程序
MOV R1,#0FFH ; R1赋初始值
DELAY_2:
DJNZ R1,DELAY_2 ; R1减1
DJNZ R0,DELAY_1 ; R0减1
RET
; 延时程序
DELAY:
MOV R6,#0FFH ; R6赋初始值
DELAY_1: ; 延时子程序
MOV R7,#0FFH ; R7赋初始值
DELAY_2:
DJNZ R7,DELAY_2 ; R7减1
DJNZ R6,DELAY_1 ; R6减1
RET
```
以上是系统程序的一部分,通过这段程序,单片机可以实现按键的连按、长按功能,并且能够动态显示数值。同时,P2口也实现了数码管的片选功能,使得程序更加完整。
总而言之,本汇编程序通过兰建文在51hei培训机构的编写,实现了单片机按键连按长按功能,包括数值递增、动态显示和连续按键循环显示等功能。同时,P2口实现了数码管的片选功能,提升了程序的完整性和实用性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2022-07-11 上传
2019-11-28 上传
2022-07-11 上传
2022-07-08 上传
老帽爬新坡
- 粉丝: 93
- 资源: 2万+