矩阵式键盘的专业课程设计.docx

上传人:b****2 文档编号:2159966 上传时间:2023-05-02 格式:DOCX 页数:11 大小:66.26KB
下载 相关 举报
矩阵式键盘的专业课程设计.docx_第1页
第1页 / 共11页
矩阵式键盘的专业课程设计.docx_第2页
第2页 / 共11页
矩阵式键盘的专业课程设计.docx_第3页
第3页 / 共11页
矩阵式键盘的专业课程设计.docx_第4页
第4页 / 共11页
矩阵式键盘的专业课程设计.docx_第5页
第5页 / 共11页
矩阵式键盘的专业课程设计.docx_第6页
第6页 / 共11页
矩阵式键盘的专业课程设计.docx_第7页
第7页 / 共11页
矩阵式键盘的专业课程设计.docx_第8页
第8页 / 共11页
矩阵式键盘的专业课程设计.docx_第9页
第9页 / 共11页
矩阵式键盘的专业课程设计.docx_第10页
第10页 / 共11页
矩阵式键盘的专业课程设计.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

矩阵式键盘的专业课程设计.docx

《矩阵式键盘的专业课程设计.docx》由会员分享,可在线阅读,更多相关《矩阵式键盘的专业课程设计.docx(11页珍藏版)》请在冰点文库上搜索。

矩阵式键盘的专业课程设计.docx

矩阵式键盘的专业课程设计

“电子创新设计和实践”课程期中课题设计汇报

 

姓名:

张思源,学:

2121026,年级:

,专业:

电信

 

汇报内容

设计一个4*4矩阵键盘,并编写相关程序

摘要

1.4×4矩阵式键盘程序识别原理。

2.4×4矩阵式键盘按键设计方法。

汇报正文:

一、设计原理

  

(1)图14.2所表示,用单片机并行口P3连接4×4矩阵键盘,并以单片机P3.0-P3.3各管脚作输入线,以单片机P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”序号。

  

(2)键盘中对应按键序号排列图14.1所表示。

二、参考电路

       

           图14.24×4矩阵式键盘识别电路原理图

       

             图14.14×4键盘0-F显示

       

           图14.34×4矩阵式键盘识别程序步骤图

三、电路硬件说明

  

(1)在“单片机系统”区域中,把单片机P3.0-P3.7端口经过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中M1-M4,N1-N4端口上。

  

(2)在“单片机系统”区域中,把单片机P0.0-P0.7端口连接到“静态数码显示模块”区域中任何一个a-h端口上;要求:

P0.0对应着a,P0.1对应着b,……,P0.7对应着h。

四、程序设计内容

  

(1)4×4矩阵键盘识别处理。

  

(2)每个按键全部有它行值和列值,行值和列值组合就是识别这个按键编码。

矩阵行线和列线分别经过两并行接口和CPU通信。

键盘一端(列线)经过电阻接VCC,而接地是经过程序输出数字“0”实现。

键盘处理程序任务是:

确定有没有键按下,判定哪一个键按下,键功效是什么?

还要消除按键在闭合或断开时抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,经过软件查表,查出该键功效。

五、程序步骤图(图14.3所表示)

六、汇编源程序

;;;;;;;;;;定义单元;;;;;;;;;;

COUNTEQU30H

;;;;;;;;;;入口地址;;;;;;;;;;

ORG0000H

LJMPSTART

ORG0003H

RETI

ORG000BH

RETI

ORG0013H

RETI

ORG001BH

RETI

ORG0023H

RETI

ORG002BH

RETI

;;;;;;;;;;主程序入口;;;;;;;;;;

ORG0100H

START:

LCALLCHUSHIHUA

LCALLPANDUAN

LCALLXIANSHI

LJMPSTART

;;;;;;;;;;初始化程序;;;;;;;;;;

CHUSHIHUA:

MOVCOUNT,#00H

RET

;;;;;;;;;;判定哪个按键按下程序;;;;;;;;;;

PANDUAN:

MOVP3,#0FFH

CLRP3.4

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZSW1

LCALLDELAY10MS

JZSW1

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,K1

MOVCOUNT,#0

LJMPDK

K1:

CJNEA,#0DH,K2

MOVCOUNT,#4

LJMPDK

K2:

CJNEA,#0BH,K3

MOVCOUNT,#8

LJMPDK

K3:

CJNEA,#07H,K4

MOVCOUNT,#12

K4:

NOP

LJMPDK

SW1:

MOVP3,#0FFH

CLRP3.5

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZSW2

LCALLDELAY10MS

JZSW2

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,K5

MOVCOUNT,#1

LJMPDK

K5:

