单片机按键连按长按汇编程序.docx

上传人:b****4 文档编号:27505920 上传时间:2023-07-02 格式:DOCX 页数:23 大小:26.53KB
下载 相关 举报
单片机按键连按长按汇编程序.docx_第1页
第1页 / 共23页
单片机按键连按长按汇编程序.docx_第2页
第2页 / 共23页
单片机按键连按长按汇编程序.docx_第3页
第3页 / 共23页
单片机按键连按长按汇编程序.docx_第4页
第4页 / 共23页
单片机按键连按长按汇编程序.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

单片机按键连按长按汇编程序.docx

《单片机按键连按长按汇编程序.docx》由会员分享,可在线阅读,更多相关《单片机按键连按长按汇编程序.docx(23页珍藏版)》请在冰豆网上搜索。

单片机按键连按长按汇编程序.docx

单片机按键连按长按汇编程序

单片机按键连按长按汇编程序

;===============================================================

;程序编写人:

兰建文

;编写地点:

51hei培训机构

;时间:

6月7日下午星期日

;功能:

本程序实现P0口的对2个数码管显示0到99,一个按键实现一次

;按键只递加1次,到99回到0,按着不动不影响数码管动态显示;任何时

;刻,任何一个按键,若按键连续按键3次,每次间隔时间不大于1秒,循

;环显示0到9回到0。

若间隔时间大于1秒,显示加1,低电平亮

;P2口实现对数码管的片选功能

;===============================================================

;==========================系统程序=============================

;=========================开始初始化============================

SHUCHUEQUP0;定义P0口为输出口

PIANXUANEQUP2;定义P2口为片选口

SHUZIEQU30H;设置处理数据存放地址

JIANBIT0BIT20H.0;设置按键标志位

XIAN0BIT20H.2;显示标志位

T_BITBIT21H.0;设置中断定时器0标志位

LIANANBIT20H.1;设置连按标志位

BIT4BIT20H.2

MODEEQU01H

SHUEQU40H

;========================程序开始==============================

ORG00H;程序开始

LJMPSTART;跳到START

ORG0BH;中断定时器0入口地址

JMPT0_1;跳到定时器0服务程序

ORG0030H;入口地址

;=========================主程序===============================

START:

MOVSP,#60H;移开指针

MOVSHUZI,#00;数据初始化

MOVDPTR,#TAB;查表初始化

MOVP1,#0F8H;设置P1.0口为输入

CALLINIT;开中断

CLRJIANBIT0;按键标志位清0

CLRLIANAN;连按标志位清0

CLRBIT4

SETBT_BIT;中断标志位置1

MOVSHU,#0

MOVR2,#0

MOVR3,#0

MOVR4,#0

MOVR5,#200

MAIN:

JNBT_BIT,MAIN;等待中断

CLRT_BIT;中断标志位清0

JBBIT4,VV

INCR3

CJNER3,#25,XX

MOVR3,#00

MOVR2,#0

JMPDD

XX:

CJNER2,#3,VV

SETBLIANAN

MOVR2,#00

DD:

CLRBIT4

VV:

JBLIANAN,XUNHUAN;判断是否有连按

CC:

CALLJISUAN;计算分离十位和个位

CALLDISPLAY;显示个位和十位

JNBJIANBIT0,PANDUAN;按键标志位=1判断P1.3口,若为0则判断按键是否抬起

JNBP1.3,XIANSHI0;若没抬起(P1.3=0)则调到XIANSHI0

SETBBIT4

INCR2

MOVR3,#0

CLRJIANBIT0;按键标志位清0

CLRXIAN0;显示标志位清0

JMPMAIN;返回MAIN

PANDUAN:

JBP1.3,MAIN;若按键抬起则返回MAIN,若没有抬起按键标志位清0

SETBJIANBIT0

JMPMAIN

XIANSHI0:

JBXIAN0,MAIN

SETBXIAN0;显示标志位清0

CALLJIACHULI;加处理

JMPMAIN

XUNHUAN:

MOVA,SHU

CJNEA,#10,KKK

MOVSHU,#0

CLRLIANAN

MOVA,SHU

KKK:

MOVCA,@A+DPTR;查表

MOVSHUCHU,A

MOVPIANXUAN,#05

INCR4

CJNER4,#50,OUTT

INCSHU

MOVR4,#0

OUTT:

JMPMAIN

;====================定时中断0服务子程序========================

;输入:

;输出:

;实现的功能:

实现定时20MS,影响标志位T_BIT

;===============================================================

T0_1:

MOVTMOD,#MODE;定时器1工作方式1

