实验五 行列式按键扫描实验

合集下载

实验五 键盘扫描实验 实验报告

实验五 键盘扫描实验 实验报告

键盘扫描实验实验报告一、实验目的1. 掌握线反转法键盘扫描原理。

2. 了解单片机的输入和输出过程,理解单片机的数据采集过程。

二、实验内容单片机外接4x4键盘,通过线反转法判断按下的键,并在数码管上显示按键对应的数字。

第一行从左到右分别是开关K0, K1, K2, K3,第二行从左到右分别是K4, K5, K6, K7以此类推。

当按下Kn时,在数码管上显示数字n。

三、实验原理线翻转法:先对行(R0-R3)置0,对列(R4-R7)置1。

当有键被按下时,会把按键所在的列的电位从1变0,记录下位置;然后再将行列翻转,记录下按下键的所在行,两数进行或运算,就可以得到一个唯一表示按下键的数字。

例如:假定R0-R7分别与单片机的P2.0-P2.7相连。

先把R4-R7置1,R0-R3置0(通过指令MOV P2, #0F0H实现)。

当键K5被按下时,R5电位被拉低为低电平。

此时,P2口表示的数为:1101 0000(0xD0);然后再置R4-R7为0,R0-R3为1,此时,R1电位被拉低为低电平,此时,P2口表示的数为:0000 1101(0x0D)。

将两数相与取反,得到:0010 0010。

四、实验过程1. 连接好单片机及其外围设备电路2. 编写汇编程序ORG LJMP KeyLJMP K7: CJNE R2, #82H, K8ORG 0100H MOV P0, #0F8H Init: CLR P1.3 LJMP KeyMOV P0, #0C0H K8: CJNE R2, #14H, K9 Key: MOV P2, #0F0H MOV P0, #080HMOV A, P2 LJMP KeyMOV R1, A K9: CJNE R2, #24H, K10MOV P2, #0FH MOV P0, #090HMOV A, P2 LJMP KeyORL A, R1 K10: CJNE R2, #44H, K11CPL A MOV P0, #088HMOV R2, A LJMP KeyJNZ KeyPro K11: CJNE R2, #84H, K12LJMP Key MOV P0, #083H KeyPro: CJNE R2, #11H, K1 LJMP KeyMOV P0, #0C0H K12: CJNE R2, #18H, K13LJMP Key MOV P0, #0C6H K1: CJNE R2, #21H, K2 LJMP KeyMOV P0, #0F9H K13: CJNE R2, #28H, K14LJMP Key MOV P0, #0A1H K2: CJNE R2, #41H, K3 LJMP KeyMOV P0, #0A4H K14: CJNE R2, #48H, K15LJMP Key MOV P0, #086H K3: CJNE R2, #81H, K4 LJMP KeyMOV P0, #0B0H K15: CJNE R2, #88H, K16LJMP Key MOV P0, #08EH K4: CJNE R2, #12H, K5 LJMP KeyMOV P0, #099H K16: LJMP KeyLJMP Key ENDK5: CJNE R2, #22H, K6MOV P0, #092HLJMP KeyK6: CJNE R2, #42H, K7MOV P0, #082H五、实验结果1. 当按下开关Kn时,数码管能够显示对应的数字。

阵列式键盘实验详解

阵列式键盘实验详解

实验二阵列式键盘实验一、实验目的1.掌握键盘和显示器的接口方法和编程方法2.掌握阵列式键盘的硬件组成和软件编程方法二、实验说明本实验提供了一个4X4小建盘,向P0口的低四位逐个输出低电平,如果有键盘按下,则相应输出为低,如果没有键按下,则输出为高。

通过输出的列码和读取的行码来判断按下什么键。

有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。

三、实验步骤及内容1.用一根8位数据线连接阵列式键盘实验模块与LED与单片机接口模块。

无键按下或有键按下,发光二极管全亮。

若将A1-A4接地,则发光二极管显示0000XXXX;B1线上有键按下,则发光二极管显示0000XXX,B2线上有键按下,则发光二极管现世0000X0XX,B1和B2均有键按下,则发光二极管显示000000XX……同样可将B1与B4接地,按键与发光二极管显示情况,用户可以自行判断,自由操作。

2.用一根8位数据线连接阵列式键盘实验模块与扫描显示实验模块。

无键按下或有键按下,八段LED全亮。

用户参照1,观察键盘与八段LED亮熄的关系。

3.使用静态串行显示模块显示键值。

单片机最小应用系统1的P1口接阵列式键盘的A1~B4口,P3.6接静态数码显示DIN,P3.7接CLK。

4.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

5.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加阵列KEY.ASM源程序,进行编译,直到编译无误。

6.进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

在键盘上按下某个键,观察数显是否与按键值一致。

16位建盘的键值从左至右、从上至下依次为0~F(16进制数)。

四、流程图及源程序1.流程图主程序框图2.源程序DBUF EQU 30HTEMP EQU 40HDIN BIT P3.6CLK BIT P3.7ORG 0000HLJMP STARTORG 0030HSTART:MOV A,#16MAIN: ACALL DISPMOV 30H, AACALL KEY1AJMP MAINKEY1: MOV P1, #0FH ;A1-A4输出,B1-B4输入,输;入者对应锁存先写“1”MOV A, P1 ;读取键盘状况CJNE A,#0FH, K11 ;有键按下K10: AJMP KEY1 ;无键按下K11: ACALL DELAY ;去抖动MOV P1, #0FHMOV A, P1 ;再读键盘状况CJNE A, #0FH, K12 ;确有键盘按下SJMP K10 ;误动作K12: MOV B,A ;存列值MOV P1, #0EFH ;按键在Ai行MOV A, P1CJNE A, #0EFH,K13 ;键在A4MOV P1, #0DFHMOV A, P1CJNE A, #0DFH,K13 ;键在A3行MOV P1, #0BFHMOV A,P1CJNE A, #0BFH,K13 ;键在A2行MOV P1, #7FHMOV A, P1CJNE A,#7FH, K13 ;键在A1行AJMP K10 ;多键同时按下K13: ANL A, #0F0H ;的行值ORL A, B ;的按下键的行列值MOV B, A ;暂存键值MOV R1, #16 ;16个键MOV R2, #0 ;键码初值MOV DPTR,#K1TAB ;键码表首址K14: MOV A,R2MOVC A, @A+DPTR ;从键值表中取键值CJNE A, B, K16 ;与按下键,键值比较MOV P1,#0FH ;相等,则完成以下步骤K15: MOV A, P1CJNE A, #0FH, K15 ;等释放ACALL DELAY ;去抖动MOV A, R2 ;得键码RETK16: INC R2 ;不相等,则继续访问键值表DJNZ R1,K14AJMP K10 ;多键同时按下处理K1TAB: DB 0EEH, 0DEH, 0BEH, 07EH ;键值表DB 0EDH, 0DDH, 0BDH, 07DHDB 0EBH, 0DBH, 0BBH, 07BHDB 0E7H, 0D7H, 0B7H, 077HDISP: MOV DBUF,AMOV DBUF+1,#16MOV DBUF+2,#16MOV DBUF+3,#16MOV DBUF+4,#16MOV R0, #DBUFMOV R1, #TEMPMOV R2, #5DP10: MOV DPTR,#SEGTABMOV A, @R0MOVC A, @A+DPTRMOV @R1, AINC R0INC R1DJNZ R2, DP10MOV R0, #TEMPMOV R1, #5DP12: MOV R2, #8MOV A, @R0DP13: RLC AMOV 0B0H,CCLR 0B1HSETB 0B1HDJNZ R2, DP13INC R0DJNZ R1, DP12RETSEGTAB: ;段码表DB 3FH,06H,5BH,4FH,66H,6DH ;“0,1,2,3,4,5”DB 7DH,07H,7FH,6FH,77H,7CH ;“6,7,8,9,A,b”DB 58H,5EH,79H,71H,00H,40H ;“C,d,E,F,,-”DELAY: MOV R4, #02HAA1: MOV R5,#0F8HAA: NOPDJNZ R5,AADJNZ R4,AA1RETEND。

行列式键盘扫描显示

行列式键盘扫描显示

单片机实验六行列式键盘扫描显示一.实验目的1.通过实验掌握查询式键盘的原理和编程方法2.理解按键防抖技术。

二.实验内容数码管为共阴型,P0输出7段码,开机运行数码管显示P,当按键按下时,数码管显示相应的数字键号(1-F)。

三.实验原理图四.实验步骤1.在KEIL4中编写、调试、编译程序。

2.在PRTUSE中设计电路,加载HEX文件运行仿真,按各键观察LED的显示。

3.在实验箱上用杜邦线连接JP4和JP8,JP10和JP3,打开实验箱电源开关,下载*.hex文件到单片机,按键观查运行状态。

五.实验参考程序ORG 0000HAJMP STARTORG 0030HSTART: MOV P0,#73HAN: MOV R1,#0FEHMOV P1,R1JNB P1.4, K1_1JNB P1.5, K2_1JNB P1.6, K3_1JNB P1.7, K4_1MOV A,R1RL AMOV R1,AMOV P1,R1JNB P1.4, K1_2JNB P1.5, K2_2JNB P1.6, K3_2JNB P1.7, K4_2MOV A,R1RL AMOV R1,AMOV P1,R1JNB P1.4, K1_3JNB P1.5, K2_3JNB P1.6, K3_3JNB P1.7, K4_3MOV A,R1RL AMOV R1,AMOV P1,R1JNB P1.4, K1_4JNB P1.5, K2_4JNB P1.6, K3_4JNB P1.7, K4_4AJMP ANK1_1: AJMP K11K1_2: AJMP K12K1_3: AJMP K13K1_4: AJMP K14K2_1: AJMP K21K2_2: AJMP K22K2_3: AJMP K23K2_4: AJMP K24K3_1: AJMP K31K3_2: AJMP K32K3_3: AJMP K33K3_4: AJMP K34K4_1: AJMP K41K4_2: AJMP K42K4_3: AJMP K43K4_4: AJMP K44K11: LCALL DL Y20MSJB P1.4,N0MOV A,#00HLCALL SEG_DISP N0: AJMP ANK12: LCALL DL Y20MSJB P1.4,N1MOV A,#01HLCALL SEG_DISP N1: AJMP ANK13: LCALL DL Y20MSJB P1.4,N2MOV A,#02HLCALL SEG_DISP N2: AJMP ANK14: LCALL DL Y20MSJB P1.4,N3MOV A,#03HLCALL SEG_DISP N3: AJMP ANK21: LCALL DL Y20MSJB P1.5,N4MOV A,#04HLCALL SEG_DISP N4: AJMP ANK22: LCALL DL Y20MSJB P1.5,N5MOV A,#05HLCALL SEG_DISP N5: AJMP ANK23: LCALL DL Y20MSJB P1.5,N6MOV A,#06HLCALL SEG_DISP N6: AJMP ANK24: LCALL DL Y20MSJB P1.5,N7MOV A,#07HLCALL SEG_DISP N7: AJMP ANK31: LCALL DL Y20MSJB P1.6,N8MOV A,#08HLCALL SEG_DISPN8: AJMP ANK32: LCALL DL Y20MSJB P1.6,N9MOV A,#09HLCALL SEG_DISPN9: AJMP ANK33: LCALL DL Y20MSJB P1.6,N10MOV A,#0AHLCALL SEG_DISPN10: AJMP ANK34: LCALL DL Y20MSJB P1.6,N11MOV A,#0BHLCALL SEG_DISPN11: AJMP ANK41: LCALL DL Y20MSJB P1.7,N12MOV A,#0CHLCALL SEG_DISPN12: AJMP ANK42: LCALL DL Y20MSJB P1.7,N13MOV A,#0DHLCALL SEG_DISPN13: AJMP ANK43: LCALL DL Y20MSJB P1.7,N14MOV A,#0EHLCALL SEG_DISPN14: AJMP ANK44: LCALL DL Y20MSJB P1.7,N15MOV A,#0FHLCALL SEG_DISPN15: AJMP ANSEG_DISP: MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,ARETDL Y20MS: MOV R6,#14HDL2: MOV R7,#250DL1: NOPNOPDJNZ R7,DL1DJNZ R6,DL2RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;/0123456789 DB 77H,7CH,39H,5EH,79H,71H ;/ABCDEFEND。

矩阵键盘扫描

矩阵键盘扫描

矩阵键盘扫描1.实验目的与效果:4¡4矩阵键盘在众多场合有举足轻重的地位,所以有必要学好矩阵键盘扫描的编程。

实验板上的矩阵键盘是接单片机P2口的,以P2.4-P2.7作输出线,P2.0-P2.3作输入线;每按一个键会在数码管上显示相关的信息。

键盘上可以这样来定义,这只是个例子,用户在运用矩阵键盘键值是可以重新定义之。

2.原理图:矩阵键盘连接图3.实验板上操作:1)矩阵键盘在实验板上已经固定连接P2口了。

