"单片机按键连续长按程序设计与实现"

版权申诉
0 下载量 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口实现了数码管的片选功能,提升了程序的完整性和实用性。