MOVTL0,#0E0H;设置定时初值

MOVTH0,#0B1H

SETBT_BIT;定时标志位清0

RETI

;========================中断设置子程序=========================

;输入:

;输出:

;实现的功能:

初始化设置定时器,设置初值

;===============================================================

INIT:

MOVTMOD,#MODE;定时器0工作方式1

MOVTL0,#0E0H

MOVTH0,#0B1H

MOVIE,#82H;开定时器中断0

SETBTR0;开定时器0

RET

;========================计算子程序=============================

;输入:

30H

;输出:

"A和B"

;实现的功能:

把30H的数据的十位和个位分离出来

;===============================================================

JISUAN:

MOVA,SHUZI;数据放在A中

MOVB,#10;除数放在B中

DIVAB;商放在A中,余数放在B中

RET

;========================显示子程序=============================

;输入:

"A"

;输出:

"P0口"

;实现的功能:

把A的数输出到P0口显示,十位和个位分开显示

;===============================================================

DISPLAY:

MOVCA,@A+DPTR;查表

MOVSHUCHU,A;显示十位

MOVPIANXUAN,#04H;片选

CALLDELAY;查表

MOVSHUCHU,#0FFH;关闭数码管

MOVA,B

MOVCA,@A+DPTR;查表

MOVSHUCHU,A;显示个位

MOVPIANXUAN,#05H;片选

CALLDELAY;延时

MOVSHUCHU,#0FFH;关闭数码管

RET

;======================加处理子程序=============================

;输入:

;输出:

;实现的功能:

把30H地址加1

;===============================================================

JIACHULI:

MOVA,SHUZI

CJNEA,#99,L0;若A不等于9,则跳到LL

MOVA,#00

JMPL1

L0:

INCA;自加一

L1:

MOVSHUZI,A

RET

;========================延时程序===============================

;输入;无

;输出:

;实现的功能:

延时一段时间

;===============================================================

DELAY:

MOVR6,#80

L7:

MOVR7,#80

L8:

DJNZR7,L8

DJNZR6,L7

RET

;=====================共阳查表数据==============================

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

;=======================程序结束================================

END

 

一个按键控制一个灯,要求按一下按键,灯亮一直亮,再按一下按键灯灭,要带按键的去抖程序。

郑锦朋|浏览2150次

推荐于2016-07-0216:

59:

04

最佳答案

试一下这个,灯接在p1.2,按键接在p3.3

ORG00H;

MOVP3,#0FFH;

SETBP1.2;

START:

JNBP3.3,TT0;

AJMPSTART;

TT0:

LCALLD1MS;

JNBP3.3,TT0;

CPLP1.2;

AJMPSTART;

D1MS:

MOVR7,#10;

D1:

MOVR6,#250;

DJNZR6,$;

DJNZR7,D1;

RET;

END

本回答由电脑网络分类达人董辉推荐

评论

(2)

赞11踩3

zxc15813191501

采纳率:

17%擅长:

暂未定制

其他回答

很完美的按键控制可调时钟。

消抖都在里面包含。

好好研究~~~~~~~R_QHEQU44HR_BZBIT18HR_1EQU26HR_2EQU27HR_3EQU28HB_DEBOUNCEEQU65HB_HASKEYEQU66HORG0000HLJMPL_MAINORG000BHLJMPI_T0ORG001BHLJMPI_T1ORG0030HL_MAIN:

MOVSP,#62HMOVTMOD,#11HMOVTH0,#HIGH(62536)MOVTL0,#LOW(62536)MOVTH1,#HIGH(15536)MOVTL1,#LOW(15536)MOVIE,#10001010BSETBTR0SETBTR1SETBPT1SETBR_BZMOV40H,#59HMOV41H,#58HMOV42H,#23HMOVR_1,#20MOVR_2,#0MOVR_3,#55HMOV55H,#0MOV56H,#0MOV57H,#0MOV58H,#0MOV59H,#0MOV5AH,#0MOVB_HASKEY,#00HMOVB_DEBOUNCE,#00HLCALLF_CHAIFENL_LOOP:

JBB_DEBOUNCE,L_JSJZ...很完美的按键控制可调时钟。

消抖都在里面包含。

好好研究~~~~~~~

R_QHEQU44H

R_BZBIT18H

R_1EQU26H

R_2EQU27H

R_3EQU28H

B_DEBOUNCEEQU65H

B_HASKEYEQU66H

ORG0000H

LJMPL_MAIN

ORG000BH

LJMPI_T0

ORG001BH

LJMPI_T1

ORG0030H

L_MAIN:

