单片机实验五报告-单片机键盘实验

合集下载

单片机控制按键实训报告

单片机控制按键实训报告

一、实训目的1. 掌握单片机的基本工作原理和硬件结构;2. 熟悉单片机编程环境及编程方法;3. 学习按键控制的基本原理和编程技巧;4. 提高动手能力和解决问题的能力。

二、实训内容1. 单片机简介2. 单片机编程环境及编程方法3. 按键控制原理及编程4. 实验设计与实现三、实训步骤1. 单片机简介(1)单片机定义:单片机是一种集成度高、功能强大的微处理器,具有运算、存储、输入输出、定时计数等功能。

(2)单片机硬件结构:主要包括中央处理单元(CPU)、存储器(RAM、ROM)、输入输出接口(I/O)、定时器/计数器、串行通信接口等。

2. 单片机编程环境及编程方法(1)编程环境:Keil uVision、IAR EWARM等。

(2)编程语言:C语言、汇编语言等。

3. 按键控制原理及编程(1)按键控制原理:按键作为一种输入设备,其作用是将物理信号转换为电信号,通过单片机对电信号进行处理,实现相应的功能。

(2)按键编程技巧:① 按键消抖:由于按键存在机械特性,按下和释放时会产生抖动,导致单片机检测到多个按键动作。

为了消除抖动,通常采用软件消抖方法,如延时消抖、计数消抖等。

② 按键扫描:按键扫描是检测按键状态的一种方法,通过单片机的I/O口循环检测每个按键的状态,实现按键的识别。

③ 按键去抖:在按键扫描过程中,若检测到按键动作,则需要进行去抖处理,以消除抖动对按键识别的影响。

4. 实验设计与实现(1)实验目的:通过按键控制LED灯的亮灭。

(2)实验原理:当按下按键时,单片机检测到按键动作,通过编程控制LED灯亮起;当按键释放时,单片机检测到按键释放,控制LED灯熄灭。

(3)实验步骤:① 准备实验器材:单片机、按键、LED灯、电阻、面包板等。

② 连接电路:将按键、LED灯、电阻等元器件连接到单片机的相应引脚上。

③ 编写程序:根据实验原理,编写控制LED灯的亮灭程序。

④ 烧录程序:将编写的程序烧录到单片机中。

⑤ 测试程序:观察LED灯的亮灭状态,验证程序的正确性。

单片机 Keyboard实验

单片机 Keyboard实验

Keyboard实验一、实验目的1、了解键盘结构,学习扫描法判断键盘的方法。

2、了解8个I/O设计更多的按键方法。

二、实验任务在实验板上设计并连接小键盘接口的连线,识别小键盘上按下的各键状态并用keyboard.exe显示。

三、实验说明参考如下的电路图图12.1 4x4行列式键盘原理图PORTA 0—>3接Y1—>Y4; PORTA 4—>7接X1—>X4;可用PORTB接的八个发光二极管作为按键状态指示灯(即哪个键按下)。

(1)键盘状态和控制寄存器(Keyboard Status and Control Regisrer,INTKBSCR)INTKBSCR包含了键盘中断标志、屏蔽键盘中断请求、定义键盘中断的触发方式、清除键盘中断标志等功能。

其地址是$001AD7—D4,未用,读出均为0.没有具体含义。

D3——KEY位,(只读位),键盘(中断)标志位(Keyboard Flag Bit).KEYF=1,键盘中断已产生,KEYF=0,未产生键盘中断。

D2——ACKK位(只写位),键盘(中断)应答位(Keyboard Acknowledge Bit)写入1,则清除键盘中断请求。

D1——IMASKK位,键盘中断屏蔽位(Keyboard Interrupt Mask Bit ),IMASKK=1,屏蔽键盘中断请求,IMASKK=0.,开放键盘中断请求。

D0——MODEK位,键盘中断引脚触发方式位(Keyboard Triggering Sensitivity Bit)。

MODEK=1,下降沿及低电平触发,MODEK=0,仅下降沿触发。

(2)键盘中断允许寄存器(Keyboard Interrupt Enable Regisrer,INTBIER)INTBIER的各位决定所对应的引脚是否允许终端进入。

地址为: $001B引脚PTAx pin)被定义位中断引入引脚,反之则不能作为中断输入引脚,复位时,全为0。

单片机键盘实验报告

单片机键盘实验报告

单片机键盘实验报告单片机键盘实验报告引言:单片机是一种集成电路,具备处理器、存储器和各种输入输出接口等功能。

在现代电子设备中,单片机被广泛应用于各种控制系统中。

其中,键盘作为一种重要的输入设备,常用于与单片机进行交互。

本实验旨在通过使用单片机和键盘,实现一个简单的输入输出系统。

实验目的:1. 了解单片机的基本原理和工作方式;2. 掌握键盘的工作原理和使用方法;3. 利用单片机和键盘实现一个简单的输入输出系统。

实验器材:1. 单片机开发板;2. 键盘模块;3. 电脑。

实验步骤:1. 连接键盘模块到单片机开发板的合适接口上;2. 将开发板连接到电脑上;3. 编写单片机程序,实现键盘输入的读取和显示;4. 将程序下载到单片机开发板上;5. 运行程序,测试键盘输入和显示功能。

实验原理:1. 单片机工作原理:单片机通过执行存储在其内部的程序来完成各种任务。

它通过读取输入信号,进行运算处理,然后输出相应的结果。

单片机的核心是中央处理器(CPU),它负责执行指令和控制整个系统的工作。

2. 键盘工作原理:键盘是一种输入设备,通过按下不同的按键产生不同的电信号,然后传输给单片机进行处理。

键盘通常由多个按键组成,每个按键都有一个唯一的编码。

当用户按下某个按键时,键盘会发送相应的编码信号给单片机。

实验结果:经过实验,我们成功实现了一个简单的单片机键盘输入输出系统。

通过按下键盘上的按键,我们可以在电脑上显示相应的字符。

这样的系统可以应用于各种需要用户输入的场景,如密码输入、菜单选择等。

实验总结:通过本次实验,我们深入了解了单片机的基本原理和工作方式,掌握了键盘的工作原理和使用方法。

同时,我们也体验到了单片机和键盘的强大功能,以及它们在现代电子设备中的重要性。

单片机键盘输入输出系统的实现为我们提供了一个基础平台,可以进一步扩展和应用于更复杂的控制系统中。

未来展望:在今后的学习和实践中,我们将进一步研究和应用单片机和键盘技术。

单片机按键实验实训报告

