实验课题:4×4矩阵键盘识别技术
一 实验目的
1.熟悉和掌握AT89S51单片机相关的功能
2.了解矩阵式键盘的内部结构,掌握至少一种常用的按键识别的方法 3.利用AT89S51单片机和设计一个4×4矩阵键盘控制。 4.掌握子程序结构和子程序实际的基本知识。 二 实验原理
1. 4×4矩阵键盘的序列排列如图1-1,
图1-1
2.如图1-2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0―P1.3作输入线,以p1.4-P1.7作输出线,在数码管上显示每个按键的“0-F”序号.
每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么; 还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 3.程序框图
三实验原理图
四 实验代码
#include unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsignedchartemp; unsignedcharkey; unsignedchari,j; voidmain(void) { while(1) { P3=0xff; P3_4=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case0x0e: key=7; break; case0x0d: key=8; break; case0x0b: key=9; break; case0x07: key=10; break; } temp=P3; P1_0=~P1_0; P0=table[key]; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xff; P3_5=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case0x0e: key=4; break; case0x0d: key=5; break; case0x0b: key=6; break; case0x07: key=11; break; } temp=P3; P1_0=~P1_0; P0=table[key]; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xff; P3_6=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case0x0e: key=1; break; case0x0d: key=2; break; case0x0b: key=3; break; case0x07: key=12; break; } temp=P3; P1_0=~P1_0; P0=table[key]; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xff; P3_7=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case0x0e: key=0; break; case0x0d: key=13; break; case0x0b: key=14; break; case0x07: key=15; break; } temp=P3; P1_0=~P1_0; P0=table[key]; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } } } 五 实验小结 1.通过本次试验熟练的掌握了AT89S51单片机相关的功能。 2.掌握了矩阵式键盘的内部结构,学会了几种常用的案件识别方法如行扫描法等。 3.AT89S51的重置引脚对高电平有效,要对晶片进行重置是要对此脚电平提升至高电平并保持两个机器周期以上的时间。 因篇幅问题不能全部显示,请点此查看更多更全内容