MOVSP,#62H

MOVTMOD,#11H

MOVTH0,#HIGH(62536)

MOVTL0,#LOW(62536)

MOVTH1,#HIGH(15536)

MOVTL1,#LOW(15536)

MOVIE,#10001010B

SETBTR0

SETBTR1

SETBPT1

SETBR_BZ

MOV40H,#59H

MOV41H,#58H

MOV42H,#23H

MOVR_1,#20

MOVR_2,#0

MOVR_3,#55H

MOV55H,#0

MOV56H,#0

MOV57H,#0

MOV58H,#0

MOV59H,#0

MOV5AH,#0

MOVB_HASKEY,#00H

MOVB_DEBOUNCE,#00H

LCALLF_CHAIFEN

L_LOOP:

JBB_DEBOUNCE,L_JSJZ

MOVP1,#0FH

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,L_PRESS

JNBB_HASKEY,L_WAJ

LCALLF_KEYRELEASE

CLRB_HASKEY

L_WAJ:

LJMPL_FANHUI

L_JSJZ:

CLRB_DEBOUNCE

LCALLF_KEYSCAN

LCALLF_KEYservice

SETBB_HASKEY

LJMPL_FANHUI

L_PRESS:

JNBB_HASKEY,L_GAX

LCALLF_XDYS200ms

LCALLF_KEYHOLD

LJMPL_FANHUI

L_GAX:

SETBB_DEBOUNCE

LCALLF_XDYS20ms

LJMPL_FANHUI

F_KEYRELEASE:

CPLP2.0

RET

F_KEYHOLD:

MOVA,75H

CJNEA,#02H,L_NEXT3

LJMPKEY2

RET

L_NEXT3:

CJNEA,#03H,L_FANHUI0

LJMPKEY3

L_FANHUI0:

RET

L_FANHUI:

LJMPL_LOOP

F_KEYSCAN:

MOVP1,#0FH

MOVA,P1

MOVR4,#0FFH

L_LOOP1:

INCR4;计算移动次数,得到第几位为0

RRCA

JCL_LOOP1

MOVP1,#0F0H

MOVA,P1

MOVR5,#0FFH

L_LOOP2:

INCR5;计算移动次数,得到第几位为0

RLCA

JCL_LOOP2

MOVB,#4

MOVA,R4

MULAB

ADDA,R5

MOV75H,A

RET

F_KEYservice:

MOVA,75H

MOVDPTR,#T_LJMP

MOVB,#3

MULAB

JMP@A+DPTR

T_LJMP:

LJMPKEY0

LJMPKEY1

LJMPKEY2

LJMPKEY3

LJMPKEY0

LJMPKEY1

LJMPKEY2

LJMPKEY3

LJMPKEY0

LJMPKEY1

LJMPKEY2

LJMPKEY3

LJMPKEY0

LJMPKEY1

LJMPKEY2

LJMPKEY3

KEY0:

CPLR_BZ

MOVR_QH,#40H

LJMPL_D

KEY1:

JBR_BZ,L_D

MOVA,R_QH

ADDA,#1

MOVR0,A

MOVR_QH,R0

CJNER0,#43H,L_D

MOVR_QH,#40H

LJMPL_D

KEY2:

JBR_BZ,L_D

MOVR1,R_QH

MOVA,@R1

ADDA,#1

DAA

MOV@R1,A

CJNER1,#42H,L_LL

CJNE@R1,#24H,L_D

MOV@R1,#00H

LJMPL_D

L_LL:

CJNE@R1,#60H,L_D

MOV@R1,#00H

LJMPL_D

KEY3:

JBR_BZ,L_D

MOVR0,R_QH

CJNER0,#42H,L_FENMIAO

DEC@R0

CJNE@R0,#0FFH,L_JJ

MOV@R0,#23H

LJMPL_D

L_FENMIAO:

MOVR0,R_QH

DEC@R0

CJNE@R0,#0FFH,L_JJ

MOV@R0,#59H

LJMPL_D

L_JJ:

MOVA,@R0

ANLA,#0FH

MOVR1,A

MOVR0,R_QH

MOVA,@R0

ANLA,#0F0H

CJNER1,#0FH,L_D

ADDA,#09H

MOV@R0,A

L_D:

LCALLF_CHAIFEN

RET

F_CHAIFEN:

MOVR0,#40H

MOVR1,#55H

L_DD:

MOVA,@R0

ANLA,#0FH

MOV@R1,A

INCR1

MOVA,@R0

ANLA,#0F0H

SWAPA

MOV@R1,A

INCR0

INCR1

