"单片机按键连续长按程序设计与实现"
版权申诉
81 浏览量
更新于2024-02-29
收藏 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 上传
2022-10-15 上传
2022-07-11 上传
2021-05-20 上传
2020-05-04 上传
老帽爬新坡
- 粉丝: 92
- 资源: 2万+
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章