键盘接口实验

合集下载

键盘接口实验

键盘接口实验

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

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

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

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

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

3.将P1口矩阵键盘改为8个独立按键(用中断方式设计),用定式扫描方式,每10ms扫描一次,其中key7每按动一次数码管显示的数字加1(从0开始),其他按键显示按键编号。

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

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

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

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

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

六、实验电路仿真图矩阵键盘独立按键七、实验程序矩阵键盘#include<reg51.h>#define uchar unsigned char#define uint unsigned intuint m=0;count=0;bit flag=0;uchar code key_table[]={0xee,0xde,0xbe,0x7e ,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0 xbb,0x7b,0xe7,0xd7,0xb7,0x77}; uchar code table0[]={0x3f,0x06,0x5b,0x4f,0x 66,0x6d,0x7d,0x07,0x7f,0x6f,0x77 ,0x7c,0x39,0x5e,0x79,0x71};uchar code table[]={0x00,0x01,0x21,0x61,0x6 5,0x6d,0x7d,0x7d,0x7f};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(){ P1=0xf0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;EX0=1;IT0=1;ET0=1;TR0=1;SCON=0x00;IP=0x02;for(m=0;m<9;m++){SBUF=table[m];delay(200);while(TI==0);TI=0;}}void INT_0() interrupt 0 {uchar t,n,i,j;P1=0xf0;if(P1!=0xf0){delay(20);if(P1!=0xf0){t=P1;P1=0x0f;j=t|P1;for(i=0;i<16;i++)if(j==key_table[i]){n=i;break;}SBUF=table0[n];while(TI==0);TI=0;}while(flag==0);P1=0xf0;}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count>=60){count=0;flag=1;}}2.独立按键#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x00,0x01,0x21,0x61,0x6 5,0x6d,0x7d,0x7d,0x7f};uchar code table0[]={0x3f,0x06,0x5b,0x4f,0x 66,0x6d,0x7d,0x07,0x7f,0x6f,0x77 ,0x7c,0x39,0x5e,0x79,0x71};uint i=0,k=0,temp,m;bit flag=0;void delay(uint c){uint a,b;for(;c>0;c--)for(a=30;a>0;a--)for(b=2;b>0;b--);}void main(){ uint j;ET0=1;TR0=1;TMOD=0X01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;for(m=0;m<9;m++){SBUF=table[m];delay(200);while(TI==0);TI=0;}for(j=0;j<100;j++){if(TF0==1){TH0=(65536-10000)/256;TL0=(65536-10000)%256;TF0=0;if(P1!=0xff&&(flag==0)){temp=P1;flag=1;switch(temp){case 0xfe: SBUF=table0[0];while(TI==0);TI=0;delay(500);break;case 0xfd: SBUF=table0[1];while(TI==0);TI=0;delay(500);break;case 0xfb: SBUF=table0[2];while(TI==0);TI=0;delay(500);break;case 0xf7:SBUF=table0[3];while(TI==0);TI=0;delay(500);break;case 0xef:SBUF=table0[4];while(TI==0);TI=0;delay(500);break;case 0xdf:SBUF=table0[5];while(TI==0);TI=0;delay(500);break;case 0xbf:SBUF=table0[6];while(TI==0);TI=0;delay(500);break;case0x7f:SBUF=table0[i++];while(!TI==0)TI=0;delay(500);break;}}else if(P1==0xff) flag=0;}delay(10);}}八、实验总结1、由于对定时器扫描方式不熟悉,一开始把定时器扫描方式写成了查询方式。

实验5(8255并行接口键盘及显示实验)

实验5(8255并行接口键盘及显示实验)

8255接口键盘及显示综合设计实验(曹建文2009年10月10日)一、实验目的1、掌握8255的工作方式及应用编程。

2、自行设计、制作和连接基于8255并行接口的键盘及显示实验电路。

3、实现扫描式矩阵键盘的功能和作用。

二、实验设备PC机1台,TD-PIT实验台1台,实验元器件若干。

三、实验内容1、使用8255实现键盘按键和七段LED数码显示管显示功能。

2、根据实验要求自行设计实验线路图,制作和焊接实验电路板和实验元器件。

