单片机 键盘接口实验

合集下载

单片机与键盘的接口设计与实现方法

单片机与键盘的接口设计与实现方法

单片机与键盘的接口设计与实现方法一、引言单片机作为嵌入式系统中的重要组成部分,广泛应用于各个领域。

而键盘作为输入设备,是单片机常用的外部设备之一。

本文将探讨单片机与键盘之间的接口设计与实现方法,以便更好地实现单片机与键盘之间的数据交互。

二、接口设计1. PS/2接口PS/2接口是一种常见的键盘接口标准,通常使用4根引线进行连接,分别是VCC、GND、DATA和CLK。

其中,DATA和CLK引线用于传输键盘数据和时钟信号。

在单片机中,可以通过GPIO口模拟PS/2接口,实现与PS/2键盘的通信。

2. USB接口USB接口是一种更先进的键盘接口标准,传输速度更快,适用于高性能的计算机系统。

在单片机中,可以通过USB主机控制器芯片与USB键盘进行通信,实现数据的传输与交互。

三、接口实现方法1. PS/2接口实现首先,将PS/2接口的DATA和CLK引线连接到单片机的GPIO口,通过对数据引脚和时钟引脚的读取,可以获取键盘发送的数据。

接着,根据PS/2协议解析数据,获取键盘的按键信息。

最后,将按键信息传输到单片机的内部处理单元,实现对键盘输入的响应。

2. USB接口实现对于USB接口,单片机需要搭载USB主机控制器芯片,以实现USB键盘和单片机之间的通信。

USB主机控制器芯片负责解析USB协议,接收USB键盘发送的数据,并将数据传输到单片机内部处理单元。

通过USB接口的实现,可以实现更高速率的数据传输和更强大的功能支持。

四、总结通过本文对单片机与键盘接口设计与实现方法的探讨,可以更好地理解单片机与键盘之间的数据交互原理和实现方式。

PS/2接口和USB接口是两种常见的键盘接口标准,单片机可以通过相应的接口设计与实现方法实现与键盘的数据交互。

希望本文对您的单片机与键盘接口设计与实现提供一定的帮助。

单片机键盘实验报告

单片机键盘实验报告

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

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

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

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

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

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

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

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

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

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

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 显示用的段码与教科书所提供的不同,本实验采用如下段码:显示数符段码显示数符段码0BBH A DBH109H B F1H2EAH C B2H36BH D E9H459H E F2H573H F D2H否有否P1口置输入读P1口开 始显示“0000”是否有键按下?延迟消抖是否有键按下?是读键码加法运算减法运算除运算6F3H—40H70BH.04H8FBH┗┛A1H97BH┗┛1AH灭00H P DAH实验代码:ORG 0000HAJMP MAINORG 0030HMAIN:MOV 41H,#0BBH ;对几个存放地址进行初始化MOV 42H,#0BBHMOV 43H,#0BBHMOV 44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1;消抖MOV A,P1 ;再次读取按键状态CPL AJZ KEY ;再次判别是否有键按下PUSH AKEY1:MOV A,P1CPL AANL A,#0FH ;判别按键释放JNZ KEY1 ;按键未释放,等待LCALL DELAY1;释放,延时去抖动POP AJB ACC.0,ADD1 ;K1按下转去ADD1JB ACC.1,SUB1 ;K1按下转去SUB1JB ACC.2,MUL1 ;K1按下转去MUL1JB ACC.3,DIV1 ;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数和被加数MOV 43H,#049HLCALL DISPLAY ;显示加号MOV A,R3ADD A,R4DA AMOV R3,A ;相加结果放入R6ANL A,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果的高位放入R6LCALL L;显示缓存区设置LCALL DELAY2;延时一秒后显示LCALL DISPLAYLJMP KEYSUB1:LCALL BUFFER ;显示减数和被减数MOV 43H,#40HLCALL DISPLAY ;显示减号MOV A,R3CLR CY ;CY清零SUBB A,R4 ;做减法PUSH ARLC A ;带进位循环左移,最高位放入CYJC F ;判断最高位,若为1则跳转到负数ZHENG: POP AMOV R4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INC AMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L ;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV 43H,#99HLCALL DISPLAY ;显示乘号MOV A,R3MOV B,R4MUL AB ;结果放入AB,A中是低8位,B中是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B ;结果个位放入R7MOV R3,A ;结果的十位放入R6LCALL LLCALL DELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数和被除数MOV 43H,#62HLCALL DISPLAY ;显示除号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,R3MOVC A,@A+DPTRMOV 43H,A ;显示商MOV 42H,#00HMOV 44H,#00HLCALL DELAY2 ;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV 41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,@A+DPTRMOV 42H,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:MOV A,R4MOVC A,@A+DPTRMOV 41H,A ;R4对应的段码MOV A,R3MOVC A,@A+DPTRMOV 42H,A ;R3对应的段码MOV 43H,#00HMOV 44H,#00HRETDELAY1: ;普通延时MOV R1,#20HDS1:MOV R2,#0FFHDS2:DJNZ R2,DS2DJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOV TMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLR TR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH 09H 0EAH 6BH ;段码表DB 59H 73H 0F3H 0BHDB 0FBH 7BH 00H 0DBHDB 0F1H 0B2H 0E9H 0F2HDB 0D2H 40H实验结果及分析按键1:8+2= 结果:10按键2:8-2= 结果: 6按键3:8*2= 结果:16按键4:8/2= 结果:4从上面的结果可以看出,本次实验基本完成了实验要求。

