单片机 键盘接口实验

合集下载

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

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

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

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

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

二、接口设计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. 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;
}
}。

相关文档
最新文档