CJNEA,#0DH,K6

MOVCOUNT,#5

LJMPDK

K6:

CJNEA,#0BH,K7

MOVCOUNT,#9

LJMPDK

K7:

CJNEA,#07H,K8

MOVCOUNT,#13

K8:

NOP

LJMPDK

SW2:

MOVP3,#0FFH

CLRP3.6

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZSW3

LCALLDELAY10MS

JZSW3

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,K9

MOVCOUNT,#2

LJMPDK

K9:

CJNEA,#0DH,KA

MOVCOUNT,#6

LJMPDK

KA:

CJNEA,#0BH,KB

MOVCOUNT,#10

LJMPDK

KB:

CJNEA,#07H,KC

MOVCOUNT,#14

KC:

NOP

LJMPDK

SW3:

MOVP3,#0FFH

CLRP3.7

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZSW4

LCALLDELAY10MS

JZSW4

MOVA,P3

ANLA,#0FH

CJNEA,#0EH,KD

MOVCOUNT,#3

LJMPDK

KD:

CJNEA,#0DH,KE

MOVCOUNT,#7

LJMPDK

KE:

CJNEA,#0BH,KF

MOVCOUNT,#11

LJMPDK

KF:

CJNEA,#07H,KG

MOVCOUNT,#15

KG:

NOP

LJMPDK

SW4:

LJMPPANDUAN

DK:

RET

;;;;;;;;;;显示程序;;;;;;;;;;

XIANSHI:

MOVA,COUNT

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

LCALLDELAY

SK:

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JNZSK

RET

;;;;;;;;;;10ms延时程序;;;;;;;;;;

DELAY10MS:

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

;;;;;;;;;;200ms延时程序;;;;;;;;;;

DELAY:

MOVR5,#20

LOOP:

LCALLDELAY10MS

DJNZR5,LOOP

RET

;;;;;;;;;;共阴码表;;;;;;;;;;

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

;;;;;;;;;;结束标志;;;;;;;;;;

END

八、C语言源程序

#include

unsignedcharcodetable[]={0x3f,0x66,0x7f,0x39,

0x06,0x6d,0x6f,0x5e,

0x5b,0x7d,0x77,0x79,

0x4f,0x07,0x7c,0x71};

voidmain(void)

{unsignedchari,j,k,key;

while

(1)

{P3=0xff;//给P3口置1//

P3_4=0;//给P3.4这条线送入0//

i=P3;

i=i&0x0f;//屏蔽低四位//

if(i!

=0x0f)//看是否有按键按下//

{for(j=50;j>0;j--)//延时//

for(k=200;k>0;k--);

if(i!

=0x0f)//再次判定按键是否按下//

{switch(i)//看是和P3.4相连四个按键中哪个//

{case0x0e:

key=0;

break;

case0x0d:

key=1;

break;

case0x0b:

key=2;

break;

case0x07:

key=3;

break;

}

P0=table[key];//送数到P0口显示//

}

}

P3=0xff;

P3_5=0;//读P3.5这条线//

i=P3;

i=i&0x0f;//屏蔽P3口低四位//

if(i!

=0x0f)//读P3.5这条线上看是否有按键按下//

{for(j=50;j>0;j--)//延时//

for(k=200;k>0;k--);

i=P3;//再看是否有按键真按下//

i=i&0x0f;

if(i!

=0x0f)

{switch(i)//假如有,显示对应按键//

{case0x0e:

key=4;

break;

case0x0d:

key=5;

break;

case0x0b:

key=6;

break;

case0x07:

key=7;

break;

}

P0=table[key];//送入P0口显示//

}

}

P3=0xff;

P3_6=0;//读P3.6这条线上是否有按键按下//

i=P3;

i=i&0x0f;

if(i!

=0x0f)

{for(j=50;j>0;j--)

for(k=200;k>0;k--);

i=P3;

i=i&0x0f;

if(i!

=0x0f)

{switch(i)

{case0x0e:

key=8;

break;

case0x0d:

key=9;

break;

case0x0b:

key=10;

break;

case0x07:

key=11;

break;

}

P0=table[key];

}

}

P3=0xff;

P3_7=0;//读P3.7这条线上是否有按键按下//

i=P3;

i=i&0x0f;

if(i!

=0x0f)

{for(j=50;j>0;j--)

for(k=200;k>0;k--);

i=P3;

i=i&0x0f;

if(i!

=0x0f)

{switch(i)

{case0x0e:

key=12;

break;

case0x0d:

key=13;

break;

case0x0b:

key=14;

break;

case0x07:

key=15;

break;

}

P0=table[key];

}

}

}

}

参考文件:

baidu百科

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2