- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(1) #includereg51.h main() {P1=0x73; P3=0x10; } (2) #includereg51.h sbit P32=P3^2; unsigned char code tab[5]={0x3f,0x06,0x5b,0x4f,}; main() {unsigned char I; unsigned char j; while(1){P32=1; for(i=0;i=3;i++) {P1=tab[i]; for(j=0;j=2500;j++); }}} uchar i; uint j; while(1) { P3=0x01; for(i=0;i5;i++) { if(P17==1)P1=tab1[i]; else P1=tab2[i]; P3=1; for(j=0;j=25000;j++); }}} 5.3.2用并行口设计键盘电路 键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键盘(如图5.3中的按键),当按键较多时,这样的接法占用口线较多。将按键接成矩阵的形式,可以节省口线,例如两个接口可按8*8的形式接64个按键。 每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端通过电阻接Vcc(列)、而接地是通过程序输出数字“0”实现的。 键盘处理程序的任务是: 确定有无键按下; 判哪一个键按下, 键的功能是什么; 还要消除按键在闭合或断开时的抖动。 两个并行口中,一个输出扫描码, 使按键逐行动态接地(称行扫描),另一个并行口输入按键状态(称回馈信号,键盘的列值), 由行扫描值和回馈信号共同形成键编码而识别按键、通过软件查表,查出该键的功能。也可由硬件编码器完成键的编码。 下图中,用8XX51的并行口P1接4×4矩阵键盘,以P1.0~P1.3作输出线,以P1.4~P1.7作输入线,键盘扫描程序的流程如图5.7所示。 5 a EE DE BE 7E ED DD BD 7D EB DB BB 7B E7 D7 B7 77 Y 返回键编码 读P1.3~P1.4值 置行扫描初值 扫描位从P1口输出 P1口的高四位和低四位 相或得键编码 扫到最后一行? N N(有键按下) N 开始 P1.0~P1.3输出0 延时去抖动 P1.4~P1.7全为1? P1.4~P1.7全为1? Y Y(无键按下) 对键盘的程序流程图5.7说明如下: 当P1.0~P1.3输出0时,如无键按下,P1.4~P1.7的输入值均为“1”,如果其中有一个不是 “1”,说明有键按下,再使P1.0~P1.3逐个输出零(行扫描),检查P1.4~P1.7的输入值有无零,从而查出是哪行哪列的键按下。在判按键时,按键有抖动,可采用延时后再重读以跳过抖动时段(也可用R-S触发器闩锁电路硬件消抖,但这样电路复杂,在矩阵键盘中不采用)。 ORG 0000H TEST: MOV P1,#0F0H;P1.0~P1.3输出0, P1.4~P1.7输出1,作输入位 MOV A,P1 ;读键盘,检测有无键按下 ANL A,#0F0H ;屏蔽P1.0~P1.3,检测P1.4~P1.是否全为1 CJNE A, #0F0H,HAVE ;P1.4~P1.7不全为1,有键按下 SJMP TEST ;P1.4~P1.7全为1,无键按下,重检测键盘 HAVE: ACALL DAY ;延时去抖动 MOV A,#0FE ;有键按下,逐行扫描键盘,置扫描初值 NEXT: MOV B,A ;扫描码暂存于B MOV P1,A ;输出扫描码 READ: MOV A,P1 ;读键盘 ANL A,#0F0H ; 屏蔽P1.0~P1.3, 检测P1.4~P1.是否全为1 CJNE A,#0F0H, AREAD ;P1.4~P1.7不全为1,
文档评论(0)