3、按照实验要求和实验电路图编写实验程序,使得按下不同的数字按键后数码管显示相应的数字值(4位数码管)。

4、按照实验要求设计和编写实验程序,实现普通计算器的加/减法功能。

四、实验原理1、8255结构及原理并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。

CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

8255的内部结构及引脚如图-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图-2所示。

图-1:8255内部结构及引脚图(a)工作方式控制字(b)c口按位置位/复位控制字图-2:8255控制字格式(1)8255的内部结构如图-1所示,8255的内部结构由以下4个部分组成:(1)输入/输出端口A、B、C 。

这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。

A口和B口是一个独立的8位I/O口。

C口可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。

(2)A组和B组控制电路。

这是两组根据CPU命令控制8255工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255的工作方式,也可以根据编程命令来对C口的指定位进行置位/复位的操作。

单片机 键盘接口实验

单片机 键盘接口实验

实验六键盘接口实验一、实验目的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); //500msm++;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;}}。

接口实验报告——键盘

接口实验报告——键盘
}
void KEY_Init(void)
{ //行L4为输出
Key = 0;
IO0DIR = (IO0DIR & (~ROW1) & (~ROW2)& (~ROW3)& (~ROW4) & (~ROW5)& (~ROW6))| COL1 | COL2 | COL3 | COL4 | COL5 | COL6;
VICVectCntl0 = 0x2E;
VICVectAddr0 = (uint32)KEY_IRQ;
VICIntEnable = VICIntEnable | 0x4000;
}
int main (void) //读取键值,根据键盘值控制灯亮次数
{
uint32 i,j;
if((IO0PIN & ROW5)==0) key=23;
if((IO0PIN & ROW6)==0) key=24;
//扫描第五列
IO0CLR = COL5;
IO0SET = COL2 | COL3 | COL4 | COL1 | COL6;
if((IO0PIN & ROW1)==0) key=25;
for(j=0;j<1000000;j++);
}
Key=0;
}
}
return 0;
}
if((IO0PIN & ROW6)==0) key=12;
//扫描第三列
IO0CLR = COL3;
IO0SET = COL2 | COL1 | COL4 | COL5 | COL6;
if((IO0PIN & ROW1)==0) key=13;

实验四 8255键盘及显示接口实验

实验四  8255键盘及显示接口实验

实验四 8255键盘及显示接口实验一、实验目的了解键盘扫描及数码显示的基本原理,熟悉8255的编程/二、实验设备PC机一台,TD-PITE实验装置一套。

三、实验内容将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。

键盘采用4×4键盘,每个数码管显示值可为0-F共16个数,。

实验具体内容如下:将键盘进行编号,记作0—F,当按下一个键时,将该键对应的编号在下一个数码管上显示出来,再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。

实验内容:将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。

键盘采用4×4键盘,每个数码管显示值可为0~F共16个数。

实验具体内容如下:将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。

8255键盘及显示实验参考接线图如图1所示。

键盘及数码管显示单元电路图如图4-1 所示。

图4-2 8255 键盘扫描及数码管显示实验线路图功能描述: 键盘及数码管显示实验,通过8255控制。

8255的B口控制数码管的段显示,A口控制键盘列扫描及数码管的位驱动,C口控制键盘的行扫描。

按下按键,该按键对应的位置将按顺序显示在数码管上。