实验六 键盘接口实验

实验六 键盘接口实验

实验六键盘接口实验姓名:专业:通信工程学号:一、实验目的1.掌握Keil C51软件与Proteus软件联合仿真调试的方法;2.掌握单片机的键盘接口电路;3.掌握单片机键盘扫描原理;4.掌握键盘去抖原理及处理方法。

二、实验仪器与设备1.微机一台2.Keil C51集成开发环境3.Proteus仿真软件三、实验内容1.用Proteus设计一矩阵键盘接口电路。

要求利用P1口接一4*4矩阵键盘。

串行口通过一74LS164接一共阴极数码管。

2.用线反转法编写矩阵键盘识别程序,要求采用中断方式;无按键按下时,数码管循环写“8”,有按键按下时产生中断并将按键的键值0~F通过串行口输出,在数码管上显示3秒后返回;返回后,数码管继续循环画“8”。

3.将P1口矩阵键盘改为8个独立键盘,采用中断扫描方式,key0~key6显示键值,key7每按一次数码管加一。

四、实验步骤1.用Proteus设计键盘接口电路;2.在Keil C51中编写键盘识别程序,编译通过后,与Proteus联合调试;3.按动任意键,观察键值是否正确。

五、实验程序一、矩阵键盘#include<reg51.h>#define uint unsigned int#define uchar unsigned charUchar code table0[]={0x7e,0xbe,0xde,0xee,0x7d,0xbd,0xdd,0xed,0x7b,0xbb,0xdb,0xeb,0x77,0xb7,0xd7,0xe7 };uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };uchar code table2[]={0x01,0x21,0x61,0x65,0x6d,0x7d,0x7d,0x7f,0x00};uchar temp,key,m,num,i;void delay(uint c){ uint a,b;for(;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}void main(){ SCON=0x00; TI=0; EA=1;EX0=1; IT0=1; P1=0xf0;while(1){ SBUF=table2[m++];while(TI==0); delay(100); TI=0;if(m==9) {m=0;} }}void INT_0() interrupt 0{ EX0=0; delay(20); EX0=1;P1=0xf0;if(P1!=0xf0){ delay(20);if(P1!=0xf0){ temp=P1; P1=0x0f; key=temp|P1;for(i=0;i<16;i++)if(key==table0[i]) { num=i;break;}SBUF=table1[num]; delay(300);while(TI==0); TI=0;P1=0xf0;}}}XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC11nFC21nFC3220uR110kSRG8RC1/->&1D1324561081112913U274LS164012345678C9DA EBFU3AND_4二、独立键盘 #include<reg51.h>#define uint unsigned int #define uchar unsigned charuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar i,m=-1,key=0; bit flag=0;void delay(uchar c) { uchar a,b; for(;c>0;c--)for(a=142;a>0;a--) for(b=2;b>0;b--); }void main() { TMOD=0x01;TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1;P1=0xff; SCON=0x00; key=8; while(1) { switch(key) { case 8:SBUF=0X00;while(TI==0);TI=0;delay(200);break; case 0:SBUF=0x3f;while(TI==0);TI=0;delay(200);break; case 1:SBUF=0x06;while(TI==0);TI=0;delay(200);break;case 2:SBUF=0x5b;while(TI==0);TI=0;delay(200);break;case 3:SBUF=0x4f;while(TI==0);TI=0;delay(200);break;case 4:SBUF=0x66;while(TI==0);TI=0;delay(200);break;case 5:SBUF=0x6d;while(TI==0);TI=0;delay(200);break;case 6:SBUF=0x7d;while(TI==0);TI=0;delay(200);break;case 7:SBUF=table[m];while(TI==0);TI=0;if(m==9) m=0;delay(200);break;}}}void time0() interrupt 1{ if(P1!=0xff&&flag==0){if(P1==0xfe) {key=0;flag=1;}if(P1==0xfd) {key=1;flag=1;}if(P1==0xfb) {key=2;flag=1;}if(P1==0xf7) {key=3;flag=1;}if(P1==0xef) {key=4;flag=1;}if(P1==0xdf) {key=5;flag=1;}if(P1==0xbf) {key=6;flag=1;}if(P1==0x7f) { key=7;flag=1;m++;}}if(P1==0xff) flag=0;TH0=(65536-10000)/256;TL0=(65536-10000)%256;}XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC11nFC21nFC3220uR110kSRG8RC1/->&1D1324561081112913U274LS16401234567。