单片机按键实验实训报告

一、实验目的1. 理解单片机按键的工作原理和电路连接方法;2. 掌握按键消抖原理及其实现方法;3. 学会使用单片机编程控制按键功能,实现简单的输入控制;4. 提高单片机实验操作能力和编程能力。

二、实验仪器及设备1. 单片机开发板(如STC89C52);2. 按键;3. 万用表;4. 电脑;5. Keil C编译器。

三、实验原理1. 按键原理:按键是一种电子开关,按下时导通,松开时断开。

在单片机应用中,按键常用于输入控制信号。

2. 按键消抖原理:由于按键机械弹性,闭合和断开时会有一连串的抖动。

若直接读取按键状态,容易导致误操作。

因此,需要进行消抖处理。

3. 消抖方法:主要有软件消抖和硬件消抖两种方法。

本实验采用软件消抖方法,即在读取按键状态后,延时一段时间再读取,若两次读取结果一致,则认为按键状态稳定。

四、实验步骤1. 硬件连接:将按键一端接地,另一端与单片机的某个I/O口相连。

2. 编写程序:使用Keil C编译器编写程序,实现以下功能:(1)初始化I/O口,将按键连接的I/O口设置为输入模式;(2)读取按键状态,判断按键是否被按下;(3)进行消抖处理,若按键状态稳定,则执行相应的功能。

3. 编译程序:将编写好的程序编译成HEX文件。

4. 烧录程序:将编译好的HEX文件烧录到单片机中。

5. 实验验证:观察实验现象,验证按键功能是否实现。

五、实验结果与分析1. 硬件连接正确,程序编译无误。

2. 实验现象:当按下按键时,单片机执行相应的功能;松开按键后,按键功能停止。

3. 分析:通过软件消抖处理,有效避免了按键抖动导致的误操作。

六、实验总结1. 本实验成功实现了单片机按键控制功能,掌握了按键消抖原理及实现方法。

2. 通过实验,提高了单片机编程和实验操作能力。

3. 在后续的单片机应用中,可以灵活运用按键控制功能,实现各种输入控制需求。

4. 本次实验为单片机应用奠定了基础,为进一步学习单片机技术打下了良好基础。

单片机实验五 按键实验

单片机实验五 按键实验

实验五:按键实验一、实验要求实验目的:熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;熟悉和掌握矩阵式减半的行扫描法和行反转法两种键盘扫描识别方法;掌握键盘延时抖动的消除方法,掌握LED静态扫描显示方式。

实验内容:4*4键盘矩阵的横线连接单片机的P1.0~P1.3端口,列线连接P1.4~P1.7端口,1位LED数码管连接单片机的P0口,编程实现:当按下任意一个按键时,LED数码管显示它在4*4键盘矩阵上的序号0~F二、实验原理线反转法的原理线反转法与行扫描法相比更加简练,无论被按键是处于第一行还是最后一行,均经过两步便可获得该键值所在的行列值。

线反转法的工作原理如图1所示,图1中采用8位I/O端口构成一个4*4的矩阵键盘,P1.0~P1.3作为行线,P1.4~P1.7做列线,采用查询方式进行工作。

下面介绍线反转法的具体操作步骤。

第一步:将列线便成为输入线,将行线便成为输出线,并使输出线的输出为全零电平,则列线中的电平由高到低发生变化的列为按键所在列。

第二步:将第一步中的传送方向反过来,即将行线编程位输入线,列线编程位输出线,并输出第一步中的输入列值,则行线中电平由高到低发生变化的行即为按键所在的行。

综合一、二两步的结果,可确定按键所在的行和列,从而识别出按键所在的键。

例如“键9”被按下,第一步在P1.0~P1.3行线输出全零,然后读入列线值位P1.7~P1.4=1101B,即P1.5=0,与P1.5相连的列线有键被按下。

第二步从列线输出刚才得到的值,再读取行线的输入值,则在闭合键所在的行线上值必定为“0”,即从行线读出的值为P1.3~P1.0=1101B。

于是行值和列值合起来得到唯一的一对行列值:11011101B即0DDH,这个值对应“键9”。

可见先反转法非常简单实用。

三、程序设计1、程序流程图图 1 程序流程图2、程序代码ORG 0000HLJMP STARTORG 0100HSTART: MOV SP, #60HKEY0: MOV P1, #0EFHJNB P1.0, K0JNB P1.1, K4JNB P1.2, K8JB P1.3, E1LJMP K12E1: MOV P1, #0DFHJNB P1.0, K1JNB P1.1, K5JNB P1.2, K9JB P1.3, E2LJMP K12E2: MOV P1, #0BFHJNB P1.0, K2JNB P1.1, K6JNB P1.2, K10JB P1.3, E3LJMP K14E3: MOV P1, #07FHJNB P1.0, K3JNB P1.1, K7JNB P1.2, K11JNB P1.3, K15LJMP KEY0K0: MOV P0, #0C0HLCALL DELAYJMP KEY0K1: MOV P0, #0F9HLCALL DELAYJMP KEY0K2: MOV P0, #0A4HLCALL DELAYJMP KEY0K3: MOV P0, #0B0HLCALL DELAYJMP KEY0K4: MOV P0, #99HLCALL DELAYJMP KEY0K5: MOV P0, #92HLCALL DELAYJMP KEY0K6: MOV P0, #082HLCALL DELAYJMP KEY0K7: MOV P0, #0F8HLCALL DELAYJMP KEY0K8: MOV P0, #80HLCALL DELAYJMP KEY0K9: MOV P0, #090HLCALL DELAYJMP KEY0K10: MOV P0, #88HLCALL DELAYJMP KEY0K11: MOV P0, #083HLCALL DELAYJMP KEY0K12: MOV P0, #0C6HLCALL DELAYJMP KEY0K13: MOV P0, #0A1HLCALL DELAYJMP KEY0K14: MOV P0, #086HLCALL DELAYJMP KEY0K15: MOV P0, #08EHLCALL DELAYJMP KEY0DELAY: M OV R3, #60HLP: MOV R4, #0A8HLP1: MOV R5, #0A8HLP2: DJNZ R5, LP2DJNZ R4, LP1DJNZ R3, LPRETEND设计说明:单片机不断查询各列电平,当某列中有某行的电平被置零,则跳转到改行所在语句,在数码管上显示被按键的数字。

单片机实验报告实验5行列式键盘实验

单片机实验报告实验5行列式键盘实验