2)将HEX文件烧到单片机上。

3)将数码管的位选拨码开关拨到ON上。

4.实物连接图:拨码开关全部拨到ON5. C语言程序://MCU:AT89S51//晶振:12M#include"AT89X51.H"unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF};//数字0~9及ABCDEF共阳数码管代码unsigned char code charcode[]={0xc0,0xc7,0xc7,0x86,0x89};// HELLO 字样共阳数码管代码unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码管位选代码unsigned char dispbuf[8]={16,16,16,0,1,2,3,4};unsigned char disp_bit_count;unsigned char disp_count;unsigned char temp;unsigned char key;unsigned char i,j;/********1ms延时子程序***********/delay_nms(unsigned int n){unsigned int i;unsigned char j;for(i=0;i<n;i++)for(j=0;j<120;j++); //空操作}unsigned char keyscan(void){P2=0xff;P2_4=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=10;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_5=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_6=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if(temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=1;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;}temp=P2;temp=temp&0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_7=0;temp=P2;temp=temp & 0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp & 0x0f;switch(temp){case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;case 0x07:key=15;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp & 0x0f;}}}return (key);}void main(void){TMOD=0x02; //使用定时器0,选择方式2(常数自动重装的8位定时器)TH0=0x06; //保存数值,用于自动重装TL0=0x06; //定时250uS初值TR0=1; //开定时器0ET0=1; //开定时器0溢出中断EA=1; //开总中断while(1){dispbuf[0]=keyscan();}}/**********T0250uS中断服务程序***************/void t0(void) interrupt 1 using 0{disp_count++;if(disp_count==8){disp_count=0;if(disp_bit_count>=3)P0=charcode[dispbuf[disp_bit_count]];elseP0=numcode[dispbuf[disp_bit_count]];P1=bitcode[disp_bit_count];disp_count=0;disp_bit_count++;if(disp_bit_count==8){disp_bit_count=0;}}}。