实验程序:MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604HMY8255_CON EQU 0606HSSTACK SEGMENT STACKDW 16 DUP(?)SSTACK ENDSDATA SEGMENTDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,3000HMOV AL,00HMOV [SI],AL ;清显示缓冲MOV [SI+1],ALMOV [SI+2],ALMOV [SI+3],ALMOV [SI+4],ALMOV [SI+5],ALMOV DI,3005HMOV DX,MY8255_CON ;写8255控制字MOV AL,81HOUT DX,ALBEGIN: CALL DIS ;调用显示子程序CALL CLEAR ;清屏CALL CCSCAN ;扫描JNZ INK1JMP BEGININK1: CALL DISCALL DALLYCALL DALLYCALL CLEARCALL CCSCANJNZ INK2 ;有键按下,转到INK2JMP BEGININK2: MOV CH,0FEHMOV CL,00HCOLUM: MOV AL,CHMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXL1: TEST AL,01H ;is L1?JNZ L2MOV AL,00H ;L1JMP KCODEL2: TEST AL,02H ;is L2?JNZ L3MOV AL,04H ;L2JMP KCODEL3: TEST AL,04H ;is L3?JNZ L4MOV AL,08H ;L3JMP KCODEL4: TEST AL,08H ;is L4?JNZ NEXTMOV AL,0CH ;L4KCODE: ADD AL,CLCALL PUTBUFPUSH AXKON: CALL DISCALL CLEARCALL CCSCANJNZ KONPOP AXNEXT: INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUMKERR: JMP BEGIN CCSCAN: MOV AL,00HMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXNOT ALAND AL,0FHRETCLEAR: MOV DX,MY8255_BMOV AL,00HOUT DX,ALRETDIS: PUSH AXMOV SI,3000HMOV DL,0DFHMOV AL,DLAGAIN: PUSH DXMOV DX,MY8255_AOUT DX,ALMOV AL,[SI]MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,[BX]MOV DX,MY8255_BOUT DX,ALCALL DALLYINC SIPOP DXMOV AL,DLTEST AL,01HJZ OUT1ROR AL,1MOV DL,ALJMP AGAINOUT1: POP AXRETDALLY: PUSH CXMOV CX,0006HT1: MOV AX,009FHT2: DEC AXJNZ T2LOOP T1POP CXRETPUTBUF: MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3005HGOBACK: RETCODE ENDSEND START实验步骤:1. 按图4-1连接线路图;2. 编写实验程序,检查无误后编译、连接并装入系统;3. 运行程序,按下按键,观察数码管的显示,验证程序功能。

实验6:键盘接口系统实验

实验6:键盘接口系统实验

实验六:键盘接口系统实验一、实训目的1.熟悉中断键盘、非编码键盘、矩阵键盘的电路结构特点;2.实现中断键盘、非编码键盘、矩阵键盘的软件编程;二、实验仪器、材料1.微型计算机(PⅣ以上)2.编程、汇编与模拟平台软件Keil uVision33.电子技术专业仿真软件protues运行平台4.单片机实训开发电路板三、实验内容和步骤1.INT01)ORG 0000HSJMP STARTORG 0003HLOOP:JNB P3.2,LOOPLCALL DISPLYRETIORG 0030HST ART:MOV P0,#0C0HMOV R0,#00HMOV P2,#0FHMOV TCON,#00HMOV IE,#81HSJMP $DISPLY: INC R0CJNE R0,#10H,DISPLY1MOV R0,#00HDISPLY1: MOV A,R0ADD A,#03H ;对A进行地址修正MOVC A,@A+PC ;查字形码表MOV P0,A ;2RET ;1DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH// DT AB:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH ;共阴极字型码// DB 77H,7cH,39H,5eH,79H,71H,00H,0f3H,76H,80H,40HEND2.非编码P2.7按键+共阳极4位数码管静态显示(递加)1)系统电路原理图如上2)参考源程序设计如下:ORG 0000HST ART: MOV P0,#0C0HMOV R0,#00HMOV P2,#0FHLOOP: JB P2.7,LOOPLCALL DISPLYSJMP LOOPDISPLY: JNB P2.7,DISPLYINC R0CJNE R0,#10H,DISPLY1MOV R0,#00HDISPLY1: MOV A,R0ADD A,#03H ;对A进行地址修正MOVC A,@A+PC ;查字形码表MOV P0,A ;2RET ;1DT AB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH // DT AB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH ;共阴极字型码// DB 77H,7cH,39H,5eH,79H,71H,00H,0f3H,76H,80H,40HEND3.矩阵4*4键盘+共阳极4位数码管并行显示(递加)2)参考源程序设计如下:KEY_DAT A DATA 30HORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HLOOP: LCALL SCANMOV A,KEY_DAT AMOV DPTR,#T ABMOVC A,@A+DPTRMOV P0,ALCALL DELAJMP LOOPSCAN: PUSH ACCPUSH PSWMOV A,#0FH ;列输出低电平MOV P1,AMOV A,P1 ;读行状态ANL A,#0FH ;屏蔽高4位的列值CJNE A,#0FH,KEYSCAN ;若有键按下,则KEYSCANSJMP EXITKEYSCAN:LCALL DEL ;去抖MOV R2,#7FH ;列值扫描初值MOV R3,#4 ;列数MOV R0,#00H ;列值计数器KEYSM1:MOV A,R2MOV P1,ARR A ;列扫描右移MOV R2,AMOV A,P1ANL A,#0FHCJNE A,#0FH,JSADDINC R0DJNZ R3,KEYSM1 ;未扫描完一遍,则循环EXIT: MOV A,#0FFHSJMP DONEJSADD:JB ACC.0,JSADD1MOV A,#0 ;行值送AAJMP JSADD4JSADD1:JB ACC.1,JSADD2MOV A,#4 ;行值送AAJMP JSADD4JSADD2:JB ACC.2,JSADD3MOV A,#8 ;行值送AAJMP JSADD4JSADD3:JB ACC.3,JSADD4MOV A,#12 ;行值送AJSADD4:ADD A,R0 ;行值+列值送入A,得到键值MOV KEY_DATA,ADONE: POP PSWPOP ACCRETDEL: MOV R6,#50DEL1: MOV R5,#200DJNZ R5,$DJNZ R6,DEL1RETKEY_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07H ;0--8DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH ;9--16// T AB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0--9// DB 77H,7CH,39H,5EH,79H,71H ;A--FT AB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH四、实训总结与分析。

