用八个发光二极管显示按键次数,用汇编语言写出程序会的话麻烦写一下

用八个发光二极管显示按键次数,用汇编语言写出程序会的话麻烦写一下,第1张

假设按键用P2.0,有上拉电阻,低电平有效;LED用高电平点亮

1、端口初始化

SETB P2.0

MOV P1,#0

2、检测按键变化,每按过一次,按键计数器KEYCOUNT就加竖滚1,

查询按键是否按下

若已按下,则等待按键d起,若升纤陆未按下吵顷则等待按下

按键未d起就一直等待,否则执行

inc keycount

3、将按键计数器的值送往P1口

mov a,keycount

mov P1,a

KEYCARD

BIT

00H

用于标志是否有键按下

KEYCOU

EQU

5AH

用于记录按下键卜埋的次数

ORG

0000H

程序开始

AJMP

START

ORG

30H

为避免占用中断向量区,主程序从30H开始

START:

MOV

SP,#5FH

设置型州蚂堆栈的初始地址

MOV

P2,#0H

P2,P3的初始化

MOV

P3,#0FFH

CLR

KEYCARD

有按键标志清0

MOV

KEYCOU,#0

计数初值赋0

LOOP:

循环扫描键盘

ACALL

KEY_CHECK

JNB

KEYCARD,DISPLAY

INC

KEYCOU

DISPLAY:

显示程序

MOV

DPTR,#ASCII

获得对应的显示码

PUSH

B

MOV

A,KEYCOU

MOV

B,#0AH

DIV

AB

选显示第一迹冲位高位

MOVC

A,@A+DPTR

MOV

P0,A

把显示码传至A口

SETB

P2.1

选通P2.0,显示

ACALL

DELAY1S

CLR

P2.1

MOV

A,

B

POP

B

MOVC

A,@A+DPTR

MOV

P0,A

把显示码传至A口

SETB

P2.0

选通P2.0,显示

ACALL

DELAY1S

CLR

P2.0

AJMP

LOOP

KEY_CHECK:

看有没有键按下

MOV

A,P3

ANL

A,#0fFH

逻辑与

CJNE

A,#0FFH,KEY_CER

如果读入的与写出的不相等,延时消抖

CLR

KEYCARD

RET

KEY_CER:

延时,再读入,看是否真的有键按下

ACALL

DELAY1S

MOV

A,P3

ANL

A,#0FFH

CJNE

A,#0FFH,KEY_CE

CLR

KEYCARD

RET

KEY_CE:

MOV

A,P3

直等到按键放下,则算作一次

ANL

A,#0FFH

CJNE

A,#0FFH,KEY_CE

SETB

KEYCARD

真的有键按下,则置标志位

RET

DELAY1S:

延时函数

MOV

R7,#10

D1:

MOV

R6,#50

DJNZ

R6,$

DJNZ

R7,D1

RET

ASCII:

DB

0C0H,0F9H,0A4H,0B0H,099H

DB

092H,082H,0F8H,080H,090H

DB

088H,083H,0C6H,0A1H,086H

DB

08EH,08CH,0BFH,0FFH

END

模仿下

呵呵

大家都没多少时间的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12518023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存