学号姓名专业电气工程及其自动化班级实验5 行列式键盘实验一、实验目的(1)、学习掌握行列式键盘接口方法(2)、学习掌握行列式键盘编程方法。

二、实验内容用单片机P1口接4*4键盘,P0口接共阳数码管,编程实现键字的显示。

P1.0-P1.3为行,P1.4-P1.7为列。

先给端口设处置FEH,相当于给第一行置0,然后分写列值,如果对应的列值为0,说明该行与该列交叉处的键是按下的,接下来扫描第二行,与第一行的操作相同。

这就是行列式键盘扫描原理。

当扫描到某行的键按下时,就退出扫描,然后取键值,再将键值对应的额编码送P0端口显示。

三、实验设备计算机(已安装Keil和Proteus软件)元器件:A T89C51, CAP, CAP-ELEC, CRYSTAL, RES, 7SEG-COM-AN-GRN, RESPACK-7, BUTTON四、实验硬件电路实验源程序:#include<reg51.h>charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x7 1};charkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x 77};char getkey(void){char key_scan[]={0xef,0xdf,0xbf,0x7f};char i=0,j=0;for(i=0;i<4;i++){P1=key_scan[i];if((P1&0x0f)!=0x0f){for(j=0;j<16;j++){if(key_buf[j]==P1)return j;}}}return -1;}void main(void){char key=0;P0=0x00;while(1){key=getkey();if(key!=1)P0=~led_mod[key]; }}五、实验要求(1)、根据实验内容设计相应的调试程序,并通过仿真,运行正确。

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

实验五矩阵键盘实验一、实验内容1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。

按其它键退出。

2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。

可定义“A”键为“+”键,“B”键为“=”键。

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

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

三、实验说明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个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

单片机实验五报告_单片机键盘实验

单片机实验五报告_单片机键盘实验

单片机实验五报告_单片机键盘实验一、实验目的本次单片机键盘实验的主要目的是让我们深入了解单片机与键盘的接口技术,掌握如何通过编程实现对键盘输入的检测和响应,从而提高我们在单片机应用开发中的实际操作能力。

二、实验原理在单片机系统中,键盘通常是作为输入设备使用的。

常见的键盘有独立式键盘和矩阵式键盘两种类型。

独立式键盘是每个按键单独占用一根 I/O 线,其优点是电路简单,编程容易,但缺点是占用较多的 I/O 口资源。

矩阵式键盘则是将按键排列成矩阵形式,通过行线和列线的交叉来识别按键。

这种方式可以有效地节省 I/O 口资源,但电路和编程相对复杂一些。

在本次实验中,我们采用了矩阵式键盘。

其工作原理是通过逐行扫描或者逐列扫描的方式,检测行线和列线的电平状态,从而确定按下的按键。

三、实验设备及材料1、单片机开发板一块2、计算机一台3、编程软件(如 Keil C51)4、下载工具(如 STCISP)四、实验步骤1、硬件连接将矩阵式键盘与单片机的 I/O 口进行连接,注意行线和列线的对应关系。

连接好电源和地线,确保硬件电路正常工作。

2、软件编程打开编程软件,创建一个新的工程。

编写初始化程序,包括设置 I/O 口的工作模式、中断等。

编写键盘扫描程序,通过循环扫描行线和列线的电平状态,判断是否有按键按下。

当检测到按键按下时,根据按键的编码执行相应的操作,如在数码管上显示按键值、控制 LED 灯的亮灭等。

3、编译和下载对编写好的程序进行编译,检查是否有语法错误。

如果编译成功,使用下载工具将程序下载到单片机中。

4、实验调试观察硬件电路的工作状态,看是否有异常现象。

按下不同的按键,检查程序的响应是否正确。

如果出现问题,通过调试工具(如单步调试、断点调试等)查找并解决问题。