键盘接口实验

键盘接口实验
① CPU判断是否有键按下; CPU判断是否有键按下 判断是否有键按下; ② 确定按下的是哪一个键; 确定按下的是哪一个键; ③ 将信息转换为计算机能识别的代码
一般单片机系统中采用非编码键盘, 一般单片机系统中采用非编码键盘,非编码键盘是由软件 来识别键盘上的闭合键(包括键代码的产生、去抖等) 来识别键盘上的闭合键(包括键代码的产生、去抖等), 它具有结构简单,使用灵活等特点, 它具有结构简单,使用灵活等特点,因此被广泛应用于单 片机系统。 片机系统。
二、键盘工作原理 概念
键盘是由若干按键组成的开关矩阵, 键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输 入设备,用户可以通过键盘向计算机输入指令、地址和数据。 入设备,用户可以通过键盘向计算机输入指令、地址和数据。
按键的分类
编码键盘 非编码键盘
键盘输入信息的主要过程: 键盘输入信息的主要过程:
有按键信号? 有按键信号? Y 延时等待10ms 延时等待
N
仍有按键信号? N 仍有按键信号? Y 键盘处理 按键释放? 按键释放? Y N
消除抖动的程序设计流程图
三、矩阵式键盘的结构及原理 1、矩阵式键盘的结构
矩阵式键盘由行线和列线组成,按键位于行、 矩阵式键盘由行线和列线组成,按键位于行、列线的交 叉点上, DP-51S 叉点上 , 在 DP-51S 中 , 是由 8 列一行组成的 8×1 的 8 是由8 列一行组成的8 个键的行列式键盘, 个键的行列式键盘 , 即 1 根行线 KEY_REC 和 8 根列线 根行线KEY_REC KEY_REC和 KD_Q0~KD_Q7组成的8键键盘。 KD_Q0~KD_Q7组成的8键键盘。
键盘接口功能 判断有无键按下; 判断有无键按下; 消除键的抖动; 消除键的抖动; 求按下键的键号。 求按下键的键号。 非编码键盘

单片机实验五 按键实验

单片机实验五 按键实验

实验五:按键实验一、实验要求实验目的:熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;熟悉和掌握矩阵式减半的行扫描法和行反转法两种键盘扫描识别方法;掌握键盘延时抖动的消除方法,掌握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设计说明:单片机不断查询各列电平,当某列中有某行的电平被置零,则跳转到改行所在语句,在数码管上显示被按键的数字。

单片机实验--键盘扫描

单片机实验--键盘扫描

实验4 键盘实验一、实验目的:1.掌握8255A编程原理。

2.了解键盘电路的工作原理。

3.掌握键盘接口电路的编程方法。

