单片机键盘扫描及数码管显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机键盘扫描及数码管显示 2018-08-19 09:32

***********************************

。MCS-51单片机汇编程序语言基本模型

*

***********************************

。 LED_D EQU 6 ORG 0000H 。显示模块数

LJMP START 。复位后程序计数器 PC=0000H b5E2RGbCAP

ORG 0003H LJMP MY INTO 。外部中断0入口

ORG 000BH LJMP MY T0 。定时器中断0入口

ORG 0013H LJMP MY INT1 。外部中断1入口

ORG 001BH LJMP MY T1 。定时器中断1入口

ORG 0023H LJMP MY TX 。串行口中断入口

ORG 002BH LJMP MY T2 。定时器中断 2 入口 <8032/8052 ) plEanqFDPw

ORG 0030H

START: 。程序开始

。设置堆栈指针

。EA - ET2 ES ET1 EX1 ET0 EX0

MOV SP,#50H

。MOV IE,#10000001B

SETB EA

。总中断允许

SETB EX0。外部中断0允许 MOV P1,#0FH 。键盘中断条件

MOV 30H,#0

MOV 31H,#16。16=空值 MOV 32H,#16 MOV 33H,#16 MOV 34H,#16 MOV 35H,#16 LCALL LED_OUT

LCALL DELAY

。延时子程序

MAIN:

Icall key

Icall led_out

LCALL DELAY 。延时子程序

LJMP MAIN 。程序结束

。---------------------------------------------------------- MY_INT0: 。外部中断0服务子程序

LCALL KEY DXDiTa9E3d

LJMP GO_TO

INT0_END:

LCALL LED_OUT。显示输出子程序

RETI 。中断返回RTCrpUDGiT

MY_INT1: 。外部中断1服务子程序

RETI 。中断返回

MY_T0: 。定时器中断0服务子程序

RETI 。中断返回

MY_T1: 。定时器中断1服务子程序

RETI 。中断返回

MY_TX: 。串行口中断服务子程序

RETI 。中断返回

MY_T2: 。定时器中断2服务子程序<8032/8052) RETI 。中断返回

*************************************************** 。

。键盘扫描子程序

。出口:A=键值

。占用:A,P1,SP,R2,R3,R6,R7

*************************************************** 。KEY:

LCALL KS1

JZ KEYEND LCALL YS10MS LCALL KS1

JZ KEYEND MOV R2,#0EFH

。是否有键按下

。无键按下,返回。10MS延时

。是否有键按下

。无键按下,返回。赋首列扫描字。赋首列指针

MOV R3,#00H

LK1: MOV P1,R2 。扫描字=>P1

MOV A,P1 。读P1 口

JB ACC.0,LONE o 0行无键按下,转1行

MOV A,#0 。0仃有键按下,赋仃号=>A

LJMP LKP 。转求键号

LONE: JB ACC.1 ,L TW0。1行无键按下,转2行

MOV A,#4 o 1仃有键按下,赋仃号=>A

LJMP LKP O转求键号

LTW0: JB ACC.2, LTHR。2行无键按下,转3行

MOV A,#8 o 2行有键按下,赋行号->A

LJMP LKP o转求键号

LTHR: JB ACC.3,NEXT。3行无键按下,转列加一

MOV A,#12 o 3行有键按下,赋行号=>A

LJMP LKP o转求键号

NEXT: INC R3 o列加一,指向卜一列

MOV A,R2 o扫描字=>A

RL A o扫描字左移

MOV R2,A o暂存扫描字

LJMP LK1 o转下一列扫描

LKP: ADD A,R3 o求键值< 当前行+当前列)

PUSH A o键值--> 压入堆栈

LK2: LCALL KS1 o是否有键按下

JNZ LK2 o A不等于0,再判断

POP A o键已经释放,A=键值

Icall YS10MS o 10MS延时

Icall YS10MS o 10MS延时

KEYEND: o返回

RET

*********************************************************

o

KS1: 。是否有键按下,有A=1,否则A=0

MOV P1,#0FH。列线全部

有效

MOV A,P1 。

CPL A 。

ANL A,#0FH 。

RET

*********************************************************

o

YS10MS:。延时10毫秒,晶振频率为12.00MHZ

MOV R6,#50

LOOP:

MOV R7,#98

相关文档
最新文档