《单片机实验报告——矩阵键盘数码管显示.docx》由会员分享,可在线阅读,更多相关《单片机实验报告——矩阵键盘数码管显示.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机试验报告信息处理试验试验二 矩阵键盘专业:电气工程及其自动化指导教师:组员:明洪开 张鸿伟 张谦 赵智奇学号:152703117 152703115152703118152703114室温: 18日期:2023 年 10 月 25 日矩阵键盘一、试验内容1、编写程序,做到在键盘上每按一个键(0F)用数码管将该建对应的名字显示出来。按其它键没有结果。二、试验目的1、 学习独立式按键的查询识别方法。2、 非编码矩阵键盘的行反转法识别方法。3、 把握键盘接口的根本特点,了解独立键盘和矩阵键盘的应用方法。4、 把握键盘接口的硬件设计方法,软件程序设计和贴士排错力量。5、 把握利用 Keil51
2、软件对程序进展编译。6、 会依据实际功能,正确选择单片机功能接线,编制正确程序。对试验结果能做出分析和解释,能写出符合规格的试验报告。三、试验原理1、MCS51 系列单片机的P0P3 口作为输入端口使用时必需先向端口写入“1”。2、用查询方式检测按键时,要参加延时(通常承受软件延时 1020mS)以消退抖动。 3、识别键的闭合,通常承受行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,说明有键按下,否则扫描下一行,直到扫完全部行。行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入
3、方式,程序使 CPU 通过输出端口在各行线上全部送低电平,然后读入列线值, 如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进展方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚刚读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。由于 51 单片机的并口能够动态地转变输入输出方式,因此,矩阵键盘承受行反转法识别最为简便。行反转法识别按键的过程是:首先,将4 个行线作为输出,将其全部置 0,4 个列线作为输入,将其全部置 1,也就是向P1 口写入 0xF0;
4、假设此时没有人按键,从 P1 口读出的值应仍为 0xF0;假设此时 1、4、7、0 四个键中有一个键被按下,则 P1.6 被拉低,从 P1 口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚刚从P1 口读出的数的低四位置 1 后再写入 P1 口,马上 0xBF 写入 P1 口,使 P1.6 为低,其余均为高,假设此时被按下的键是“4”,则 P1.1 被拉低,从P1 口读出的值为 0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为 12 个键的反转码建一个表,通过查表就可知道是哪个键被按下了。四、接线方法键盘连接成 44 的矩阵形式,占用单片机 P1 口的 8 根
5、线,行信号是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 送入 0 1 1 1 然后去读取 4 列的值,如果P3.0 的按键按下那么P3.4-P3.7 的值等于 0 1 1 1,假设是第 2 个键按下的话那么读回来的值是 1 0 1 1 ,假设第3 个键按下去读回来的值是 1 1 0 1 ,假设第 4 个键按下去读回来的值是 1 1 1 0 ,假设没有键按下去读回来就是 1 1
6、 1 1。 所以我们就依据读回来的值来推断按下去的是那个键。固然这是对 P3.0 这一行,由于矩阵键盘是扫描的,所以下次把P3.0 给 1 P3.1 给 0 对第 2 行,间续的第3 行第4 行, 0111 1011 1101 1110 而每次都去从扫描一遍列值列有 4 个值,以确定是那个键按下。无论何时任何一个时间有一个按键被按下就跳出循环。固然不行能有 2 个键刚好一起按下你的手没有这么好的力度,就算有2 个键一起按键,程序也有先后检测的挨次,只能检测一个后面的检测不到。P3 = 0XFE; /第一行给 0 temp ;定义个变量temp = P3 ;读回来 由于读需要先写 1由于P3=
7、FE已经把高 4 位给 1 了 所以能读了temp & oxf0假设没有按键按下结果还是 0xf0 . 假设有键按下结果就不是 0xf0 了。num然后我们再定义一个变量 让它赋值给这个按下去的按键值。一次类推把第一行赋值 0 扫描一遍 然后把第 2 行赋值 0 扫描一遍.共扫描 16 遍。只要有键按下 就会得到一个值 num 就从 1 排到 16. 共 16 个按键4*4 的矩阵键盘。我再总结下思路:首先 低 4 位是行 共 4 行 分别把每行给 0 低电平就 4 次 0 1 1 1 、1 0 1 1 、 1 1 0 1 、1 1 1 0 对吧然后去检测高 4 位 4 列啊 先不考虑极端状况
8、,4 列就 4 个按键只要按下一个 P3 口的高 4 位就会有一个值。依据这个值就能推断是那个键了。如:P3= 1111 1110 低四位是行先把第一行给 0有按键下的话 temp = P3 读回来 1101 1110 然后 temp & 0xf0 与运算下就推断下还等于 oxf0 吗?如还等于就没有按下,假设不等于就确定有按键按下。定义个变量让它等于这个不是0XF0 的值,做个标记。依次类推。五、流程图六、试验电路七、试验程序#include #include# define uchar unsigned char # define uint unsigned int uchar key;u
9、char flag;uchar code keycodez=0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 ; uchar code dispcode165=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,
10、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,; uchar code w5=0xfe,0xfd,0xfb,0xf7,0xef;void delay1ms(uint i)
11、uchar j; while(i-)for(j=0;j115;j+) ;uchar keyscan uchar scan1,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;j16;j+)if(keycode=keycodezj)key=j; return(key);else P1=0xff; return(16);mainuchar t; P1=0xff; while(1) P1=0xf0;if(P1&0xf0)!=0xf0) keyscan; for(t=0;t5;t+)P2=wt;P0=dispcodekeyt; delay1ms(1);七、试验结果ming hongkaizhang hongwei zhaozhiqi zhangqian将试验程序烧进单片机后按键盘对应显示小组成员的 名字如上。