行列式键盘及8位七段数码管的显示拓展

行列式键盘及8位七段数码管的显示拓展

一、实验目的1、掌握矩阵式键盘的原理及编程方法,掌握数码管动态扫描显示的原理及编程方法二、实验原理在实验2的基础上改进程序,当按下数字键0~9时在数码管上显示,要求每按下一个新的数字时,在最低位(最右边)显示,之前按下的数字一次向左移动一个位置,当按下的数字键超过8个时,不再显示新内容。

当按下非数字键即剩下的6个键(A~F)中任意一个时,清除当前显示的内容。

注意这里需要判断按键是否弹起(避免重复显示,有关重复显示参考书第4章例5的重复计数问题,比较相似),否则多个数码管可能会显示同一按键对应的数值三、实验内容⑴掌握行列式键盘和8位七段数码管显示原理;⑵掌握实验3的C51语言编程;四、实验步骤⑴阅读与实验3有关的阅读材料;⑵参考上图,在ISIS中完成电路原理图的绘制;⑶在Keil μvision3中编写和编译C51程序,并生成可执行文件;⑷在μvision3中启动ISIS的仿真运行,并进行联机调试。

五、实验要求提交实验报告并包括如下内容:电路原理图、软件调试分析、C51源程序、仿真运行截图及实验小结。