二、实验设备:CPU挂箱、8031CPU模块三、实验原理:1.识别键的闭合,通常采用行扫描法和行反转法。

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

本实验例程采用的是行反转法。

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

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

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

2.程序设计时,要学会灵活地对8255A的各端口进行方式设置。

3.程序设计时,可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。

实验题目利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。

四、实验步骤:将键盘RL10~RL17接8255A的PB0~PB7;KA10~KA12接8255A的PA0~PA2;PC0~PC7接发光二极管的L1~L8;8255A芯片的片选信号8255CS接CS0。

五、实验电路:六、程序框图7.程序清单八、附:8251/8255扩展模块该模块由8251可编程串行口电路和8255可编程并行口电路两部分组成,其电源、数据总线、地址总线和片选信号均由接口挂箱上的接口插座提供。

一、8251可编程串行口电路(1)8251可编程串行接口芯片引脚及功能8251A是通用同步/异步收发器USART,适合作异步起止式数据格式和同步面向字符数据格式的接口,其功能很强。

单片机实验报告实验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. 掌握行列式键盘输入的编程方法;
2. 掌握定时扫描键输入程序的编程方法。

二、实验原理
1. 单片机与键盘的接口电路;
2. 键盘的工作原理。

三、实验内容与要求
1.调试实验讲义中程序3—键盘程序;
2.修改程序3,满足以下要求:
①将显示子程序和键输入程序改为定时扫描方式;
②加上秒表程序,程序运行后,达到以下要求:
●显示“Stop”
●按KL1键,清秒表,显示“0 00.00;
●按KL2键,运行秒表,“显示:“* **.**”;
●按KL3键,秒表停;
●按KL4键,显示“Stop”。

四、上机操作要求
1. 完成实验内容,形成改写后的程序,以DPJ4为文件名,保存于自己的文件夹中。

2. . 思考题
①键盘扫描显示程序由哪几部分组成?每一部分实现的功能是什么?
②8051定时器方式和计数器方式有什么区别?
③设f osc=12MHz,8051定时器0的方式0、方式1、方式2的最大定时时间间隔为多少?
④时间溢出与时间间隔有什么区别?
五、报告要求
(1)对实验修改部分写出基本的流程图或算法;(2)附上修改程序的代码;
(3)完成本次实验布置的思考题。

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

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

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

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

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

独立式键盘是每个按键单独占用一根 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();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。

键盘接口实验

键盘接口实验

实验报告
实验课程名称MCS-51系列单片机系统
实验项目名称键盘接口实验
年级
专业
姓名
学号
实验时间:2016 年 5月 14 日
一、实验目的
1.熟悉单片机通过行列键盘的接口方法。

2. 掌握键盘扫描及处理程序的编程方法和调试方法。

二、实验原理
通过keil软件编程程序运行后,根据按下的数字键,数码管上应能显示相应数字。

如按下1,数码管上就显示出1.按下2,数码管显示2.
键输入程序的功能有以下的四个方面:(1)判别键盘上有无键闭合
(2)去除键的机械抖动。

(3)判别闭合键的键号。

公式为:
N=行首建号+列号(4)使CPU对键的一次闭合作一次处理。

采用的方法为等待闭合键释放以后再做处理。

三、实验步骤
1、进入Keil组合软件的操作环境。

2、在Keil C51组合软件环境中, 根据实验硬件电路编辑源程序并对源文件进行
编译,生成目标代码;
3.运行、调试程序和结果检查
⑴采用单步,设置断点等方法,观察程序走向是否正确;
⑵连续运行程序,依次按动数字键观察数码管的显示是否相符。

四、仿真结果
1.当按下矩阵键盘的8号键时,七段数码管的显示为3.如下图所示。

2.当按下矩阵键盘的A号键时,数码管显示的为9。

如图所示:
3.当按下矩阵的F按键时,数码管显示的为d。

如图所示:
硬件调试:
五、实验总结
通过这次的实验,学会了许多东西。

做这次的实验,自己对矩阵键盘的使用更加的了解,通过使用矩阵键盘,可以节省较多的单片机I/O的使用。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机中键盘输入接口的设计与应用案例

单片机中键盘输入接口的设计与应用案例