实验四 键盘接口实验

实验四  键盘接口实验

实验四键盘接口实验(报告要求)
一、实验目的
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)完成本次实验布置的思考题。

实验八键盘接口设计

实验八键盘接口设计

实验八键盘接口设计与LED显示一.实验目的1.了解8255A芯片的结构,掌握8255A的初始化编程。

2.掌握通过8255A并行口读写数据的方法。

3.了解非编码键盘结构,学会读取按键的方法。

二.实验仪器及设备1.一套EL-MUT-III单片机/微机实验系统。

2.一台微型计算机3.MCS8086软件一套。

4.若干连接导线。

三.实验内容1.用8255A作为键盘接口,实验原理线路图如图9所示。

这里,要求将8255A芯片的片选8255CS通过连接导线接至系统的片选信号CS0。

8255各端口地址如下:端口A 04A0H 端口B 04A2H端口C 04A4H 控制端口04A6H2.运行示例程序KB.ASM以检查系统硬件。

3.利用实验箱上的8255A可编程并行接口电路(8255 PORT)、矩阵键盘(KEYBOARD UNIT)和4个发光二极管(LED1~LED8中的4个)组成实验硬件电路,编写程序用行扫描法识别矩阵键盘上的闭合键,做到在键盘上每按一个数字键(0~F),用发光二极管将该数字键对应的二进制代码显示出来。

注:发光二极管点亮代表数字键对应的bit位为1。

四.编程提示1.在MCS8086软件平台上编写宏汇编程序与在MASM611环境下编写源程序在格式上稍有区别。

此平台不需要定义数据段、堆栈段,只需要定义代码段。

数据段的内容在程序后面,code ends 之前定义即可。

代码段定义方式为:assume cs:codecode segment publicorg 100hstart:...(程序内容)code endsend start预定义方式与MASM611的预定义方式相同,在assume cs:code之前定义即可。

22。

图2 ‘0-F数字键’在3×8矩阵键盘中的分布位置图3.做键盘检测时要注意加延时去抖动的操作,避免一次闭合被检测为多次按键按下。

