- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机系统应用设计概论
一、键盘控制
如图所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。;不考虑按键消抖
ORG 0000H
START:MOV A,#0FFH
MOV P1,A
SK1:MOV A,P1
RR A
RR A
RR A
RR A
ORL A,#0F0H
MOV P1,A
SJMP SK1
END;考虑按键消抖
一个按键从按下到释放是一个完整的过程,因此在按键按下的时候,要把干扰信号以及按键的机械接触等干扰信号给滤除掉,除采用电容滤波外,还需要采用软件滤波的方法去除这些干扰。
程序设计时,从按键被识别按下之后,延时5ms以上,可避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别过程。; ORG 0000H
START: MOV A,#0FFH
MOV P1,A
SK1:MOV A,P1
ORL A,#0FH
CJNE A,#0FFH,SK2
SJMP SK1
SK2:LCALL DELAY10MS ;延时10ms
MOV A,P1
ORL A,#0FH
CJNE A,#0FFH,SK3
SJMP SK1
SK3:RR A
RR A
RR A
RR A
ORL A,#0F0H
MOV P1,A
SJMP SK1
D10MS: MOV R6,#20
MOV R7,#248
D1: DJNZ R7,$
DJNZ R6,D1
RET
END;矩阵键盘; KEYBUF EQU 30H
ORG 0000H
START: MOV KEYBUF,#00H
MOV R3,#00H ;行号初值送R3
WAIT: MOV P3,#0FFH
CLR P3.0
MOV A,P3
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY1
LCALL DELY10MS
MOV A,P3
MOV R2,A
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY1
LCALL GETKEY ;判断键值,入口R2、R3
NOKEY1: ---- ;R2存P3值,R3存行号;NOKEY2: INC R3
MOV P3,#0FFH
CLR P3.2
MOV A,P3
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL DELY10MS
MOV A,P3
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL GETKEY; ;GETKEY 判断键值,入口 R2存P3值,R3存行号
GETKEY: MOV A, R3 ; 行号送入A
RL A ; 行号×2
RL A ; 行号×4
MOV R5,A ; 存入R5中
MOV A,R2 ; P3值送A
SWAP A ; 取列值
LK1:RRC A
JNC LK2 ; 该位为 0 则转
INC R5 ; 列号加 1
SJMP LK1 ; 列号未判完则继续
LK2: INC R5
MOV KEYBUF,R5 ; 存键值
RET
DELY10
文档评论(0)