单片机中键盘输入接口的设计与应用案例键盘输入接口在单片机中具有重要的作用,它可以实现用户与单片机之间的信息交互。

在本文中,我们将探讨单片机中键盘输入接口的设计原理,并给出一个应用案例来展示其实际应用。

一、设计原理单片机中实现键盘输入接口的基本原理是通过矩阵键盘扫描的方式进行的。

具体步骤如下:1. 连接矩阵键盘首先,我们需要将矩阵键盘与单片机连接起来。

矩阵键盘由多个按钮组成,每个按钮有一个独特的按键码。

常见的矩阵键盘有4×4和4×3两种类型。

2. 设置引脚模式接下来,我们需要设置单片机的引脚模式,将指定的引脚配置为输入模式。

这样,我们就可以通过这些引脚来读取矩阵键盘上的按键信息。

3. 扫描按键在单片机程序中,我们需要编写代码来扫描键盘。

扫描的步骤是逐行扫描矩阵键盘,通过拉低某一行的引脚,然后读取对应列的引脚状态。

如果发现某个按键被按下,则对应的引脚状态为低电平。

4. 处理按键事件一旦检测到按键按下事件,我们就可以根据按键的按键码进行相应的处理。

这可能包括显示按键信息、执行特定的功能等。

二、应用案例为了更好地理解键盘输入接口的设计与应用,我们以一个简单的密码锁系统为例来说明。

1. 系统设计这个密码锁系统需要用户通过按下特定的按键组合来输入密码,一旦输入正确,系统会开启门锁。

2. 硬件设计我们可以选择4×4矩阵键盘作为输入设备,并连接到单片机的引脚上。

3. 程序设计我们需要编写相应的程序来实现密码锁系统的功能。

程序的主要逻辑如下:(1)初始化引脚:将矩阵键盘对应的引脚设置为输入模式。

(2)密码输入:通过扫描矩阵键盘,读取按键信息。

根据按键码将按键信息存储到一个缓冲区中。

(3)密码验证:当用户输入完整的密码后,我们需要对其进行验证。

如果密码正确,则开启门锁;否则提示密码错误。

(4)功能实现:在密码验证通过后,我们可以添加一些额外的功能,例如计时器、报警器等。

4. 系统测试完成程序编写后,我们需要将代码烧录到单片机中,并测试系统的功能。

单片机实验五 -键盘实验

单片机实验五 -键盘实验

电子信息工程系实验报告课程名称:单片机与接口技术实验项目名称:键盘实验 实验时间: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。

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

一般采用延时的方法。

实验9 键盘接口实验

实验9 键盘接口实验

GUIZHOU UNIVERSITY实验报告实验课程名称C51单片机实验实验项目名称键盘接口实验年级2008 级专业电子信息科学与技术学生姓名郎子龙学号080712110069指导教师签字实验时间:2011年6月6日实验九键盘接口实验(设计性实验)一、实验目的:⑴熟悉单片机通过行列键盘的接口方法⑵掌握键盘扫描及处理程序的编程方法和调试方法二、实验内容:程序运行后,根据按下的数字键,数码管上应能显示相应数字。

三、实验步骤:1、实验硬件电路2、进入Keil C51组合软件的操作环境3、在Keil C51组合软件环境中, 根据实验硬件电路编辑源程序并对源文件进行编译,生成目标代码;4、运行、调试程序和结果检查⑴采用单步,设置断点等方法,观察程序走向是否正确;⑵连续运行程序,依次按动数字键观察LED的显示是否相符。