4.编写程序时,要根据操作的需要灵活地设置8255A的各端口的工作方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
① 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键键盘。
键盘接口功能 判断有无键按下; 判断有无键按下; 消除键的抖动; 消除键的抖动; 求按下键的键号。 求按下键的键号。 非编码键盘
消除键的抖动 软件上采取的措施是:在检测到有按键按下时,执行 软件上采取的措施是:在检测到有按键按下时, 一个10 ms左右的延时程序后 左右的延时程序后, 一个10 ms左右的延时程序后,再确认该键电平是否 仍保持闭合状态电平,若仍保持闭合状态电平, 仍保持闭合状态电平,若仍保持闭合状态电平,则确 认该键处于闭合状态。同理,在检测到该键释放后, 认该键处于闭合状态。同理,在检测到该键释放后, 也应采用相同的步骤进行确认, 也应采用相同的步骤进行确认,从而可消除抖动的影 响。
键盘扫描子程序完成的功能
1)判断有无键按下。其方法为:行输出为0,读列的 判断有无键按下。其方法为:行输出为0 状态, 若全为1 则说明无键按下; 若不全为1 状态 , 若全为 1 , 则说明无键按下 ; 若不全为 1 , 则说明有键按下。 则说明有键按下。 2) 消除按键抖动的影响。其方法为:在判断有键按下 消除按键抖动的影响。其方法为: 后,用软件延时的方法延时10 ms后,再判断键盘 用软件延时的方法延时10 ms后 状态,如果仍为有键按下状态, 状态,如果仍为有键按下状态,则认为有一个按键 按下,否则当作按键抖动来处理。 按下,否则当作按键抖动来处理。 3)求按键位置。 求按键位置。 4)判别闭合的键是否释放。键闭合一次仅进行一次键 判别闭合的键是否释放。 功能操作。 功能操作。
下次中断时,因标志1 下次中断时 , 因标志 1 为 1 , CPU 再检查标志 2 , 如标 CPU再检查标志 再检查标志2 志2为0说明还未进行按键的识别处理,这时,CPU先 说明还未进行按键的识别处理,这时,CPU先 置位标志2 然后进行按键识别处理, 置位标志2,然后进行按键识别处理,再执行相应的按 键功能子程序,最后,中断返回。如标志2已经为1 键功能子程序,最后,中断返回。如标志2已经为1, 则说明此次按键已做过识别处理,只是还未释放按键。 则说明此次按键已做过识别处理, 只是还未释放按键 。 当按键释放后,在下一次中断服务程序中,标志1 当按键释放后,在下一次中断服务程序中,标志1和标 志2又重新置0,等待下一次按键。 又重新置0 等待下一次按键。
00.00 **.** **.** 23.45
5、键盘的工作方式
对键盘的响应取决于键盘的工作方式, 对键盘的响应取决于键盘的工作方式,键盘的工作方 式应根据实际应用系统中CPU的工作状况而定, 式应根据实际应用系统中CPU的工作状况而定,选取 CPU的工作状况而定 的原则是既要保证CPU能及时响应按键操作, 的原则是既要保证CPU能及时响应按键操作,又不要 CPU能及时响应按键操作 过多占用CPU的工作时间。通常, 过多占用CPU的工作时间。通常,键盘的工作方式有 CPU的工作时间 编程扫描、定时扫描和中断扫描。 编程扫描、定时扫描和中断扫描。
2、矩阵式键盘按键的识别
判断是否有键按下的方法是: 判断是否有键按下的方法是: 检测列线KD_Q ~KD_Q7 逐列送低电平, 检测列线 KD_Q0~KD_Q7 , 逐列送低电平 , 读行 KD_Q0 线 KEY_REC , 若 KEY_REC 为低电平 , 有键按下 , KEY_REC, KEY_REC为低电平 有键按下, 为低电平, 若KEY_REC为高电平,无键按下。 KEY_REC为高电平 无键按下。 为高电平,
3、 判断某位键按下
KD_Q0~KD_Q7逐列送低电平,检查KEY_REC的输 KD_Q0~KD_Q7逐列送低电平,检查KEY_REC的输 逐列送低电平 KEY_REC 入状态, KEY_REC为 入状态,若KEY_REC为“1”,所按键不在此列中, ,所按键不在此列中, 若KEY_REC为“0”,所按键在此列中。 KEY_REC为 ,所按键在此列中。
设置两个标志位:标志1为去抖动标志位,标志2为识别完按键的标志位。 设置两个标志位:标志1为去抖动标志位,标志2为识别完按键的标志位。 初始化:将这两个标志位设置为0。 初始化:将这两个标志位设置为0 执行中断服务程序时,首先判别有无键闭合,若无键闭合,将标志1 执行中断服务程序时,首先判别有无键闭合,若无键闭合,将标志1和标 志2 置0后返回;若有键闭合,先检查标志1 ,当标志1为0 时,说明还未 后返回;若有键闭合,先检查标志1 当标志1 进行去抖动处理,此时置位标志1 并中断返回。 进行去抖动处理,此时置位标志1,并中断返回。由于中断返回后要经过 10 ms后才会再次中断,相当于延时了10 ms,因此,程序无须再延时。 ms后才会再次中断 相当于延时了10 ms,因此,程序无须再延时。 后才会再次中断,
按键输入原理
对于一组键或一个键盘,总有一个接口电路与CPU连接。CPU通过 对于一组键或一个键盘,总有一个接口电路与CPU连接。CPU通过 CPU连接 查询或中断方式了解有无键盘输入,并检查是哪一个键按下, 查询或中断方式了解有无键盘输入,并检查是哪一个键按下,将该 键号送入累加器ACC 然后通过跳转指令转入执行该键的功能程序, ACC, 键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序, 执行完后再返回主程序。 执行完后再返回主程序。
附录程序 (P43 程序3) 程序3 程序运行结果: 程序运行结果: LED显示 DP-51S; LED显示 DP-51S; 按KL1~KL8,LED依次显示数字0~7。 KL1~KL8,LED依次显示数字 依次显示数字0
程序3 程序3 键输入子程序的流程图
程序3 程序3 键扫描查键号子程序流程图
中断扫描方式概念
采用上述两种键盘扫描方式时, 无论是否按键, 采用上述两种键盘扫描方式时 , 无论是否按键 , CPU都要定时扫描键盘 而单片机应用系统工作时, CPU都要定时扫描键盘,而单片机应用系统工作时, 都要定时扫描键盘, 并非经常需要键盘输入,因此,CPU经常处于空扫 并非经常需要键盘输入,因此,CPU经常处于空扫 描状态。因此为了提高CPU的工作效率, 描状态。因此为了提高CPU的工作效率,引入中断 CPU的工作效率 扫描,当无键按下时,CPU处理自己的工作 扫描,当无键按下时,CPU处理自己的工作,每当 处理自己的工作, 有键按下,才向CPU请求中断,CPU响应中断 有键按下,才向CPU请求中断,CPU响应中断,对 CPU请求中断 响应中断, 键盘进行扫描,识别闭合键,并对该键进行处理。 键盘进行扫描,识别闭合键,并对该键进行处理。
程序3 程序3 定时扫描键输入程序结果 LED显示: STOP LED显示 显示: KL1键 号键),秒表清0, LED显示 ),秒表清 显示: 按KL1键(0号键),秒表清0, LED显示:0 KL2键 号键),秒表计时,LED显示: ),秒表计时,LED显示 按KL2键(1号键),秒表计时,LED显示:* KL3键 号键),秒表停, LED显示 ),秒表停 显示: 按KL3键(2号键),秒表停, LED显示:1 KL4键 号键),LED显示 ),LED显示: 按KL4键(3号键),LED显示: STOP
定时扫描方式概念
每隔一段时间对键盘扫描一次, 每隔一段时间对键盘扫描一次,它利用单片机内部的定时器 产生一定时间(例如10ms)的定时。 10ms 产生一定时间 ( 例如 10ms ) 的定时 。 当定时时间到就产生 定时器溢出中断。CPU响应中断后对键盘进行扫描 响应中断后对键盘进行扫描, 定时器溢出中断。CPU响应中断后对键盘进行扫描,并在有 键按下时识别出该键,再执行该键的功能程序。 键按下时识别出该键,再执行该键的功能程序。 过程: 过程:
KDKD-Q0 ~ KD-Q7 全输出低电平0, 检查 KEY-REC 的输入状态 KD全输出低电平0 KEY0 有键压下 (→求键号) 求键号) 1 无键压下
KEYKEY-REC
4、 求闭合键的键值
DP-51S实验板键分布图 DP-51S实验板键分布图 键名:自取名; 键名:自取名; 键号:按键盘排列顺序的编号; 键号:按键盘排列顺序的编号; 键值:某键压下后的数据排列,压下的键为0 键值:某键压下后的数据排列,压下的键为0,未压下的 键为1 键为1。 例:求1号键的键值 KL2: KL2:11111101 FDH
实验四 键盘接口实验
相关文档
最新文档