①源程序:#include<reg51.h>sbit P3_2=P3^2;unsigned char segcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};unsigned char bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x 77};unsigned int number=0;unsigned int buf[8]={10,10,10,10,10,10,10,10};void delay(unsigned int time){unsigned int j=0;for(;time>0;time--)for(j=0;j<125;j++);}void getkey() interrupt 0{ delay(10);if(P3_2==0){char key_scan[]={0xef,0xdf,0xbf,0x7f};char i=0,j=0;int m=0,n=0;for(i=0;i<4;i++){P1=key_scan[i];for(j=0;j<16;j++){if(key_buf[j]==P1){number=j;break;}}}for(i=0;i<4;i++){P1=key_scan[i];for(j=0;j<16;j++){while(key_buf[j]==P1);}}if(number<8){for(m=7;m>0;m--){buf[m]=buf[m-1];}buf[0]=number;}else if(number>9){for(n=0;n<8;n++)buf[n]=10;}}}void main(){int k;IT0=1;EX0=1;EA=1;while(1){P1=0x0f;for(k=0;k<8;k++){P0=segcode[10];P2=bitcode[k];P0=segcode[buf[k]];}}}。

关于矩阵键盘行列扫描的测试实验

关于矩阵键盘行列扫描的测试实验
*******************************************************************************/
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f; // 位定义的引脚
if(GPIO_KEY!=0x0f) //读取按键是否按下
/*******************************************************************************
* 函数名 : KeyDown
* 函数功能 : 检测有按键按下并读取键值
* 输入 : 无
* 输出 : 无
* 作者 : INK
* 日期地点 : NANKING
下图就是矩阵键盘 由P1口控制,P10~P13为列 P14~P17为输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。
{
Delay10ms(); //延时10ms进行消抖
if(GPIO_KEY!=0x0f) //再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{ //此段程序只是为了确定列的值 方便在后面进行测试行的时候加减运算 获得具体案件的行列值 从而转换为按键值
case(0X07): KeyValue=0;break;//扫描第一列
switch(GPIO_KEY)
{ //已经进行过
case(0X70): KeyValue=KeyValue;break;//自己去看为什么是 0X70 列的时候又为什么是0X07 硬件相结合

单片机实验五 按键实验

单片机实验五 按键实验

实验五:按键实验一、实验要求实验目的:熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;熟悉和掌握矩阵式减半的行扫描法和行反转法两种键盘扫描识别方法;掌握键盘延时抖动的消除方法,掌握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个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

实验五 键盘扫描实验 实验报告

实验五 键盘扫描实验 实验报告

实验五键盘扫描实验实验报告一、实验目的本次实验的主要目的是深入了解键盘扫描的工作原理,掌握键盘扫描的编程实现方法,以及提高对硬件接口和软件编程的综合应用能力。

二、实验设备1、计算机一台2、实验开发板一套3、下载线一根4、键盘一个三、实验原理键盘扫描的基本原理是通过逐行或逐列扫描键盘矩阵,检测按键的按下和释放状态。

常见的键盘扫描方式有行列式扫描和编码式扫描。

在行列式扫描中,将键盘的行线和列线分别连接到微控制器的输入输出端口。

通过依次将行线设置为低电平,同时读取列线的状态,来判断是否有按键按下。

如果在某一行被设置为低电平时,对应的列线检测到低电平,则表示该行和该列交叉处的按键被按下。

编码式扫描则是利用专门的编码芯片对键盘进行扫描和编码,微控制器只需读取编码芯片输出的按键编码即可确定按键的状态。

四、实验步骤1、硬件连接将实验开发板与计算机通过下载线连接好。

将键盘连接到实验开发板的相应接口。

2、软件编程选择合适的编程语言和开发环境,如 C 语言和 Keil 开发环境。

定义键盘的行线和列线所对应的端口。

编写扫描函数,实现键盘扫描的逻辑。

在主函数中调用扫描函数,并根据返回的按键值进行相应的处理,如显示按键字符或执行特定的操作。

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

将编译生成的可执行文件下载到实验开发板中。

4、实验测试按下键盘上的不同按键,观察实验开发板上的显示或输出结果是否正确。

检查是否能够准确检测到按键的按下和释放,以及是否存在按键抖动等问题。

五、实验结果与分析1、实验结果在实验过程中,成功实现了对键盘的扫描,并能够准确检测到按键的按下。

按下不同的按键时,实验开发板能够正确显示相应的按键字符或执行预定的操作。

2、结果分析对于按键的准确检测,说明编写的扫描函数逻辑正确,能够有效地识别键盘矩阵中的按键状态变化。

在检测到按键按下时,没有出现误判或漏判的情况,表明行线和列线的设置以及读取操作正常。

行列式键盘

行列式键盘

•5
};
•6
//键字
•7
char key_buf[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,
•2021/4/89
0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88
7
• }; • 10 • 11 • 12 1 • 13 1 • 14 1 • 15 1 • 16 • 17 1 • 18 1 • 19 1 • 20 2
2021/4/9
9
• 31 1 • 32 2 • 33 2 • 34 2 • 35 3 • 36 3 • 37 3 • 38 3 • 39 4 • 40 5
if(P3!=0xf0){ k1=P3; delay(10); if(P3==k1){ P3=0x0f; delay(10); k2=P3&k1; for(i=0;i<16;i++){ if(key_buf[i]==k2){ return i;
2021/4/9
13
感谢您的阅读收藏,谢谢!
2021/4/9
4
• 按键在闭合和断开瞬间会因弹簧开关的变 形而长生电压波动现象。
• 按键抖动会造成一次按键对应多次响应的 问题,需要采用措施消除抖动影响。单片 机常用软件延时10ms的办法来消除抖动的 影响。当检测到有键按下时,先延时10ms, 然后再检测按键的状态,若仍是闭合状态, 则认为真正有键按下。当需要检测是否按 键释放时,也需做同样的处理。
11:40:35 PAGE 2
• END OF MODULE INFORMATION.
11/06/2009
• C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

行列扫描键盘实验报告

行列扫描键盘实验报告

一、实验目的1. 了解行列扫描键盘的工作原理和设计方法。

2. 掌握行列扫描键盘的硬件电路连接和程序编写。

3. 通过实验验证行列扫描键盘的正确性和稳定性。

二、实验原理行列扫描键盘是一种常用的键盘设计方法,它通过将多个独立按键按照行、列的结构组合起来,形成一个整体键盘。

在这种设计中,行线和列线分别连接到单片机的IO口,通过控制行线和列线的电平状态,可以实现对按键的扫描和识别。

行列扫描键盘的原理如下:1. 将按键按照行、列结构连接,行线连接到单片机的输出端,列线连接到单片机的输入端。

2. 当行线输出低电平时,列线上的按键状态被检测。

如果列线上的电平状态与设定的预期状态不符,则表示有按键被按下。

3. 通过扫描行线和列线,可以确定按键的位置和状态。

三、实验设备1. 单片机:如51单片机、STM32等。

2. 行列扫描键盘:如4x4矩阵键盘。

3. 电源:5V电源。

4. 连接线:用于连接单片机和键盘的导线。

四、实验步骤1. 硬件连接:将行列扫描键盘的行线连接到单片机的输出端,列线连接到单片机的输入端。

同时,将电源连接到键盘的电源端。

2. 程序编写:编写程序实现对行列扫描键盘的扫描和识别。

(1)初始化:设置单片机的IO口为输出或输入模式。

(2)扫描行线:依次将行线输出低电平,读取列线状态,判断是否有按键被按下。

(3)识别按键:根据扫描到的行线和列线状态,确定按键的位置和状态。

(4)按键处理:根据按键的位置和状态,执行相应的操作。

3. 实验验证:将编写好的程序烧录到单片机中,连接键盘和电源,观察按键是否能够被正确识别。

五、实验结果与分析1. 实验结果:在实验过程中,成功实现了行列扫描键盘的扫描和识别功能。

按下键盘上的任意按键,单片机都能够正确识别并执行相应的操作。

2. 实验分析:通过实验,我们了解到行列扫描键盘的设计方法和原理。

在实际应用中,行列扫描键盘具有以下优点:(1)节省单片机的IO口资源:通过将多个按键按照行、列结构连接,可以减少单片机的IO口使用数量。

键盘扫描显示实验报告

键盘扫描显示实验报告

实验六键盘扫描显示实验一、实验目的1 、掌握键盘和显示器的接口方法和编程方法。

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

二、实验连线将JP4和JP8通过8PIN排线连接,JP10和JP3通过8PIN排线连接三、实验内容把矩阵键盘上的按键输入的键码在静态数码管上显示出来。

四、实验步骤实验采用线反转法①打开keil软件---新建工程---新建文件②编写程序:#include<reg51.h>#define uint unsigned int#define uchar unsigned charucharshuzu[3][4]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83} ; uint i;uint j;void delay(uint n){while(--n);}void keyscan(){uchar temp;P3=0x0f;delay(1000);temp=P3^0x0f;switch(temp){case 0x02 : i=0;break;case 0x04 : i=1;break;case 0x08 : i=2;break;default :break;}P3=0xf0;delay(1000);temp=P3^0xf0;switch(temp){case 0x10 : j=0;break;case 0x20 : j=1;break;case 0x40 : j=2;break;case 0x80 : j=3;break;default : break;}}main(){P2=0x00;while(1){ P3=0x00;if(P3!=0xf0)keyscan();P2=shuzu[i][j];delay(1000);}}保存、编译---生成hex文件③连接线,使用下载软件将编好程序载入单片机中。

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

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

南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合■设计⃞创新实验日期: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为低电平,其余列线为高电平。

DSP-矩阵键盘扫描实验

DSP-矩阵键盘扫描实验

班级学号姓名同组人实验日期室温大气压成绩实验五矩阵键盘扫描实验一、实验目的1、掌握键盘信号的输入,DSP I/O的使用;2、掌握键盘信号之间的时序的正确识别和引入。

二、实验设备1、一台装有CCS2000软件的计算机;2、插上2812主控板的DSP实验箱;3、DSP硬件仿真器。

三、实验原理实验箱上提供一个 4 * 4的行列式键盘。

TMS320F2812的8个I / O口与之相连,这里按键的识别方法是扫描法。

当有键被按下时,与此键相连的行线电平将由此键相连的列线电平决定,而行线的电平在无法按键按下时处于高电平状态。

如果让所有的列线也处于高电平,那么键按下与否不会引起行线电平的状态变化,始终为高电平。

所以,在让所有的列线处于高电平是无法识别出按键的。

现在反过来,让所有的列线处于低电平,很明显,按键所在的行电平将被拉成低电平。

根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按下。

假如是5键按下,为了进一步判定是哪一列的按键被按下,可在某一时刻只让一条列线处于低电平,而其余列线处于高电平。

那么按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。

模块说明:此模块共有两种按键,KEY1—KEY4是轻触按键,在按键未按下时为高电平输入FPGA,当按键按下后对FPGA输入低电平,松开按键后恢复高电平输入,KEY5—KEY8是带自锁的双刀双掷开关,在按键未按下时是低电平,按键按下时为高电平并且保持高电平不变,只有再次按下此按键时才恢复低电平输入。

每当按下一个按键时就对FPGA就会对此按键进行编码,KEY1—KEY8分别对应的是01H、02H、03H、04H、05H、06H、07H、08H。

在编码的同时对DSP产生中断INT1,这个时候DSP就会读取按键的值,具体使用方法可以参考光盘例程key,prj。

实验流程图:1、把2812 模块小板插到大板上;打开液晶模块的电源开关;2、按下键盘按键,液晶会显示所按键的号码。

实验五阵列式键盘实验指导书

实验五阵列式键盘实验指导书

实验五阵列式键盘实验指导书实验五阵列式键盘驱动实验一、实验目的掌握用扫描法驱动键盘二、实验原理对于一些比较复杂的系统和按键较多的场合,一般采用矩阵式键盘,矩阵式键盘有很多种,下面以应用最广泛的4x4矩阵式键盘为例来介绍4x4键盘的结构如下图所示扫描法是在程序中反复扫描键盘接口,根据端口的输入情况调用不同的按键处理子程序,单片机不能再次相应按键请求。

扫描法的步骤:(1)、先令列线Y0为低电平0,其余三根列线均为高电平,此时读取行线的状态,如果行线(X0~X3)均为高电平,则Y0这一列上没有按键按下,如果行线(X0~X3)不全为高电平,则其中为低电平的行线与Y0相交的按键按下。

这样按照同样的方法依次检查到Y1、Y2和Y3有没有按键按下。

(2)、按键软件消抖,当判断有按键按下之后,程序中延迟10ms左右的时间后,再次判断一下按键的状态,如果按键仍然处于按键按下的状态,即行线不全为1,则可以肯定按键按下,否则当做按键的抖动来处理。

(3)、根据Y0~Y3中低电平的位置Y以及X0~X3中低电平的位置X就可以找到按键按下的位置,进而对按键进行编码。

X0 X1 X2 X3Y0Y1Y2Y3三、实验内容设计阵列式键盘驱动程序,使用静态串行显示模块显示键值。

四、实验步骤1、单片机最小应用系统1的P2口接阵列式键盘的A1-A4口,P3.6接静态数码显示DIN,P3.7接CLK。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加阵列KEY.C 源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

在键盘上按下某个键,观察数显是否与按键值一致。

16位键盘的键值从左至右、从上至下依次为0-F (16进制数)。

阵列式键盘驱动参考程序:ORG 0000H LJMP START ORG 0030HSTART: MOV R0,#4MOV R1,#0FEH MOV P1,#0FH MOV P0,#01H MOV R2,#00HSTART1: MOV P1,R1 LOOP: MOV A,P1ANL A,#0F0H CJNE A,#0F0H,KEY AJMP BACKKEY: MOV A,P1ANL A,#0F0H CJNE A,#0F0H,KEY1 AJMP BACKKEY1: MOV B,P1MOV R3,#00H MOV DPTR,#KEYTABLOOP1: MOV A,R3MOVC A,@A+DPTR INC R3CJNE A,B,LOOP1 DEC R3 MOV A,R3 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P2,ABACK: MOV A,R1RL AMOV R1,A DJNZ R0,START1 LJMP STARTTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,0B9H,5EH,0F9H,71H KEYTAB:DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,07DH,0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H END#include #include#define uchar unsigned char #define uint unsigned intuchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D //0,1,2,3,4,5 ,0x7D,0x07,0x7F,0x6F,0x77,0x7C //6,7,8,9,A,b ,0x58,0x5E,0x7B,0x71 //c、d、e、f、全暗};uchar num,temp;void delay(uint z) //延时子程序 {uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }uchar keyscan() //键盘扫描程序,返回uchar型参数 {uchar i;for(i=0;i<4;i++) {P2=_crol_(0xfe,i); temp=P2;temp=temp&0xf0; while(temp!=0xf0) {delay(5); //延时消抖 temp=P2;temp=temp&0xf0; while(temp!=0xf0) {temp=P2; switch(temp) {case 0xee:num=1;break; case 0xde:num=2;break; case0xbe:num=3;break; case 0x7e:num=4;break; case 0xed:num=5;break;case 0xdd:num=6;break; case 0xbd:num=7;break; case 0x7d:num=8; break; case 0xeb:num=9;break; case 0xdb:num=10;break; case0xbb:num=11;break; case 0x7b:num=12;break; case 0xe7:num=13;break; case 0xd7:num=14;break; case 0xb7:num=15;break; case0x77:num=16;break; }while(temp!=0xf0) //等待按键释放{temp=P2;temp=temp&0xf0; } } } }return num; }main() {unsigned char k; unsigned char bb; SCON=0x00; P2=0xff; P1=0x01; while(1) {bb=keyscan(); P3=table[bb]; } }感谢您的阅读,祝您生活愉快。

矩阵键盘扫描与数码管显示实验结果分析

矩阵键盘扫描与数码管显示实验结果分析

矩阵键盘扫描与数码管显示实验结果分析
矩阵键盘扫描与数码管显示实验是一种常见的数字电路实验。

在这个实验中,我们可以通过按下矩阵键盘上的按键,控制数码管上的数字显示。

实验结果分析主要包括以下几个方面:
1. 矩阵键盘扫描:在实验中按下键盘上的某个按键,可以通过扫描算法检测到按键的位置,并将对应按键的行列信息送入微处理器或控制电路。

分析实验结果时,可以观察是否可以正常检测到按键的位置,并且是否能够正确传递给其他部分的电路或处理器。

2. 数码管显示:通过实验中的控制电路,可以将微处理器或其他控制器输出的数字信号转换成数码管上的对应数字显示。

在分析实验结果时,可以观察数码管是否能够正常显示所期望的数字,并且是否能够响应输入信号的变化。

3. 信号传递与处理:在整个实验电路中,信号的传递和处理是关键部分。

可以分析信号在各个部分的传递过程中是否出现错误或干扰,是否能够实现正确的数据传输和处理。

4. 稳定性和可靠性:实验结果的分析还需要考虑电路的稳定性和可靠性。

即在长时间使用或复杂环境条件下,电路能否保持正常工作,并且不出现意外错误或故障。

总结来说,矩阵键盘扫描与数码管显示实验结果的分析需要关注按键的检测和传递、数码管的正确显示、信号传递与处理等方面,同时也需要考虑电路的稳定性和可靠性。

行列键盘扫描实验

行列键盘扫描实验
图所示
对于键地识别一般采用逐行(列)扫描查询法,判断键盘有无键按下,由单片机口向键盘送全扫描字,然后读入列线状态来判断.文档来自于网络搜索
键盘地去抖方法:按键地去抖措施是必须地,可以让微机准确输入,常用方法实验所用到地电路原理图,并了解电路工作原理.
画出程序流程图.
实验三、行列扫描键盘实验
实验目地
学习非编码键盘地工作原理和键盘地扫描方式.
学习键盘地去抖方法和键盘应用程序地设计.
实验设备
15F单片机实验板、串口下载线、连接线、电脑
实验原理
键盘是单片机应用系统接受用户命令地重要方式.单片机应用系统一般采用非编码键盘,需要由软件根据键扫描得到地信息产生键值编码,以识别不同地键.本板采用*矩阵键盘,行信号分别为,列信号分别为.具体电路连接图如图所示:文档来自于网络搜索
根据流程图编写实验程序(语言或汇编),并完成调试.
按不同地键,用第二个数码管地最后两位显示按键地键值.

单片机按键扫描实验报告

单片机按键扫描实验报告

单片机按键扫描实验报告
实验目的:
通过实验,掌握单片机按键的原理和按键的扫描方法。

实验器材:
1. STC89C52单片机开发板
2. 按键模块
3. 面包板、杜邦线等
实验原理:
单片机按键的原理是通过按键模块接通或断开单片机的某个IO口,从而改变该IO口的电平状态,由单片机检测到电平状态的改变,从而实现对按键的检测和响应。

按键模块一般采用矩阵按键的形式,通过多个IO口设为输出,多个IO口设为输入的方式,实现对多个按键的扫描检测。

按键模块一般会采用行列扫描的方法,即将按键分为多个行和列,按下按键时,某一行和某一列之间接通,从而改变了IO口的电平状态。

实验步骤:
1. 将按键模块连接到单片机开发板的IO口上。

根据按键模块的接口定义将VCC、GND和各个行列引脚分别连接到开发板上。

2. 根据按键模块的引脚定义,编写单片机程序进行按键的扫描。

通过循环检测每个行引脚和每个列引脚之间的电平变化,来判断按键是否被按下。

3. 在程序中可以通过LED等显示设备来显示按键是否被按下的状态。

4. 执行程序,观察按键是否可以正常检测和响应。

实验结果:
实验完成后,观察到按键的检测和响应正常,按下按键时,LED等显示设备可以正确显示按键被按下的状态。

经过实验,掌握了单片机按键的原理和按键的扫描方法,进一步提升了对单片机设备的理解和应用能力。

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

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

实验五矩阵键盘实验一、实验内容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个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

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

四、实验原理
抖动
当按键被按下或者被释放时,并不 能够产生一个明确的1或者0。
尽管触点可能看起来稳定而且很快 地闭合,但与微处理器快速的运行 速度相比,这种动作是比较慢的。
当触点闭合时,其弹起就像一个球。 弹起效果将产生如右图所示的好几 个脉冲。 弹起的持续时间通常将维持在 5ms~30ms之间。
四、实验原理
软件实现键盘扫描 –算法
在初始化阶段,所有的行(输出端口)被强行 设置为低电平。 在没有任何键按下时。所有的列(输入端口) 将读到高电平。 任何键的闭合将造成其中的一列变为低电平, 因此只需再确定是哪一行即可定位被按键的位置。 在所有的行中,保持一行为低,其余为高, 循环所有行,此时能使列仍然输出低的行即为按键 的行号。 为了过滤回弹的问题,微处理器以规定的时 间间隔对键盘进行采样,这个间隔通常在 20ms~100ms之间(被称为去除回弹周期),它主 要取决于所使用开关的回弹特征。
实验五 行列式按键扫描实验
一、实验目的
学习键盘驱动原理。 掌握通过CPU的I/O扩展键盘的方法。
二、实验内容
编写键盘扫描程序,并将按键值在超级 终端显示,写键盘扫描的流程图。
三、实验设备及工具 1.ARM实验箱 教学实验平台 2.ADS 1.2 评估版集成开发环境 3.串口连接线, JLINK
四、实验原理
实现键盘有两种方案 :
一、采用现有的一些芯片实现键盘扫描; 二、用软件实现键盘扫描 1、中断法; 2、查询法。
四、实验原理
软件实现键盘扫描 –硬件
通常在一个键盘中使用了一个瞬时 接触开关,微处理器可以容易地检 测到闭合。 当开关打开时,通过处理器的I/O口 的一个上拉电阻提供逻辑1; 当开关闭合时,处理器的/IO口的输 入将被拉低得到逻辑0。
开始
行置低电平
列读到低电 平? Y 延时 读取列端口输 入值 N 列读到低电 平? Y 保存键值 显示键名
N
键盘扫描过程就是让微处理器按 有规律的时间间隔查看键盘矩阵, 以确定是否有键按下。 一旦处理器判定有一个按键按下 ,键盘扫描软件将过滤掉抖动并且 判定哪个键被按下。 每个键被分配一个称为扫描码的 惟一标识符。应用程序利用该扫描 码,根据按下的键来判定该执行键盘扫描 –键盘
本次实验实现的是4×4的键盘扫描。无键按下时,4个GPIO引脚都是高,有键按下 时产生低电平,查询方式得到行号和列号。去除回弹周期为20ms 。
KEYA_R_1 ------S3C2440_PJ0 KEYA_R_2 ------S3C2440_PJ10 KEYA_R_3 ------S3C2440_PJ8 KEYA_R_4 ------S3C2440_PJ12 KEYA_D_1 ------S3C2440_PJ4 KEYA_D_2 ------S3C2440_PJ1 KEYA_D_3 ------S3C2440_PJ2 KEYA_D_4 ------S3C2440_PJ11
五、实验步骤
(1) 硬件连接:用串口线将 PC 机的 COM 与实验 箱的 UART连起来,用JLINK将PC机的USB接口 与实验箱JTAG连起来,通电源; (2) 编译HK_KEY.mcp,调试并运行: (3) 结合实验内容和原理,观察实验现象,实验结 果是在实验箱上按下的键值对应显示在超级终端 上。 (4)读scankey函数,写程序流程图。
相关文档
最新文档