5、根据要求编写程序如下:#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar dis_buf; //显示缓存uchar temp;uchar key; //键顺序void delay0(uchar x); //x*0.14MSunsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C ,~0x39,~0x5E,~0x79,~0x71};/*延时子程序*/void delay(uchar x){ uchar j;while((x--)!=0){ for(j=0;j<125;j++){;}}}/* 键扫描子程序(4*4 的矩阵) P1.4 P1.5 P1.6 P1.7为行,P1.0 P1.1 P1.2 P1.3为列*/void keyscan(void){ temp = 0;P1=0xF0; //高四位输入行为高电平列为低电平delay(1);temp=P1; //读P1口temp=temp&0xF0; //屏蔽低四位temp=~((temp>>4)|0xF0);if(temp==1) // p1.4 被拉低key=0;else if(temp==2) // p1.5 被拉低key=1;else if(temp==4) // p1.6 被拉低key=2;else if(temp==8) // p1.7 被拉低key=3;elsekey=16;P1=0x0F; //低四位输入列为高电平行为低电平delay(1);temp=P1; //读P1口temp=temp&0x0F;temp=~(temp|0xF0);if(temp==1) // p1.0 被拉低key=key+0;else if(temp==2) // p1.1 被拉低key=key+4;else if(temp==4) // p1.2 被拉低key=key+8;else if(temp==8) // p1.3 被拉低key=key+12;elsekey=16;dis_buf = key; //键值入显示缓存dis_buf = dis_buf & 0x0f;}/*判断键是否按下*/void keydown(void){P1=0xF0;if(P1!=0xF0) //判断按键是否按下如果按钮按下会拉低P1其中的一个端口{keyscan(); //调用按键扫描程序}}/* 主程序*/main(){P0=0xFF; //置P0口P1=0xFF; //置P1口delay(10); //延时while(1){keydown(); //调用按键判断检测程序P0 = LED7Code[dis_buf%16]&0xff;delay(10);}}四、编译运行仿真结果如下:五、实验总结1、将键盘接口程序加上注释语句,并说出其功能。

单片机与矩阵键盘接口电路设计实验报告

单片机与矩阵键盘接口电路设计实验报告

单片机与矩阵键盘接口电路设计实验报告姓名:林蔼龄学号:1060601007班级:10级物理系电子信息工程A班单片机与矩阵键盘接口电路设计实验报告一:实验内容使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4位的4条端口线定义为列线,形成4*4键盘,可以配置16个按键,将单片机P2口与七段数码管连接,当按下矩阵键盘任意键时,数码管显示该键所在的键号。

二:电路图三:程序流程图四:程序org 0000hljmp mainmain:mov p1,#0fh;列线输出0,行线设为输入mov a,p1;读P1口anl a,#0fh;屏蔽高4位,留下行线状态cjne a,#0fh,look;有按键按下,转lookret;无按键按下,返回主程序look:lcall dlay10;延时10msmov a,p1;读P1口anl a,#0fh;屏蔽高4位,留下行线状态cjne a,#0fh,rank ;确认键已按稳,转RANK ljmp main;是抖动,未按稳,重新扫描rank:mov r2,#00h ;窜键标志寄存器请0mov r3,#04h ;查列次数mov r4,#0f7h ;列扫描字初值mov r5,#0ffh ;列号处值rloop1:inc r5 ;开始列扫描,列号加1mov a,r4 ;列扫描字送Arl a ;列扫描字左移一位mov r4,a ;暂存列扫描字mov p1,a ;送出列扫描字mov a,p1 ;读P1口anl a,#0fh ;屏蔽高4位,留下行线状态cjne a,#0fh,next1 ;当前列有键按下,转next1rloop2:djnz r3,rloop1 ;列扫描未完,继续sjmp line ;列扫描完,转行扫描next1:inc r2 ;窜键标志加1mov 20h,r5 ;暂存有按键的列号sjmp rloop2 ;继续列扫描line:cjne r2,#01h,main ;若已窜键,转main,重新扫描mov r2,#00h ;开始查行,窜键标志寄存器清0mov r3,#04h ;行扫描次数mov r6,#0ffh ;行号初值mov p1,#0fh ;列线送0,准备读行线mov a,p1 ;读P1口,获取行线状态lloop1:inc r6 ;行号加1rrc a ;从第0行开始,判断有无按键jnc next2 ;本行有按键,转next2lloop2:djnz r3,lloop1 ;无按键,继续查下一行sjmp next3 ;查完,转next3next2:inc r2 ;窜键标志加1mov 21h,r6 ;暂存有按键的行号sjmp lloop2 ;继续行扫描next3:cjne r2,#01h,main ;若窜键,转main,重新扫描gainky:mov a,21h ;无窜键,取出行号mov b,#04h ;键盘列数mul ab ;行号*键盘列数add a,20h ;乘积与列号相加,得到键号mov b,#03h;为执行键处理程序做准备mul ab ;键号*3mov dptr,#ptab ;键处理程序表首地址送DPTRjmp @a+dptr ;散转至与键号对应的键处理程序ptab:ljmp prog0;键处理程序表ljmp prog1ljmp prog2ljmp prog3ljmp prog4ljmp prog5ljmp prog6ljmp prog7ljmp prog8ljmp prog9ljmp prog10ljmp prog11ljmp prog12ljmp prog13ljmp prog14ljmp prog15prog0:mov p2,#3fhretprog1:mov p2,#06hretprog2:mov p2,#5bhretprog3:mov p2,#4fhretprog4:mov p2,#66hretprog5:mov p2,#6dhretprog6:mov p2,#7dhretprog7:mov p2,#07hretprog8:mov p2,#7fhretprog9:mov p2,#6fhretprog10:mov p2,#77hretprog11:mov p2,#7chretprog12:mov p2,#39hretprog13:mov p2,#5ehretprog14:mov p2,#79hretprog15:mov p2,#71hretdlay10:mov r0,#100 ;约10ms延时dlay1:mov r1,#50dlay2:djnz r1,dlay2djnz r0,dlay1retend五:实验结果当矩阵键盘的3号键被按下时,P2口的七段数码管显示的数据为3.如下图1所以:图1当矩阵键盘的A号键被按下时,P2口的七段数码管显示的数据为A.如下图2所以:图2当矩阵键盘的D号键被按下时,P2口的七段数码管显示的数据为d.如下图3所以:图3当矩阵键盘的F号键被按下时,P2口的七段数码管显示的数据为F.如下图4所以:图4。