五、实验代码以下是本次实验的部分关键代码:```cinclude <reg51h>//定义键盘的行和列define ROW_NUM 4define COL_NUM 4//定义行线和列线的端口sbit ROW1 = P1^0;sbit ROW2 = P1^1;sbit ROW3 = P1^2;sbit ROW4 = P1^3;sbit COL1 = P1^4;sbit COL2 = P1^5;sbit COL3 = P1^6;sbit COL4 = P1^7;//定义按键值的编码unsigned char code KeyCodeMapROW_NUMCOL_NUM ={{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'','0','','D'}};//键盘扫描函数void KeyScan(){unsigned char i, j, temp;unsigned char keyValue = 0;//逐行扫描for (i = 0; i < ROW_NUM; i++){//先将所有行线置高电平ROW1 = ROW2 = ROW3 = ROW4 = 1;//将当前行线置低电平switch (i){case 0: ROW1 = 0; break;case 1: ROW2 = 0; break;case 2: ROW3 = 0; break;case 3: ROW4 = 0; break;}//读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4;//如果有列线为低电平,则表示有按键按下if (temp!= 0xF0){//延迟去抖动delay_ms(10);//再次读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4; if (temp!= 0xF0){//确定按下的按键for (j = 0; j < COL_NUM; j++){if ((temp &(1 << j))== 0){keyValue = KeyCodeMapij;break;}}//执行相应的操作switch (keyValue){case '1'://具体操作break;case '2':break;//其他按键的操作}}}}}//主函数void main(){while (1){KeyScan();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。

单片机键盘扫描实验

单片机键盘扫描实验

《单片机原理及应用》实验报告实验名称:键盘扫描一、实验目的:1、掌握键盘和显示器的接口方法和编程方法。

2、掌握键盘扫描和LED八段码显示器的工作原理。

二、实验内容:利用实验系统提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。

1、按原来的源程序进行运行调试,要成功。

2、初始显示为自己学号的低6位3、将左边开始第3位数码管的显示跟随按键输入变化而变化。

4、在3的基础上让显示值和键码值相等。

5、若只用键盘中的列扫描,而不使用行扫描,会有什么结果产生?三、程序框图及电路连接图四、源程序清单(注释部分请手写)1、显示自己学号的低6位,显示值为680127,键码值分别为082H,080H,0C0H,0F9H,0A4H,0F8H。

OUTBIT equ 0ffddhOUTSEG equ 0ffdchIN equ 0ffdehLedBuf equ 60horg 0Start:mov sp,#40hmov LedBuf+0,#082hmov LedBuf+1,#080hmov LedBuf+2,#0c0hmov LedBuf+3,#0f9hmov LedBuf+4,#0a4hmov LedBuf+5,#0f8hMLoop:call DisplayLEDcall ScanKeyjb acc.5,MLoopjb acc.4,MLoopanl a,#00001111bmov dptr, #keytable (2)movc a, @a+dptrmov dptr,#LedMapmovc a,@a+dptrmov LedBuf+5,a (1)sjmp MLoopDelay:mov r7,#0DelayLoop:djnz r7,DelayLoopdjnz r6,DelayLoopretDisplayLED:mov r0,#LedBufmov r1,#6mov r2,#20hLoop:mov dptr,#OUTBITmov a,#0movx @dptr,amov a,@r0mov dptr,#OUTSEGmovx @dptr,amov dptr,#OUTBITmov a,r2movx @dptr,amov r6,#1call Delaymov a,r2rr amov r2,ainc r0djnz r1,LoopretScanKey:setb RS1mov r2,#0fehmov r3,#08hmov r0,#00hLoopS: mov r1,#Low(OUTBIT)mov a,r2movx @r1,arl amov r2,ainc r1movx a,@r1cpl aanl a,#0fhjnz Scan (3)inc r0djnz r3,LoopSReTKey3:mov a,#20hTKey3: mov r2,aclr amov r1,#Low(OUTBIT)movx @r1,amov a,r2clr RS1retScan1: mov a, r0sjmp TKey3Scan:cpl ajb acc.0,TKey0mov a,#00hsjmp EndLoopTKey0: jb acc.1,TKey1mov a,#08hsjmp EndLoopTKey1: jb acc.2,TKey2mov a,#10hsjmp EndLoopTKey2: jb acc.3,ReTKey3mov a,#18hEndLoop:add a,r0sjmp TKey3LedMap:db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8hdb 080h,090h,088h,083h,0c6h,0a1h,086h,08eh KeyTable:db 07h,04h,08h,05h,09h,06h,0ah,0bhdb 01h,00h,02h,0fh,03h,0eh,0ch,0dhend2、在原有的程序上修改:把(1)处的mov LedBuf+5,a改为mov LedBuf+2,a3、在2的基础上让显示值和键码值相等:把(2)处的mov dptr, #keytable改为mov dptr, # LedMap 然后把后两行删除4、只用键盘中的列扫描,而不使用行扫描把(3)处的jnz Scan改为jnz Scan1。

单片机键盘接口实验实验报告

单片机键盘接口实验实验报告

单片机键盘接口实验是嵌入式系统课程中常见的实践内容,通过该实验可以学习如何
通过单片机与键盘进行交互。

在实验报告中,你可以包括以下内容:
1. **实验背景**:简要介绍单片机键盘接口实验的背景和意义,说明该实验对于学习
嵌入式系统的重要性。

2. **实验目的**:阐明本次实验的主要目的和预期学习目标,如掌握单片机与外部键
盘的连接方式、键盘扫描原理等。

3. **实验器材**:列出用于实验的硬件设备和软件工具,如单片机型号、键盘类型、
开发板、编程软件等。

4. **实验原理**:详细描述单片机与键盘的接口原理、键盘扫描原理、键值获取原理
等相关知识。

5. **实验内容**:描述具体的实验步骤,包括单片机与键盘的连接方法、程序设计流
程等。

6. **实验结果**:展示实验的运行结果,可以包括通过键盘输入字符、数字等信息,
并说明实验达到预期的目标。

7. **实验分析**:对实验过程中遇到的问题进行分析,并提出解决方案。

也可以对实
验结果进行分析,说明实验现象背后的原理。

8. **实验总结**:总结本次实验的收获和体会,强调实验对于学习嵌入式系统的意义,以及未来可能的拓展方向。

9. **参考资料**:列出在撰写实验报告过程中所参考的相关书籍、网络资料或者其他
来源。

以上内容仅供参考,实验报告的具体内容可以根据你的实际实验情况和要求进行适当
调整和扩展。

希望这些信息能对你撰写实验报告有所帮助!。

实验五:独立式键盘实验

实验五:独立式键盘实验

实验五:独立式键盘实验4.5.1 实验目的1. 掌握单片机独立键盘接口设计方法。

2. 掌握单片机键盘扫描程序设计方法。

3. 掌握按键功能设计方法。

4. 掌握软件消除按键抖动方法。

4.5.2 实验预习1.熟悉Keil集成编译环境的使用方法。

2. 复习单片机C语言程序设计方法。

3. 复习独立键盘工作原理。

4. 复习按键去抖动方法。

4.5.3 实验原理实验板上提供4个独立按键,与单片机接口如图4.5.1所示,每个按键单独接单片机一个I/O接口。

只要将相应端口设为1,然后判断端口状态,如果仍为1,则按键处于断开(释放)状态,如果为0,则按键处于接通(闭合)状态。

图4.5.1 独立键盘电原理图4.5.4 预作实验任务1. 用Proteus仿真软件绘制独立键盘电路图,包括如图4.5.1所示键盘接口,单片机最小系统以及数码管动态显示电路。

2. 简述按键识别过程中如何等待按键释放。

3. 简述按键抖动对单片机系统工作性能的影响,并简介消除按键抖动的方法。

4. 编写按键识别函数,要求正确识别4个按键的状态,如果有按键按下则返回键值,从左到右四个键值分别为1~4。

并通过仿真或实验板验证(要求用软件的方法消除按键抖动)。

5.为实验板上4个按键设定不同的功能,在数码管上显示数字128,4个按键按下后分别对显示的数字做如下修改:key1:数字+1;key2:数字-1;key3:数字+10;key4:数字-10;流程图如图4.5.2所示,试设计完整程序(按键识别子程序KEYSCAN和动态显示子程序DISPLAY可直接调用这里省略)。

图4.5.2 按键功能设计流程图4.5.5 实验任务1.开机时数码管显示1002.按键key1一次数字加1,按键key2一次数字减1。

加到999时再加1归零,减到000时再减1得999。

3.按住键key3不放实现连加功能,每0.2s加1。

4.按住键key4不放实现连减功能,每0.2s减1。

4.5.6 实验步骤1.分析题意,确定算法,绘制主程序流程图。

单片机按键实验报告

单片机按键实验报告

单片机按键实验报告篇一:单片机按键扫描实验报告键盘扫描一.实验目的(1)掌握矩阵键盘接口电路和键盘扫描编程方法。

(2)掌握按键值处理与显示电路设计。

二.实验任务(1)设计4*4键盘,编写各个键的特征码和对应的键值(0~F);(2)编程扫描按键,将按键对应的数字值使用数码管显示出来。

三.实验电路及连线方法1.采用动态显示连线方法:电路由2 片74LS573,1 个六字一体的共阴数码管组成。

由U15 输出段选码,U16 做位选码,与单片机的采用I/O 口连接方式,短路片J22 连接P2.0,J23 连接P2.3,做输出信号锁存。

(实际电路连接是d7-d6-d5-d4-d3-d2-d1-d0?h-c-d-e-g-b-a-f)。

PW12 是电源端。

2.键盘电路连线方法:电路由16 个按键组成,用P1 口扩展4×4 行列式键盘。

J20 是键盘连接端,连接到P1 口。

J21 是行列键盘、独立键盘选择端,当J21 的短路片连接2-3脚时,构成4×4 行列式键盘;当J21 的短路片连接2-1 脚时,可形成3×4 行列式键盘,4 个独立式按键S4、S8、S12、S16,这4 个独立按键分别连接P1.4~P1.7;其他12 个键3×4 行列式键盘。

PW15 是电源端。

四.编程思路1.采用反转法识别按键的闭合。

2.采用动态显示将键值显示出来。

五.算法流程图六.资源分配1.用P1口进行查找按键2.用R3做键值指针3.用R1做动态显示为选码指针。

4.R5为延时指针。

七.程序设计KPIN:ORG MOV MOV ANL MOV 0000H P1,#0F0H A,P1 A,#0F0H B,AMOVP1,#0FHMOVA,P1ANLA,#0FHORLA,BCJNE A,#0FFH,KPIN1AJMP EXITKPIN1: MOVB,AMOVDPTR,#TABKPMOVR3,#0KPIN2: MOVA,R3MOVC A,@A+DPTRCJNE A,B,KPIN3MOVA,R3LOOP: MOVR1,#0FEH;键盘动态显示 LOOP1: MOVA,R3ANLA,#0FHMOV DPTR,#TABMOVC A,@A+DPTRCLRP2.0CLRP2.1MOVP0,ASETB P2.0NOPCLRP2.0LOOP2: MOVA,R1;位选码MOVP0,ASETB P2.1MOVR5,#250LOOP3: DJNZ R5,LOOP3CLRP2.1SJMP LOOPKPIN3: INCR3CJNE A,#0FFH,KPIN2EXIT: RETTABKP: DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBHDB 0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,67H,0FFHTAB: DB77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH,5FHDB 79H,33H,7CH,3BH,1BHEND八.调试出现的问题及解决问题1:程序正常运行,但按键显示出现乱码解决:动态显示笔形码错误,并改正。

单片机实验五 -键盘实验

单片机实验五 -键盘实验

电子信息工程系实验报告课程名称:单片机与接口技术实验项目名称:键盘实验 实验时间:2013-5-23班级:通信10 姓名:Microlab_4 学号:实 验 目 的:熟悉keil 仿真软件、proteus 仿真软件的使用和实验板中行列式键盘的使用。

了解并熟悉行列式键盘的电路结构、与单片机的连接方法及其工作原理,理解掌握C51中单片机控制行列式键盘中判断按键是否按下、按键的识别、按键的消抖分别是如何实现的。

实 验 原 理:键盘是单片机系统中通用的输入设备,用于向系统输入数据或控制信息。

键盘中一般矩阵式(行列式)键盘用得较多,适用于按键数量较多的场合。

矩阵式键盘由行线和列线组成,按键位于行线、列线的交叉点上。

当键被按下,则其交点的行线和列线接通。

行和列可分别用两个I/O 口来控制。

判断是否有键按下时,行线通过上拉电阻接+5V 上,而先使所有列线为低电平(I /O 输出0),再读行线状态(输入口),当无键按下时,所有行线为高电平,即读到“全1”数据;当有某键按下时,总会有一根行线为低电平,即读到的数据不全为“1”。

按键的识别(识别键的行列位置)有两种方法:扫描法和反转法。

反转法将行线接一并口,做输出方式;列线接一并口,做输入方式。

使所有行线为低电平(送全“0”),读入列线值,为“0”的那列,即按键所在列;反过来,使行线做输入方式,列线做输出方式。

将刚读到的列线值输出,然后读行线值,为“0”的那行,即按键所在行。

编程时使用P1=0x0f;m=P1;P1=0xf0;n=P1;mn=m|n;即可得到按键的键值,每一个按键都有自己唯一的键值。

按键或键盘都是一个机械开关,键的按下和放开是利用机械触点的闭合和断开来实现的。

由于机械触点的弹性作用,一个按键开关在闭合及断开瞬间均有一连串的抖动,抖动的时间长短由按键的机械特性决定,一般为5~10ms。

为了确保按键动作只确认一次,必须消除抖动的影响。

一般采用延时的方法。

单片机输入实验实习报告

单片机输入实验实习报告

一、实习目的本次单片机输入实验实习旨在使学生了解单片机的输入原理和接口技术,掌握单片机与外部设备进行数据交换的方法,提高学生的动手实践能力和系统设计能力。

二、实习内容1. 实验环境(1)单片机开发板:选用STC89C52单片机作为实验平台。

(2)输入设备:键盘、光敏传感器、红外传感器等。

(3)实验仪器:示波器、万用表、电源等。

2. 实验步骤(1)键盘输入实验1)了解键盘的工作原理,包括扫描矩阵、去抖动等。

2)设计键盘扫描程序,实现键盘输入功能。

3)编写程序,将键盘输入的数据显示在LCD显示屏上。

(2)光敏传感器输入实验1)了解光敏传感器的工作原理,包括光敏电阻、光敏二极管等。

2)设计光敏传感器信号处理程序,实现光强检测。

3)编写程序,将光强检测结果显示在LCD显示屏上。

(3)红外传感器输入实验1)了解红外传感器的工作原理,包括红外发射管、红外接收管等。

2)设计红外传感器信号处理程序,实现距离检测。

3)编写程序,将距离检测结果显示在LCD显示屏上。

三、实验结果与分析1. 键盘输入实验通过设计键盘扫描程序,成功实现了键盘输入功能。

在程序运行过程中,通过示波器观察键盘扫描信号,验证了程序的正确性。

将键盘输入的数据显示在LCD显示屏上,实现了人机交互。

2. 光敏传感器输入实验通过设计光敏传感器信号处理程序,成功实现了光强检测。

在程序运行过程中,通过示波器观察光敏传感器信号,验证了程序的正确性。

将光强检测结果显示在LCD 显示屏上,实现了实时监控。

3. 红外传感器输入实验通过设计红外传感器信号处理程序,成功实现了距离检测。

在程序运行过程中,通过示波器观察红外传感器信号,验证了程序的正确性。

将距离检测结果显示在LCD 显示屏上,实现了实时监控。

四、实习总结1. 通过本次单片机输入实验,掌握了单片机与外部设备进行数据交换的方法,提高了动手实践能力和系统设计能力。

2. 学会了如何设计键盘、光敏传感器、红外传感器等输入设备的信号处理程序,实现了数据采集和显示。

单片机键盘显示实验报告

单片机键盘显示实验报告

单片机得键盘与显示实验报告㈠实验目得1.掌握单片机I/O得工作方式;2.掌握单片机以串行口方式0工作得LED显示;3.掌握键盘与LED显示得编程方法.㈡实验器材1.G6W仿真器ﻩ一台2.MCS—51实验板ﻩ一台3.PC机ﻩﻩﻩ一台4.电源一台㈢实验内容及要求实验硬件线路图见附图从线路图可见,8051单片机得P1口作为8个按键得输入端,构成独立式键盘。

四个LED显示器通过四个串/并移位寄存器74LS164接口至8051得串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示得段码数据,TXD则作为发送时钟来对显示数据进行移位操作。

编写一个计算器程序,当某一键按下时可执行相应得加、减、乘、除运算方式,在四个显示器上显示数学算式与最终计算结果。

注:①通过按键来选择加、减、乘、除四种运算方式。

②输入两个数字均为一位十进制数,可预先放在内存中。

㈣实验框图(见下页)㈤思考题1.当键盘采用中断方式时,硬件电路应怎样连接?P1、4~P1、7就是键输出线,P1、0~P1、3就是扫描输入线。

输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051得外部中断输入端。

2、74LS164移位寄存器得移位速率就是多少?实验中要求计算得式子与结果之间相差一秒,移位寄存器得移位速率应该就是每秒一位吧。

其实这个问题确实不知道怎么回答。

.。

ﻩLED实验代码:ORG0000HAJMPMAINORG 0030HMAIN:MOV 41H,#0BBH;对几个存放地址进行初始化MOV 42H,#0BBHMOV43H,#0BBHMOV44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALLDISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOVP1,#0FFH ;初始化P1口MOVA,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1 ;消抖MOVA,P1;再次读取按键状态CPL AJZ KEY;再次判别就是否有键按下PUSH AKEY1:MOVA,P1CPL AANL A,#0FH ;判别按键释放JNZKEY1;按键未释放,等待LCALLDELAY1;释放,延时去抖动POPAJB ACC、0,ADD1 ;K1按下转去ADD1JBACC、1,SUB1 ;K1按下转去SUB1JB ACC、2,MUL1 ;K1按下转去MUL1JBACC、3,DIV1;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数与被加数MOV43H,#049HLCALL DISPLAY;显示加号MOV A,R3ADDA,R4DA AMOV R3,A;相加结果放入R6ANLA,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果得高位放入R6LCALL Lﻩﻩ;显示缓存区设置LCALLDELAY2 ﻩ;延时一秒后显示LCALL DISPLAYLJMPKEYSUB1:LCALL BUFFER ;显示减数与被减数MOV43H,#40HLCALL DISPLAY;显示减号MOVA,R3CLR CY;CY清零SUBB A,R4;做减法PUSH ARLCA;带进位循环左移,最高位放入CY JC F ;判断最高位,若为1则跳转到负数ZHENG:POP AMOVR4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INCAMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV43H,#99HLCALLDISPLAY;显示乘号MOV A,R3MOVB,R4MUL AB;结果放入AB,A中就是低8位,B中就是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B;结果个位放入R7MOV R3,A ;结果得十位放入R6LCALL LLCALLDELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数与被除数MOV43H,#62HLCALLDISPLAY;显示除号MOV A,R3MOV B,R4DIV AB ;A除以BMOV R4,B;余数放在R4中MOV R3,A ;商放在R3中MOV A,R4MOVC A,A+DPTR;调用段选号MOV 41H,A;显示余数MOV A,R3MOVCA,A+DPTRMOV43H,A;显示商MOV42H,#00HMOV44H,#00HLCALL DELAY2;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,A+DPTRMOV42H,AMOV A,R3MOVC A,A+DPTRMOV 44H,ARETDISPLAY:MOV R5,#04Hﻩ;共四位需要显示MOV R0,#41HDISPLAY1:MOV A,R0MOV SBUF,ADISPLAY2:JNB TI,DISPLAY2ﻩ;就是否传完了CLR TIINC R0DJNZ R5,DISPLAY1RETL:MOVA,R4MOVC A,A+DPTRMOV 41H,A ;R4对应得段码MOV A,R3MOVC A,A+DPTRMOV42H,A ;R3对应得段码MOV43H,#00HMOV44H,#00HRETDELAY1:;普通延时ﻩMOVR1,#20HDS1:ﻩMOV R2,#0FFHDS2:DJNZ R2,DS2ﻩDJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOVTMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLRTR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH09H 0EAH 6BH;段码表DB 59H73H0F3H 0BHDB 0FBH7BH 00H 0DBHDB0F1H 0B2H 0E9H0F2HDB0D2H40H实验结果及分析按键1:8+2= 结果:10按键2:8-2=结果: 6按键3:8*2= 结果:16按键4:8/2=结果:4从上面得结果可以瞧出,本次实验基本完成了实验要求。

键盘显示单片机实习报告

键盘显示单片机实习报告

电子信息工程专业单片机课程设计报告题目键盘显示模块姓名学号班级指导教师2010年6 月30 日课程设计任务书课程设计题目键盘显示模块课程设计起止日期 6月13日至 6月30日实习地点实验楼106课程设计内容与要求(包括:设计任务及要求、设计原理、所需仪器设备、验收标准)(一)设计任务及要求及格:键盘能识别并能显示键号,即按不同的键后能在对应的位置显示按键的值。

中:能实现按键后能从左到右移动显示。

良:应用单片机定时器完成时钟设计,并能动态循环显示时、分、秒。

优:在良的基础之上,能够对时间进行校准。

(二)设计原理利用单片机扫描键盘来确定行列式2*2键盘是否有键按下,若有键按下则判断是哪个键按下然后在数码管相应位置输出。

(三)所需仪器设备单片机最小系统pc机、伟福仿真器、电源、导线若干指导教师田悦新2010 年 6月 30 日课程设计报告一、设计原理与技术方法:包括:电路工作分析原理与原理图、元器件选择、电路调试方法与结果说明;软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。

1.电路原理图见附录2.电路工作分析1)键盘工作电路:键盘为2*2的键盘,与单片机的p1.3-p1.6口连接。

工作时先判断有无键按下,检查行输出是否由高电平变成低电平。

然后再判断是哪个键按下。

最后在相应的位置输出对应的信息。

2)数码管显示电路:数码管有四个,前面和一个373锁存器相连,用来锁存显示信息。

373通过一个138三八译码器连接在单片机的p2口,其地址可以算出为6000H,数码管COM1,COM2,COM3,COM4,也通过138译码器和单片机的p2口相连,地址分别为8000H,0A000H,0C000H,0E000H。

数码管显示相应键按下的信息,单片机读入键盘的状态,锁存于373中,然后输出在数码管中。

数码管显示时钟,单片机内部的定时器来完成时钟设计在数码管中显示出来。

3.元器件选择、电路调试方法与结果说明1)元器选择:74ls138、74ls373、74ls138、74ls04、74ls02、74ls08、数码管、2*2键盘、晶振、电阻、电容、二极管等。

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

实验五矩阵键盘实验一、实验内容1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。

按其它键退出。

2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。

可定义“A”键为“+”键,“B”键为“=”键。

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

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

三、实验说明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个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

单片机实训报告键盘和数码管显示(WORD档)

单片机实训报告键盘和数码管显示(WORD档)

单片机实训报告(一)班级:测控 9 0 1学号:姓名实验名称:键盘和数码管显示实验目的:熟悉掌握ZLG7289的功能和特性,ZLG7289芯片各引脚名称及功能和ZLG7289与微控制器的接口,ZLG7289的SPI接口和控制指令。

同时进一步熟悉掌握keil软件的操作和编程。

实验原理:ZLG7289是一款数码显示驱动和键盘扫描管理的芯片。

主要有如下的特性:1.直接驱动8位共阴式数码管或64只独立的LED;2.管理多达64只按键,自动消除抖动;3.段电流可达15mA以上,位电流可达100mA;4.具有左移、右移、闪烁、消隐、段点亮等多种功能;5.与微控制器之间采用三线SPI总线接口,占用I/O资源少。

电路主要由芯片ZLG7289、8位共阴极数码管、64键的键盘矩阵以及单片机构成。

ZLG7289的控制电路图:电路的工作原理:当ZLG7289接收到单片机发出的指令(包括纯指令)后,经过读取、分析和处理,将会在数码管上显示相对应的操作指令。

当ZLG7289检测到有效的按键时,KEY脚将从高电平变为低电平,并一直保持到按键结束。

在此期间,如果ZLG7289接收到“读键盘数据指令”,则输出当前按键的键盘代码。

ZLG7289芯片各引脚名称及功能:引脚名称说明1、2 RTCC、Vcc 接电源3、5 NC 悬空4 Vss 接地6 /CS 片选输入端,低电平时,可向其发指令或读键盘。

ZLG7289使用SPI串行总线与微控制器接口。

SPI接口SPI串行总线是Motorola公司推出的一种同步串行接口。

通常它需要四条线,就可与微控制器之间实现全双工的同步串行通讯。

SPI串行总线主要有如下的特性:1.采用主从模式(Master Slave)架构,支持多Slave模式,一般只支持单Master,Master 控制时钟。

2.采用四线,实现全双工通信。

图1 SPI接口连线示意图SPI的数据传输时序模式SPI接口定义了四种数据传输的时序模式。

单片机实验五报告-单片机键盘实验

单片机实验五报告-单片机键盘实验

南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证 ⃞综合■设计 ⃞创新实验日期:2018.05.18 实验成绩:实验五单片机键盘实验(一)实验目的1.掌握单片机键盘控制;2.掌握数码管显示控制。

(二)设计要求1.行列扫描按键键值为0~F;2.按键只支持单键按下,不支持多键同时按下;3.要求用数码管显示按键值。

(三)实验原理1.矩阵式键盘的设计按键数目较多的杨合常采用矩阵式(也称行列式)键盘。

键盘由行线和列线组成,按键位于行、列的交叉点上,如下图所示,一个4×4的行列结构可构成一个16个按键的键盘,需要一个8位的并行I/O口。

很明显,在按键数目较多的场合,矩阵式键盘要比独立式键盘节省较多的I/O口线。

对下图所示的矩阵式键盘的查询扫描,一般包括以下4个步骤。

(1)首先判别整个键盘有无按键按下方法为单片机驱动列线P0.0-P0.3输出全0,然后读行线P0.4-P0.7的状态,若全为1,则键盘上没有闭合键;若P0.4-P0.7,则有键按下。

(2)去除键的抖动当判别出可能有键按下时,软件延时一段时间(10ms左右)再判别键盘的状态,若仍有键闭合,则认为键盘上有确定的键按下,否则是键抖动。

(3)求出按下键的键号上图中的16个按键,键号依次为0,1,...15。

各行的首键号分别为0,4,8,12,列号依次为0,1,2,3。

行线通过上拉电阻接+5V,当无键按下时,行线为高电平,当有按键按下时,对应的行线与列线短接,行线的电平将由此行线相连的列线电平决定。

如果把行线设置为单片机的输入口线,列线设置为单片机的输出口线,则按键号的识别过程是:先令0列线P0.0为低电平0,其余3根列线都为高电平,遂行检查行线状态。

如果行线P0.4-P0.7都为高电平1,则P0.0这列上没有按键闭合,若P0.4-P0.7中有一行为低电平,则该行线与列线交叉的按键按下。

如果P0.0这一列上没有按键闭合,接着再使P0.1为低电平,其余列线为高电平。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌大学实验报告
学生姓名:学号:专业班级:
实验类型:⃞验证 ⃞综合■设计 ⃞创新实验日期:2018.05.18 实验成绩:
实验五单片机键盘实验
(一)实验目的
1.掌握单片机键盘控制;
2.掌握数码管显示控制。

(二)设计要求
1.行列扫描按键键值为0~F;
2.按键只支持单键按下,不支持多键同时按下;
3.要求用数码管显示按键值。

(三)实验原理
1.矩阵式键盘的设计
按键数目较多的杨合常采用矩阵式(也称行列式)键盘。

键盘由行线和列线组成,按键位于行、列的交叉点上,如下图所示,一个4×4的行列结构可构成一个16个按键的键盘,需要一个8位的并行I/O口。

很明显,在按键数目较多的场合,矩阵式键盘要比独立式键盘节省较多的I/O口线。

对下图所示的矩阵式键盘的查询扫描,一般包括以下4个步骤。

(1)首先判别整个键盘有无按键按下方法为单片机驱动列线P0.0-P0.3输出全0,然后读行线
P0.4-P0.7的状态,若全为1,则键盘上没有闭合键;若P0.4-P0.7,则有键按下。

(2)去除键的抖动当判别出可能有键按下时,软件延时一段时间(10ms左右)再判别键盘的状态,若仍有键闭合,则认为键盘上有确定的键按下,否则是键抖动。

(3)求出按下键的键号上图中的16个按键,键号依次为0,1,...15。

各行的首键号分别为0,4,8,12,列号依次为0,1,2,3。

行线通过上拉电阻接+5V,当无键按下时,行线为高电平,当有按键按下时,对应的行线与列线短接,行线的电平将由此行线相连的列线电平决定。

如果把行线设置为单片机的输入口线,列线设置为单片机的输出口线,则按键号的识别过程是:先令0列线P0.0为低电平0,其余3根列线都为高电平,遂行检查行线状态。

如果行线P0.4-P0.7都为高电平1,则P0.0这列上没有按键闭合,若P0.4-P0.7中有一行为低电平,则该行线与列线交叉的按键按下。

如果P0.0这一列上没有按键闭合,接着再使P0.1为低电平,其余列线为高电平。

用同样的方法检查P0.1这列上有无按键闭合,以此类推。

这样采用逐列扫描(只有列为低),然后读入各行线的电平,即可求出设下键的键号N=行的首键号+列号。

各行的首键号分别为0,4,8,12,列号依次为0,1,2,3。

编程时设置1个列号计数器,初值为0,每扫描1列,列号计数器加1。

(4)判闭合键是否松开如果松开则将键号送入相应的寄存器中保存,单片机根据按下键的键号,对该键的一次闭合仅作一次键功能处理。

2.数码管显示键值
上述的键盘扫面步骤结束后,键号存储在相应的寄存器中,要把键号显示出来,只须向P4.0口输出对应的段码、位码以及向P4.3和P5.4口输出相应信号,利用74HC595芯片控制八段数码管从而达到显示相应键号的效果。

电路图如下所示:
(四)实验设备
硬件:PC机、USB数据传输线、STC单片机综合实验箱
软件:兼容51单片机的Keil uvision5集成开发环境、STC-ISP单片机烧录软件
(五)实验结果
实验源代码如(七)所示,对代码进行编译,提示0错误0警告,生成hex文件
将单片机试验箱和电脑通过USB数据线连接,打开STC-ISP检测串口
点击点开程序文件,选择刚才生成的hex文件,点击下载程序
(六)结果讨论与心得体会
结果分析讨论:将程序烧录至单片机后,可观察数码管最高位显示0(初始值),其他位消隐。

按下矩阵键盘的键,数码管显示相应的键号,从0-F都能完整显示,完成实验。

心得体会:通过本次实验,我学会了如何使用矩阵键盘,掌握了矩阵键盘的扫描原理,理解了矩阵键盘的电路结构以及数码管的显示方式。

希望通过自己多次尝试能在今后实验中熟练使用矩阵键盘并将其运用到其他方面。

(七)附录:实验源代码
P4 DATA 0C0H
P5 DATA 0C8H
P0M1 DATA 0x93 ;
P0M0 DATA 0x94 ;
P4M1 DATA 0xB3 ;
P4M0 DATA 0xB4 ;
P5M1 DATA 0xC9 ;
P5M0 DATA 0xCA ;
P_HC595_SER BIT P4.0 ;
P_HC595_RCLK BIT P5.4 ;
P_HC595_SRCLK BIT P4.3 ;
KeyState DATA 70H ;
ORG 0000H
LJMP F_Main
ORG 0100H
F_Main:
CLR A
MOV P0M1, A ;
MOV P0M0, A ;
MOV P4M1, A ;
MOV P4M0, A ;
MOV P5M1, A ;
MOV P5M0, A ;
MOV psw, #00H ;
MOV 27H , #40H ;
MOV KeyState, #00H ;
F_Main_Loop:
LCALL KEY2 ;
LCALL F_delay_ms ;
LCALL F_DisplayScan ;
AJMP F_Main_Loop ;
KEY2:
LCALL KS ;
JNZ S1 ;
LCALL F_delay_ms ;
AJMP QUIT ; S1:
LCALL F_delay_ms ;
LCALL KS ;
JNZ S2 ;
AJMP QUIT ; S2:
MOV R4, #0FEH ;
MOV R5, #00H ; S3:
MOV P0, R4 ; L0:
JB P0.4, L1 ;
MOV A, #00H ;
AJMP LK ;
L1:
JB P0.5, L2 ;
MOV A, #04H ;
AJMP LK ;
L2:
JB P0.6, L3 ;
MOV A, #08H ;
AJMP LK ;
L3:
JB P0.7, NEXT ;
MOV A, #0CH ; LK:
ADD A, R5 ;
PUSH ACC ;
LJMP S4 ; NEXT:
INC R5 ;
MOV A, R4 ;
JNB ACC.3, S4 ;
RL A ;
MOV R4, A ;
AJMP S3 ;
S4:
LCALL KS ;
JNZ S4 ;
POP ACC ;
MOV KeyState, A ;
LJMP QUIT ; KS:
MOV P0, #0FH ;
MOV A, P0 ;
XRL A, #0FH ;
RET
QUIT:
RET
F_delay_ms:
MOV R2, #25 ;
D1:
MOV R3, #200
DJNZ R3, $
DJNZ R2, D1
RET
F_Send_595:
PUSH 01H ;
MOV R1, #8 ;
L_Send_595_Loop:
RLC A ;
MOV P_HC595_SER,C ;
SETB P_HC595_SRCLK ;
CLR P_HC595_SRCLK ;
DJNZ R1,L_Send_595_Loop ;
POP 01H ;
RET
F_DisplayScan:
PUSH ACC ;
MOV A, #080H ;
CPL A ;
LCALL F_Send_595 ;
POP ACC ;
MOV A, KeyState ;
MOV DPTR, #T_Display ;
MOVC A, @A+DPTR ;
LCALL F_Send_595 ;
SETB P_HC595_RCLK ;
CLR P_HC595_RCLK
LCALL F_delay_ms ;
RET
T_Display: ;
DB ;
03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H DB
000H
T_COM:
DB
001H,002H,004H,008H,010H,020H,040H,080H
END。

相关文档
最新文档