单片机实验报告材料矩阵键盘数码管显示.docx

上传人:b****2 文档编号:17614337 上传时间:2023-07-27 格式:DOCX 页数:10 大小:284.81KB
下载 相关 举报
单片机实验报告材料矩阵键盘数码管显示.docx_第1页
第1页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第2页
第2页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第3页
第3页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第4页
第4页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第5页
第5页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第6页
第6页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第7页
第7页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第8页
第8页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第9页
第9页 / 共10页
单片机实验报告材料矩阵键盘数码管显示.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机实验报告材料矩阵键盘数码管显示.docx

《单片机实验报告材料矩阵键盘数码管显示.docx》由会员分享,可在线阅读,更多相关《单片机实验报告材料矩阵键盘数码管显示.docx(10页珍藏版)》请在冰点文库上搜索。

单片机实验报告材料矩阵键盘数码管显示.docx

单片机实验报告材料矩阵键盘数码管显示

单片机实验报告

信息处理实验

实验二矩阵键盘

专业:

电气工程及其自动化

指导老师:

高哲

组员:

明洪开张鸿伟张谦赵智奇

学号:

152703117\152703115\152703118\152703114

 

室温:

18℃日期:

2017年10月25日

矩阵键盘

一、实验内容 

1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。

按其它键没有结果。

 

二、实验目的 

1、  学习独立式按键的查询识别方法。

 2、 非编码矩阵键盘的行反转法识别方法。

 

3、 掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。

 

4、 掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。

5、 掌握利用Keil51软件对程序进行编译。

 

6、  会根据实际功能,正确选择单片机功能接线,编制正确程序。

对实验结果

能做出分析和解释,能写出符合规格的实验报告。

三、实验原理 

1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。

 

2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。

 3、识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

 

行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。

然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。

这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。

 

由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。

 

行反转法识别按键的过程是:

首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

 

四、接线方法     

键盘连接成4×4的矩阵形式,占用单片机P1口的8根线,行信号是P1.0-1.3,列信号是P1.4-1.7

单片机与矩阵键盘连接如下图:

此图用P1口P1.0---P1.3接4行P1.4--P1.7接4列

矩阵键盘工作原理:

由于按键没有接地,4行4列正好占用8个I/O如果4行我们送P3.0到P3.3送入0111然后去读取4列的值,如果P3.0的按键按下那么P3.4---P3.7的值等于0111,假如是第2个键按下的话那么读回来的值是1011,如果第3个键按下去读回来的值是1101,如果第4个键按下去读回来的值是1110,如果没有键按下去读回来就是1111。

所以我们就根据读回来的值来判断按下去的是那个键。

当然这是对P3.0这一行,因为矩阵键盘是扫描的,所以下次把P3.0给1P3.1给0对第2行,陆续的第3行第4行,0111101111011110而每次都去从新扫描一遍列值列有4个值,以确定是那个键按下。

无论何时任何一个时间有一个按键被按下就跳出循环。

当然不可能有2个键刚好一起按下你的手没有这么好的力度,就算有2个键一起按键,程序也有先后检测的顺序,只能检测一个后面的检测不到。

P3=0XFE;//第一行给0

temp;定义个变量

temp=P3;读回来由于读需要先写1因为P3=FE已经把高4位给1了所以能读了

temp&oxf0如果没有按键按下结果还是0xf0.如果有键按下结果就不是0xf0了。

num然后我们再定义一个变量让它赋值给这个按下去的按键值。

一次类推把第一行赋值0扫描一遍然后把第2行赋值0扫描一遍..............共扫描16遍。

只要有键按下就会得到一个值num就从1排到16.共16个按键4*4的矩阵键盘。

我再总结下思路:

首先低4位是行共4行分别把每行给0低电平就4次0111、1011、1101、1110对吧

然后去检测高4位4列啊先不考虑极端情况,4列就4个按键只要按下一个P3口的高4位就会有一个值。

根据这个值就能判断是那个键了。

如:

P3=11111110低四位是行先把第一行给0

有按键下的话temp=P3读回来11011110然后temp&0xf0与运算下就判断下还等于oxf0吗?

如还等于就没有按下,如果不等于就肯定有按键按下。

定义个变量让它等于这个不是0XF0的值,做个标记。

依次类推。

五、流程图

6、实验电路

 

七、实验程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharkey;

ucharflag;

ucharcodekeycodez[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,

0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

ucharcodedispcode[16][5]={{0xa4,0x89,0xc0,0x91,0xff},

{0xc7,0xf9,0xc8,0xff,0xff},

{0xff,0xff,0xff,0xff,0xff},

{0xff,0xff,0xff,0xff,0xff},

{0xa4,0x89,0x40,0xc8,0x90},

{0x91,0xf9,0xc8,0x90,0xff},

{0xa4,0x89,0xc1,0xff,0xff},

{0xff,0xff,0xff,0xff,0xff},

{0xf1,0xf9,0x40,0xc8,0x90},

{0x91,0xf9,0xff,0xff,0xff},

{0xff,0xff,0xff,0xff,0xff},

{0xff,0xff,0xff,0xff,0xff,},

{0xc8,0xf9,0x91,0xff,0xff},

{0xc1,0xc8,0xff,0xff,0xff},

{0xf1,0xf9,0x40,0xc8,0xff},

{0xff,0xff,0xff,0xff,0xff},};

ucharcodew[5]={0xfe,0xfd,0xfb,0xf7,0xef};

voiddelay1ms(uinti)

{ucharj;

while(i--)

{for(j=0;j<115;j++);

}}

 

ucharkeyscan()

{ucharscan1,scan2,keycode,j;

P1=0xf0;

scan1=P1;

if((scan1&0xf0)!

=0xf0)

{

delay1ms(15);

scan1=P1;

if((scan1&0xf0)!

=0xf0)

P1=0x0f;

scan2=P1;

keycode=scan1|scan2;

for(j=0;j<16;j++)

{

if(keycode==keycodez[j])

{

key=j;

return(key);

}

}

}

else

P1=0xff;

return(16);

}

main()

{

uchart;

P1=0xff;

while

(1)

{

P1=0xf0;

if((P1&0xf0)!

=0xf0)

keyscan();

for(t=0;t<5;t++)

{

P2=w[t];

P0=dispcode[key][t];

delay1ms

(1);}}}

 

7、实验结果

ming

hong

kai

zhang

hong

wei

zhao

zhi

qi

zhang

qian

将实验程序烧进单片机后按键盘对应显示小组成员的名字如上。

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

当前位置:首页 > 经管营销 > 经济市场

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

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