单片机实验键盘显示

单片机实验键盘显示

实验七8255 键盘显示实验【实验目的】1.熟悉8255与单片机的接线和I/O编程方法;2.熟悉数码管的显示原理与编程;3.熟悉8255扫描键盘与读取键值的编程。

【实验内容】使用单片机、8255模块和数码管显示电路,编程实现在数码管上从右至左显示0-5,当有键按下时在数码管最右1位显示按键的键码。

【实验原理与设计】1.硬件电路设计本次实验使用实验箱上的E1、E3和F6模块电路。

如图7.1所示。

E1E3F6图7.1 实验箱(1)8255模块(E3区)PA口作为位扫描口(键扫描口),PB口输出字形码,PC口作为键值读入口,与数码管显示电路和矩阵键盘模块电路(F6区)相应接口连接,8255的数据总线D0-D7、读(/RD)、写(/WR)、端口选择A0、A1和片选/CS已和单片机接好。

各端口地址如下:PA口:0FF28H;PB口:0FF29H;PC口:0FF2AH;控制口:0FF2BH单片机与8255模块电路连接图如图7.2所示。

图7.2 单片机与8255的电路连接(2)数码管显示电路(F6区)实验箱上提供的数码管显示电路如图7.3所示。

实验时需将数码管显示电路中的JLED与8255的PB口相连,JS与8255的PA口相连,JLED和JS分别位于E6区,同时E6区SW3、SW4和SW4红色拨码开关打在“OFF”位置。

图7.3数码管模块连接电路(3)矩阵键盘模块电路(F6区)实验箱上提供的矩阵键盘模块电路如图7.4所示,实验时将该电路中的JR(位于E6区)与8255的PC口相连。

图7.4矩阵键盘模块电路2.程序设计根据实验内容程序主流程图如图7.5所示。

图7.5 主程序流程图(1)初始化MOV A, #81H ;PA口(位扫描口)和PB口(字形码)做输出,PC口(键扫描口)做输入MOV DPTR, #0FF2BH ;实验箱接线决定8255的控制口地址为FF2BHMOVX @DPTR, A ;将命令字82H送给8255控制口确定各口工作方式(2)显示数据子程序显示数据子程序流程图如图7.6所示。

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

实验六键盘接口实验
一、实验目的
1、掌握Keil C51软件与Protues软件联合仿真调试的方法;
2、掌握单片机的键盘接口电路;
3、掌握单片机的键盘扫描原理;
4、掌握键盘的去抖原理及处理方法。

二、实验仪器与设备
1、微机一台
2、Keil C51集成开发环境
3、Protues仿真软件
三、实验内容
1、用Protues设计一矩阵键盘接口电路。