CJNER0,#43H,L_DD

RET

;中断T0

I_T0:

PUSHPSW

PUSHACC

SETBRS0

MOVTH0,#HIGH(62536)

MOVTL0,#LOW(62536)

MOVA,R_2

SWAPA

MOVR0,R_3

ORLA,@R0

MOVP0,A

INCR_2

INCR_3

MOVR0,R_2

CJNER0,#06H,L_EXIT

MOVR_3,#55H

MOVR_2,#0

L_EXIT:

POPACC

POPPSW

RETI

;中断T1

I_T1:

PUSHACC

PUSHPSW

SETBRS1

MOVTH1,#HIGH(15536)

MOVTL1,#LOW(15536)

DJNZR_1,L_EXIT2

MOVR_1,#20

JNBR_BZ,L_EXIT2

MOVA,40H

ADDA,#1

DAA

MOV40H,A

CJNEA,#60H,L_LCHAIFEN

MOV40H,#00H

MOVA,41H

ADDA,#1

DAA

MOV41H,A

CJNEA,#60H,L_LCHAIFEN

MOV41H,#00H

MOVA,42H

ADDA,#1

DAA

MOV42H,A

CJNEA,#24H,L_LCHAIFEN

MOV42H,#00H

L_EXIT2:

L_LCHAIFEN:

LCALLF_CHAIFEN

POPPSW

POPACC

RETI

F_XDYS20ms:

MOVR6,#100

L_LOOP9:

MOVR5,#100

DJNZR5,$

DJNZR6,L_LOOP9

RET

F_XDYS200ms:

MOVR6,#50

L_LOOP11:

MOVR7,#100

L_LOOP10:

MOVR5,#40

DJNZR5,$

DJNZR7,L_LOOP10

DJNZR6,L_LOOP11

RET

END收起

Rainting☆☆☆|发布于2010-08-2317:

27

评论

赞0踩0

(1);P3.3小键盘按下P1.3亮再按0.5秒灭。

org0000hajmpmain0org0080hMAIN0:

CLR21H;清标志main:

movc,p3.3;检测按键jcmainMOVR6,#200;设定延时MOVR7,#200TT0:

JNB21H,TT2;检测灯状态tt:

movc,p3.3;检测按键jnctt1JNB20H,MAIN;检测时间标志CLR20HAJMPTT3TT2:

movc,p3.3;检测按键jnctt2TT3:

CPL21H;改变灯状态cplp1.3ajmpmainTT1:

NOP;延时但不是子程序NOPNOPNOPNOPNOPDJNZR6,TTMOVR6,#200DJNZR7,TTMOVR7,#200SETB20HAJMPTTend

(2)数码管数据p0,数码管控制p2独立按键p1口,;对独立键进行按键次数计数,三位数码管显示。

*;K1按下后,进行加1计数*;K2按下后,进行减1计数。

*;K3按下后,进行加5计数。

*;K4按下后,清计数单元,数码管显示0。

*;按住键可以快速计数。

K1BITP1.4K2BITP1.5K3BITP1.6K4...

(1);P3.3小键盘按下P1.3亮再按0.5秒灭。

org0000h

ajmpmain0

org0080h

MAIN0:

CLR21H;清标志

main:

movc,p3.3;检测按键

jcmain

MOVR6,#200;设定延时

MOVR7,#200

TT0:

JNB21H,TT2;检测灯状态

tt:

movc,p3.3;检测按键

jnctt1

JNB20H,MAIN;检测时间标志

CLR20H

AJMPTT3

TT2:

movc,p3.3;检测按键

jnctt2

TT3:

CPL21H;改变灯状态

cplp1.3

ajmpmain

TT1:

NOP;延时但不是子程序

NOP

NOP

NOP

NOP

NOP

DJNZR6,TT

MOVR6,#200

DJNZR7,TT

MOVR7,#200

SETB20H

AJMPTT

end

(2)数码管数据p0,数码管控制p2独立按键p1口,;对独立键进行按键次数计数,三位数码管显示。

*

;K1按下后,进行加1计数*

;K2按下后,进行减1计数。

*

;K3按下后,进行加5计数。

*

;K4按下后,清计数单元,数码管显示0。

*

;按住键可以快速计数。

K1BITP1.4

K2BITP1.5

K3BITP1.6

K4BITP1.7

K_OLDEQU30H

K_NEWEQU31H

K_COUNTEQU32H

DISSTARTEQU40H;显示单元首地址

LED_DATAEQUP0;数码管数据口定义

;---------------------------------------------------------

ORG0000H

JMPMAIN

ORG0080H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1