单片机键盘扫描及数码管显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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