要求利用P1口接一4×4矩阵键盘。

串行口通过一74LS164接一共阴极数码管。

用线反转法编写矩阵键盘识别程序,用中断方式,并将按键的键值0-F通过串行口输出,显示在数码管上。

2、将P1口矩阵键盘改成8个独立按键,重新编写识别和显示程序。

四、实验说明
矩阵键盘识别一般包括以下内容:
⑴判别有无键按下。

⑵键盘扫描取得闭合键的行、列号。

⑶用计算法或查表发的到键值;
⑷判断闭合键是否释放,如没释放则继续等待。

⑸将闭合键的键值保存,同时转去执行该闭合键的功能。

五、实验步骤
1、用Protues设计键盘接口电路;
2、在Keil C51中编写键盘识别程序,编译通过后,与Protues联合调试;
3、按动任意键,观察键值是否能正确显示。

六、实验电路仿真图
矩阵键盘电路图见附录1。

独立按键电路图见附录2。

七、实验程序
实验程序见附录3、4。

八、实验总结
1、矩阵键盘常用的检测方法有线反转法、逐行扫描法。

线反转法较简单且高效。

在矩阵键盘的列线上接一与门,利用中断方式查询按键,可提高CPU的运行效率。

2、注意用线反转法扫描按键时,得到的键值不要再赋给temp,最好再设一新变量接收键值,否则再按下按键显示数字的过程中,再按按键会出现乱码。

3、学会常用与门、与非门的使用方法。

附录1:矩阵键盘实验电路图
附录2:独立按键实验电路图
附录3:矩阵键盘实验程序
#include <REG51.H>
char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
char code KEY_TABLE[]={0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
char code tab1[10]={0xfe,0xde,0x9e,0x9a,
0x92,0x82,0x82,0x80,0xff};
char temp,num,i,m;
int t;
bit flag=0;
void Delay_ms(t)
{
int i;
for(;t>0;t--)
for(i=0;i<124;i++);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1; PT0=1; SCON=0;
EX0=1; IT0=1; EA=1;
P1=0xf0;
while(1)
{
SBUF=tab1[m];
while(TI==0); TI=0;
Delay_ms(400); //500ms
m++;
if(m==9) m=0;
}
}
void int_1() interrupt 0
{
P1=0xf0;
if(P1!=0xf0)
{
Delay_ms(10);
if(P1!=0xf0)
{
temp=P1;
P1=0x0f;
temp=temp|P1;
for(i=0;i<16;i++)
{
if(temp==KEY_TABLE[i])
{
temp=i; break;
}
}
SBUF=LED_TAB[temp];
while(TI==0); TI=0; TR0=1;
while(flag==0); flag=0;
} } P1=0xf0;
}
void timer_0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t++;
if(t==300)
{
t=0; flag=1; TR0=0;
}
}
附录4:独立按键实验
#include <REG51.H>
char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
char code KEY_TABLE2[]={ 0xfe,0xfd,0xfb,0x f7, 0xef,0xdf,0xbf,0x7f,} ;
char code tab1[10]={0xfe,0xde,0x9e,0x9a,0x 92, 0x82,0x82,0x80,0xff};
char temp,i,m;
int t;
bit ff;
bit flag=0;
void Delay_ms(t)
{
int i;
for(;t>0;t--)
for(i=0;i<124;i++);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1; SCON=0; EX0=1;
IT0=1; PT0=1; EA=1;
P1=0xff;
while(1)
{
ff=IE0;
SBUF=tab1[m];
while(TI==0); TI=0;
Delay_ms(400);
m++;
if(m==9) m=0;
}
}
void timer_0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t++;
ff=IE0;
if(t==300)
{
t=0;
flag=1;
}
}
void int_0() interrupt 0
{
EX0=0;
Delay_ms(10);
temp=P1;
if(temp!=0xff)
{
for(i=0;i<8;i++)
{
if(temp==KEY_TABLE2[i])
{
temp=i; break;
}
}
SBUF=LED_TAB[temp];
while(TI==0); TI=0;
TR0=1; while(flag==0);
flag=0; TR0=0;
P1=0xff; EX0=1;
}
}。

相关文档
最新文档