键盘接口实验实验报告及程序

合集下载

实验四 键盘实验

实验四  键盘实验

实验四矩阵键盘控制接口设计实验一、实验目的1、掌握MAX+plus 软件的使用方法。

2、掌握层次化设计方法:底层为文本文件,顶层为图形文件。

3、了解用12 位按健输入开关来设计并实现一个3 x 4 矩阵键盘接口控制器。

了解弹跳消除电路的工作原理。

二、实验设备1、计算机2、MAX+plus II软件及实验箱三、实验原理该实验系统中没有矩阵键盘,可以用12 位按键开关来实现矩阵键盘的功能。

当按键被按下时改按键的节点会呈现‘0’状态,反之为‘1’。

将12 个键进行编码后就可以实现距阵键盘的功能。

键盘编码电路:由于每个按键开关都是独立的,故有12 路输入,3X4 键盘有12 个键值,4位二进制数即可表示全部状态。

因此,键盘编码电路为12 输入4 输出编码器。

12 个按键可分为10 个数字键和2 个功能键。

数字键主要用来输入数字,功能键一般实现一些特殊用途(如确认、清除等)。

4 位输出从0~9 表示10 个数字键,11 和12 表示两个功能键。

弹跳消除电路:因为按键开关是机械式结构,在开关切换的瞬间会在接触点出现来回弹跳的现象,对于激活关闭一般电器并不会有何影响,但对于灵敏度较高的电路,却有可能产生误动作而出错。

跳现象产生的原因可从下图说明。

虽然只是按下按键一次然后放开,然而实际产生的按键信号却不只跳动一次,经过取样的检查后将会造成误判,以为按键两次。

弹跳现象产生错误的抽样结果如果调整抽样频率可以发现弹跳现象获得了改善。

因此在开关输入信号处必须加上弹跳消除电路,避免误操作信号的发生。

注意:弹跳消除电路所使用脉冲信号的频率必须要选用合适,频率太低则按键反应痴动,频率太高则起不到消除弹跳的作用,而且消除弹跳电路设计的不同对频率也有不同的要求。

数码管采用共阴极:段码表四、实验内容1、用12 个按键开关实现矩阵键盘,当按下某一键时在数码管上显示对应的键值。

2、分析仿真示例程序理解弹跳消除的实现原理。

3、通过改变CLK 信号,理解时钟信号对弹跳消除的影响。

运用8255设计的键盘及显示接口-实验报告(含接线图+源程序)

运用8255设计的键盘及显示接口-实验报告(含接线图+源程序)

运用8255设计的键盘及显示接口图中用并行接口8255A作为微机与键盘间的接口,采用逐行扫描法识别键。

将键盘中的列与PA0—PA3相连,A口为输出;将行与C口的PC0—PC1相连,C 口为输入口; PB0—PB7与七段代码显示器连接B口为输出。

程序执行过程如下:识别是否有键按下,方法是使PA0一PA3输出全0,读C 口(行值) 中只要有一位为0,就说明有键按下,在检测到有键按下后,延迟一段时间,根据找到的键号,转去执行显示七段代码显示器的程序,这时七段代码显示器就显示与该键相同的数值。

实验步骤8255接口的应用键盘及显示接线图注:圆圈处是要求接的连线。

(1)按图4接线。

(2)输入源程序,汇编、连接后装入系统。

(3)执行程序后,按一下键盘,7段代码就会显示相应的数字。

程序STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDATA 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 DI,3003HMOV AL,81H ;8255方式字定义选择0方式,A口为输出;OUT 63H,AL;B口为输出;C口为输入BEGIN: CALL DIS ;显示七段代码管数据的子程序CALL CLEAR ;七段代码管清0子程序CALL CCSCAN ;检测是否有键按下子程序JNZ INK1 ;JMP BEGININK1: CALL DISCALL DALLY ;子程序为延时,消抖动CALL DALLYCALL CLEARCALL CCSCANJNZ INK2JMP BEGININK2: MOV CH,0FEHMOV CL,00HCOLUM: MOV AL,CHOUT 60H,ALIN AL,62HTEST AL,01HJNZ LONEMOV AL,00HJMP KCODELONE: TEST AL,02HJNZ NEXTMOV AL,04HKCODE: ADD AL,CLCALL PUTBUFPUSH AXKON: CALL DISCALL CLEARCALL CCSCANJNZ KONPOP AX NEXT: INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUM KERR: JMP BEGIN CCSCAN: MOV AL,00HOUT 60H,ALIN AL,62HNOT ALAND AL,03HRET CLEAR: MOV AL,00HOUT 61H,ALRETDIS: PUSH AXMOV SI,3000HMOV DL,0F7HMOV AL,DLAGAIN: OUT 60H,ALMOV AL,[SI]MOV BX,OFFSET TABLE ;取七段代码首址AND AX,00FFHADD BX,AXMOV AL,[BX]OUT 61H,ALCALL DALLYINC SIMOV AL,DLTEST AL,01HJZ OUTROR AL,1MOV DL,ALJMP AGAINOUT: POP AXRETDALLY: PUSH CXMOV CX,0010HT1: MOV AX,0010HT2: DEC AXJNZ T2LOOP T1POP CXRETPUTBUF: MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3003H GOBACK: RETCODE ENDSEND START。

实验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;}}。

键盘实验

键盘实验

4×4键盘实验06300720040夏晓天电子信息科学与技术【预习报告】一.实验目的1.掌握扫描式键盘的工作原理。

2.掌握基于MCS-51的键盘接口电路的设计方法。

二.实验内容1.设计基于MCS-51的4×4键盘接口电路,将其定义为0~F的16个数字键,将按下的键的数字用LCD显示。

2.将4×4键盘定义为0~9,以及加、减、等于、擦除、清零、退出等功能键,实现简单的计算器,利用LCD显示运算过程,按退出键后退出程序。

三.电原理图和程序清单:总的CPLD-1电原理图:1.数字键0~F硬件连接图:程序清单:ORG 0000HAJMP MAINORG 0030HMAIN:ROW EQU 30H ;行寄存器LIN EQU 31H ;列寄存器PAR EQU 32H ;按键定义寄存器 COM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器CW_ADD EQU 0000H ;指令口写地址 CR_ADD EQU 0002H ;指令口读地址 DW_ADD EQU 0001H 数据口写地址 DR_ADD EQU 0003H ;数据口读地址;初始化LCDMOV A,#30H ;工作方式设置指令代码MOV DPTR,#CW_ADD ;指令口地址设置MOV R2,#03H ;循环量=3MOVX @DPTR,A ;写指令代码INIT1: LCALL DELAY2DJNZ R2,INIT1MOV A,#38H ;设置8位总线工作方式MOVX @DPTR,AMOV COM,#01H ;清屏LCALL PR1MOV COM,#06H ;设置输入方式LCALL PR1MOV COM,#0CH ;设置显示方式LCALL PR1START: MOV ROW,#00H ;所有行置低电平MOV A,ROWMOV DPTR,#2000HMOVX @DPTR,AMOVX A,@DPTR ;读列电平ANL A,#0FHCJNE A,#0FH,JDGSJMP START ;读入值全为1JDG: LCALL DELAY1 ;读入列值不全为1,延时20msMOV ROW,#0E0H ;置第一行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 MOV ROW,#0D0H ;置第二行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTRANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 MOV ROW,#0B0H ;置第三行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 MOV ROW,#70H ;置第四行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 SJMP STARTRKEY: ADD A,ROW ;得到键值MOV ROW,AMOV DPTR,#TBL1MOV R1,#00HL1: MOV A,R1MOVC A,@A+DPTRCJNE A,ROW,L2 ;判断表中取出的数值是否与键值相等MOV PAR,R1 ;得到按键的定义SJMP L3L2: INC R1SJMP L1;等待键释放L4: MOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,L4 ;读入列值不全为1说明按键未释放LCALL DELAY1 ;延时20msMOVX A,@DPTRANL A,#0FHCJNE A,#0FH,L4 ;读入列值全为1说明按键已释放LCALL PRO ;显示按键的定义值AJMP START;键处理程序PRO: PUSH ACCPUSH DPHPUSH DPLMOV COM,#80H ;设置DDRAM地址为00H(第一行第一位) LCALL PR1MOV DPTR,#TBL2 ;取字符代码MOV A,PARMOVC A,@A+DPTRMOV DAT,A ;暂存DATLCALL PR2POP DPLPOP DPHPOP ACCRET;写指令代码PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDJB ACC.7,PR11MOV A,COMMOV DPTR,#CW_ADD MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;写显示数据PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADD PR21: MOVX A,@DPTRJB ACC.7,PR21MOV A,DATMOV DPTR,#DW_ADD MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;延时20msDELAY1:MOV R7,#50HDEL11: MOV R6,#7BHNOPDEL12: DJNZ R6,DEL12DJNZ R7,DEL11RET;延时5msDELAY2: MOV R6,#28HDEL21: MOV R7,#07BHDEL22: DJNZ R7,DEL22DJNZ R6,DEL21RET;字符存储区TBL1: DB 0EEH,0EDH,0EBH,0E7H,0DEH,0DDH,0DBH,0D7H DB 0BEH,0BDH,0BBH,0B7H,7EH,7DH,7BH,77H TBL2: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46HEND2.简单计算器硬件连接图:程序清单:ORG 0000HAJMP MAINORG 0030HMAIN:COM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器ROW EQU 22H ;行寄存器LIN EQU 23H ;列寄存器PAR EQU 24H ;按键定义寄存器SYM EQU 25H ;运算符寄存器RSL EQU 26H ;运算结果寄存器ADN EQU 27H ;中间值寄存器GEW EQU 28H ;个位数值寄存器SHW EQU 29H ;十位数值寄存器BAW EQU 2AH ;百位数值寄存器CW_ADD EQU 0000H ;指令口写地址CR_ADD EQU 0002H ;指令口读地址DW_ADD EQU 0001H ;数据口写地址DR_ADD EQU 0003H ;数据口读地址;初始化MOV A,#30H ;工作方式设置指令代码 MOV DPTR,#CW_ADD ;指令口地址设置MOV R2,#03H ;循环量=3MOVX @DPTR,A ;写指令代码INIT1: LCALL DELAY2DJNZ R2,INIT1MOV A,#38H ;设置8位总线工作方式 MOVX @DPTR,AMOV COM,#01H ;清屏LCALL PR1MOV COM,#06H ;设置输入方式LCALL PR1MOV COM,#0CH ;设置显示方式LCALL PR1START: MOV SYM,#00H ;功能键清零MOV RSL,#00H ;运算结果清零MOV R3,#00H ;按键次数清零MOV COM,#80H ;设置DDRAM地址为第一行第一位LCALL PR1MOV DAT,#30H ;初始在第一行第一位显示'0'LCALL PR2PRER: MOV ROW,#00H ;所有行置低电平MOV A,ROWMOV DPTR,#2000HMOVX @DPTR,AMOVX A,@DPTR ;读列电平ANL A,#0FHCJNE A,#0FH,JDGSJMP PRER ;读入值全为1JDG: LCALL DELAY1 ;读入列值不全为1,延时20msMOV ROW,#0E0H ;置第一行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 MOV ROW,#0D0H ;置第二行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序MOV ROW,#0B0H ;置第三行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 MOV ROW,#70H ;置第四行MOV A,ROWMOVX @DPTR,AMOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,RKEY ;读入列值不全为1,则转到键值处理程序 SJMP PRERRKEY: ADD A,ROW ;得到键值MOV ROW,AMOV DPTR,#TBL1MOV R1,#00HL1: MOV A,R1MOVC A,@A+DPTRCJNE A,ROW,L2 ;判断表中取出的数值是否与键值相等MOV PAR,R1 ;得到按键的定义SJMP L3L2: INC R1SJMP L1;等待键释放L3: MOV DPTR,#2000HL4: MOVX A,@DPTR ;读入列ANL A,#0FHCJNE A,#0FH,L4 ;读入列值不全为1说明按键未释放LCALL DELAY1 ;延时20msMOVX A,@DPTRANL A,#0FHCJNE A,#0FH,L4 ;读入列值全为1说明按键已释放 LJMP PRO ;显示按键的定义值LJMP PRER;键处理程序PRO:;退出QUIT: MOV A,PARCJNE A,#0AH,CLEAR ;退出键定义为#0AHLJMP PQT ;转退出键处理程序;清零CLEAR: MOV A,PARCJNE A,#0BH,EARSE ;清零键定义为#0BHLJMP PCLR ;转清零键处理程序;擦除EARSE: MOV A,PARCJNE A,#0CH,EQUAL ;擦除键定义为#0CHLJMP PERS ;转擦除键处理程序;等于EQUAL: MOV A,PARCJNE A,#0DH,PLUS ;等于键定义为#0DHLJMP PSYM ;转运算符处理程序;加PLUS: MOV A,PARCJNE A,#0EH,MINUS ;加法键定义为#0EHLJMP PSYM ;转运算符处理程序;减MINUS: MOV A,PARCJNE A,#0FH,NUM ;减法键定义为#0FHLJMP PSYM ;转运算符处理程序;数字NUM: INC R3 ;数字键按键次数加1CJNE R3,#1H,NUM1 ;判断第几个数字键LJMP S1 ;为第一个数字NUM1: CJNE R3,#2H,NUM2LJMP S2 ;为第二个数字NUM2: CJNE R3,#3H,NUM3LJMP S3 ;为第三个数字NUM3: LJMP PCLR ;第四个数字转清零处理程序S1: MOV R4,PAR ;输入值暂存R4MOV A,R4MOV R6,A ;暂存R6ADD A,#30H ;转为ASCII码MOV PAR,AMOV COM,#01H ;清屏LCALL PR1MOV COM,#80HLCALL PR1MOV DAT,PARLCALL PR2 ;第一个数字显示在第一行第一位 LJMP PRER ;等待再次输入S2: MOV R5,PAR ;暂存R5MOV B,#10MOV A,R4MUL AB ;第一个数字乘以10ADD A,R5 ;再加上第二个数字MOV R4,A ;暂存R4MOV R7,A ;暂存R7MOV A,PARADD A,#30H ;转为ASCII码MOV PAR,AMOV DAT,PARLCALL PR2 ;第二个数字显示在第一行第二位LJMP PRER ;等待再次输入S3: MOV R5,PAR ;暂存R5MOV B,#10MOV A,R4MUL AB ;第一、二个数字组成的两位数乘以10JB OV,PCLR ;溢出则清零ADD A,R5 ;第一、二个数字组成的两位数乘以10再加上第三个;数字JB CY,PCLR ;溢出则清零MOV R4,A ;暂存R4MOV A,PARADD A,#30H ;转为ASCII码MOV PAR,AMOV DAT,PARLCALL PR2 ;第三个数字显示在第一行第三位LJMP PRER ;等待再次输入;退出处理PQT: MOV COM,#01H ;清屏LCALL PR1LJMP HE ;退出程序;清零处理程序PCLR: MOV R4,#0 ;输入值清零MOV COM,#01H ;清屏LCALL PR1LJMP START ;从头开始;擦除处理程序PERS: LCALL PR3 ;读入DDRAM地址DEC COM ;DDRAM地址减1ORL COM,#80HLCALL PR1MOV A,COMCJNE A,#80H,PE1MOV DAT,#30H ;要擦除的是输入的第一个数字则将擦除的那位显;示'0'LCALL PR2SJMP PE2PE1: MOV DAT,#20H ;要擦除的不是输入的第一个数字则将擦除的那位;显示空白LCALL PR2PE2: LCALL PR3 ;读入DDRAM地址DEC COM ;DDRAM地址减1ORL COM,#80HLCALL PR1DEC R3 ;按数字键次数减1CJNE R3,#00H,PERS1SJMP PERS3 ;擦除的是第一个数字则直接等待按键PERS1: CJNE R3,#01H,PERS2MOV A,R6 ;擦除的是第二个数字则将键入得数字键组成的数 ;值改成第一个数字的值MOV R4,ASJMP PERS3PERS2: CJNE R3,#02H,PERS3MOV A,R7 ;擦除的是第三个数字则将键入得数字键组成的数;值改成第一、二个数字组成的数值MOV R4,APERS3: LJMP PRER;运算符处理程序PSYM: MOV R0,SYM ;与上次运算符交换MOV SYM,PARMOV PAR,R0MOV A,PARCJNE A,#0EH,PSYM1 ;上次是加法键则转加法处理程序LJMP JIAPSYM1: MOV A,PARCJNE A,#0FH,PSYM2 ;上次是减法键则转减法处理程序LJMP JIANPSYM2: MOV A,PARCJNE A,#00H,PSYM3 ;从未按过运算键则转第一次按运算键处理程序 LJMP FIRSTPSYM3: LJMP DEN ;都不是则转等于处理程序;第一次按运算键处理程序FIRST: MOV RSL,R4 ;按过的数字键组成的数值送结果寄存器MOV R3,#00H ;按数字键次数清零MOV 32H,#00H ;负数标志位清零LJMP DISP ;显示运算结果JIA: MOV A,RSLADD A,R4 ;将之前的运算结果加上最近一次按得数字键组 ;成的数值JB CY,PCLR ;溢出则清零MOV RSL,AMOV R3,#00H ;按数字键次数清零LJMP DISP ;显示运算结果JIAN: MOV A,RSLSUBB A,R4 ;将之前的运算结果减去最近一次按得数字键 ;组成的数值JB CY,JIAN2 ;结果为负则转负数处理MOV 32H,#00H ;负数标志位清零MOV RSL,AMOV R3,#00H ;按数字键次数清零LJMP DISP ;显示运算结果JIAN2: MOV 32H,#01H ;负数标志位置1MOV A,R4SUBB A,RSL ;将最近一次按得数字键组成的数值减去之前 ;的运算结果MOV RSL,A ;将差送运算结果MOV R3,#00H ;按数字键次数清零LJMP DISP ;显示运算结果DEN: MOV R3,#00H ;按数字键次数清零LJMP DISP ;显示运算结果HE: SJMP HEDISP: MOV B,#10MOV A,RSLDIV AB ;运算结果除以10MOV ADN,A ;商暂存ADNMOV A,B ;取余数MOV GEW,A ;余数送个位数值寄存器MOV R2,#01H ;结果位数置1MOV A,ADNJZ DISP1 ;结果是否为一位数MOV B,#10MOV A,ADNDIV AB ;商除以10MOV ADN,A ;商暂存ADNMOV A,B ;取余数MOV SHW,A ;余数送十位数值寄存器MOV R2,#02H ;结果位数置2MOV A,ADNJZ DISP1 ;结果是否为二位数MOV BAW,AMOV R2,#03H ;结果位数置3DISP1: LCALL DISP2 ;显示结果LJMP PRER ;等待按键;显示结果DISP2: MOV COM,#01H ;清屏LCALL PR1CJNE R2,#03H,X1 ;显示结果是否为3位MOV COM,#80H ;从第一行第一位开始显示LCALL PR1MOV A,32HCJNE A,#01H,MN1 ;是否为负数INC GEW ;是负数则使它的绝对值个位加1 MOV DAT,#2DH ;显示负号LCALL PR2MN1: LCALL XBA ;显示百位LCALL XSH ;显示十位LCALL XGE ;显示个位SJMP X3X1: CJNE R2,#02H,X2 ;显示结果是否为2位MOV COM,#80H ;从第一行第一位开始显示LCALL PR1MOV A,32HCJNE A,#01H,MN2 ;是否为负数INC GEW ;是负数则使它的绝对值个位加1 MOV DAT,#2DH ;显示负号LCALL PR2MN2: LCALL XSH ;显示十位LCALL XGE ;显示个位SJMP X3X2: MOV COM,#80H ;从第一行第一位开始显示LCALL PR1MOV A,32HCJNE A,#01H,MN3 ;是否为负数INC GEW ;是负数则使它的绝对值个位加MOV DAT,#2DH ;显示负号LCALL PR2MN3: LCALL XGE ;显示个位X3: RET;显示百位XBA: MOV A,BAWANL A,#0FHADD A,#30H ;将百位数值转为对应的ASCII码 MOV DAT,ALCALL PR2 ;显示百位RET;显示十位XSH: MOV A,SHWANL A,#0FHADD A,#30H ;将十位数值转为对应的ASCII码MOV DAT,ALCALL PR2 ;显示十位RET;显示个位XGE: MOV A,GEWANL A,#0FHADD A,#30H ;将个位数值转为对应的ASCII码 MOV DAT,A ;显示个位LCALL PR2RET;写指令代码PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADDPR11: MOVX A,@DPTRJB ACC.7,PR11MOV A,COMMOV DPTR,#CW_ADDMOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;写显示数据PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADD PR21: MOVX A,@DPTRJB ACC.7,PR21MOV A,DATMOV DPTR,#DW_ADD MOVX @DPTR,APOP ACCPOP DPLPOP DPHRET;读ACPR3: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_ADD PR31: MOVX A,@DPTRMOV COM,APOP ACCPOP DPLPOP DPHRET;延时20msDELAY1:MOV 31H,#50HDEL11: MOV 30H,#7BHNOPDEL12: DJNZ 30H,DEL12DJNZ 31H,DEL11RET;延时5msDELAY2: MOV 30H,#28HDEL21: MOV 31H,#07BHDEL22: DJNZ 31H,DEL22DJNZ 30H,DEL21RET;字符存储区TBL1: DB 7DH,0BEH,0BDH,0BBH,0DEH,0DDH,0DBH,0EEHDB 0EDH,0EBH,7EH,0E7H,0D7H,7BH,77H,0B7HTBL2: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46HEND【实验报告】一.修改后的电原理图:总的CPLD-2电原理图:因为CPLD-1的空闲管脚不够(我的有个管脚是坏的),所以预习报告中将连接到LCD 的RS、R/W端的管脚定义为A0、A1所占的管脚,但A0、A1是地址管脚,读入键盘列信号的时候用得到,所以会和LCD的RS、R/W端冲突,从而无法显示。

接口实验报告——键盘

接口实验报告——键盘
}
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;

键盘接口实验

键盘接口实验
① 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键键盘。
键盘接口功能 判断有无键按下; 判断有无键按下; 消除键的抖动; 消除键的抖动; 求按下键的键号。 求按下键的键号。 非编码键盘

实验四 键盘显示程序设计

实验四 键盘显示程序设计

实验四 键盘显示程序设计实验目的1、理解串行接口键盘单片机汇编语言程序的基本结构2、了解单片机汇编语言程序的设计和调试方法3、掌握几个的基本的传送类、控制类指令的使用方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、 键盘接口电路工作原理串行接口键盘盘电路如图4-15所示。

键盘扫描线与显示位选扫描信号共用。

键盘输入只需要一根线,电路简单。

键盘扫描信号从74LS164输出,低电平有效。

当扫描到某个键时,若按键按下,在KEY 端得到低电平,否则得到高电平。

通过判断KEY 的电平就可以知道相应键盘是否按下。

图4-15 键盘接口电路图2、 读键盘程序设计从上面工作原理分析可知,读键程序可以和显示程序结合在一起,也可以单独设计。

这种结构的键盘同样存在抖动问题。

为了减少程序误动作,程序设计时也要考虑去抖动问题。

这里设计一个把键值显示在LED 上的程序。

为了简化问题,把读键程序与显示结合起来。

程序流程图如图4-16所示。

图4-16 键盘扫描程序流程图主程序 初值化,显示缓冲区,键值暂存,键盘缓存调用键盘显示程序键值相同 N显示计数为0 …… 键盘显示程序 N显示程序 延时程序执行后 读当前扫描的键状态,并存入键值暂存寄存器实验内容1、设计程序把键值显示在数码管。

2、设计程序按不同键时实现不同功能。

按最左边按键:小数点循环移位按向上键:最右边一位数码管数值加1(0-9),到9时加1回到0按向下键:最右边一位数码管数值减1(9-0),到0时减1回到9按向左键:显示数字左移一位按向右键:显示数字右移一位实验步骤及调试过程1、连接单片机开发板、万利仿真机2、连接仿真调试电缆(并口JTAG)3、打开ARM集成开发环境ADS,进行程序加载。

实验程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit CLK=P3^4;sbit DIN=P2^3;sbit key=P1^0;char num1=0;num=1;num2;char k;uchar code table[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,0xFE};//0到F及off的代码void wei(uchar x); //声明函数void delay(uchar ms);void display(char wei,char shu);void clear164();uchar keyscan();void main(){clear164();wei(1);P0=0x03; //初始化显示的数为0,位数为第一位while(1){k=keyscan();switch(k){case 8:{++num2;if(num2>7) num2=0; }break; //最左边按键(原理图中的第七个):小数点循环移位case 1:{++num;if(num>7) num=0; };break; //按向右键(原理图中的第六个):显示数字右移一位case 5:{num1--;if(num1<0) num1=9;}break; //按向下键:最右边一位数码管数值减加1(9-0),到0时减1回到9case 4:{num1++;if(num1>9) num1=0;}break; //按向上键:最右边一位数码管数值加1(0-9),到9时加1回到0case 7:{--num;if(num<0) num=7;};break; //按向左键:显示数字左移一位}display(num2,16);display(num,num1);delay(2);}}void wei(char x) //数码管第X位显示{ char j;for (j=1;j<9;j++){if (x==j){ DIN=0;CLK=0;CLK=1;}else{DIN=1;CLK=0;CLK=1;}}P0=0xFE;}void delay(uchar ms) // 延时子程序(晶振12M){uchar i;while(ms--){for(i = 0; i < 120; i++);}}uchar keyscan(){char i,j;j=0;clear164();P0=0xff; //清除没有用到的位显示DIN=0;for(i=0;i<8;i++){CLK=0;CLK=1;DIN=1;if(key==0) //判断检测端口是否为0,若是就为按键值{delay(10);if(key==0){while(!key); //松手检测j=i+1;}}}return j;}void clear164()//将164输出所以清零{char k;for(k=0;k<8;k++){DIN=1;CLK=0;CLK=1;}}void display(char wei,char shu){uchar m,n;clear164();DIN=0;for(n=wei;n>0;n--)//去掉没有显示的位数{CLK=0;CLK=1;DIN=1;}CLK=0;CLK=1;P0=table[shu]; //显示号码的位数delay(5);for(m=8-wei;m>0;m--)//去掉剩下的位数{DIN=1;CLK=0;CLK=1;}}实验思考题1、当按加1键时,每按一次数码管值变化可能超过1,是什么原因?答:1)因为,按键在闭合和断开过程中出现一段抖动期,由于按键的不稳定性引起的,这是会呈现一串脉冲,可能是在松手时没去抖动。

实验3 键盘

实验3 键盘
D7:MOV P0,#0F0H; MOV A,P0; CJNE A,41H,D6; CALL DISPLAY JMP D7 D6:MOV A,41H ADD A,50H; CJNE A,#0EEH,D5 ;显示按键值1 D5:CJNE A,#0DEH,D4; ;显示按键值2 ……
【实验内容】 实验内容】
实验 内容 实验 电路 程序 设计 实验 说明
实验 目的
实验目的
了解键盘 输入的特点
独立式键盘 接口原理
行列式键盘 原理及其 按键识别方法
键盘输入特点
列线 +5V 行线 波形P231
通过对行线电平的检测, 可以确认按键是否按下来自软件消抖独立式键盘
+5V
查 询 方 式
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7
1
EE
2
DE
3
BE
4
7E
5
ED
6
DD
7
BD
8
7D
9
EB
10
DB
11
BB
12
7B
13
E7
14 15 16
D7 B7 77
+5V
实 验 电 路
1 5 9 13
2 6 10 14
3 7 11 15
4 8
P0.0 P0.1 P0.2
12 P0.3 16
P0.4 P0.5 P0.6 P0.7
【程序设计提示】 程序设计提示】
ORG 00H MAIN:30H—37H清0 START:CALL DISPLAY MOV P0,#0FH;列出0 MOV A,P0;读行 CJNE A,#0FH,D8; JMP START D8:MOV 50H,A;存 MOV P0,#0F0H;行出0 MOV A,P0;读列 MOV 41H,A;存

实验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.掌握独立式按键和矩阵式键盘结构和工作原理。

2.掌握矩阵式键盘的按键识别和扫描方法。

3.掌握独立式按键和矩阵式键盘的接口电路及其编程应用。

二、实验说明键盘的接口形式有两种:独立式按键接口和矩阵式键盘接口。

独立式按键是直接用I/O口构成的单个按键电路,其特点是每个按键单独占用一根I/O 口,每个按键的工作不会影响其它I/O口的状态。

独立式按键电路配置灵活,程序设计简单,但这种键盘占用硬件资源多,每个按键必须占用一根I/O口,因此,在按键较多时,I/O 口浪费较大,不宜采用。

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

一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。

矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V 上。

当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。

这是识别按键是否按下的关键。

然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。

识别按键的方法很多,其中,最常见的方法是扫描法。

按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平。

显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平。

只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。

CPU根据行电平的变化,便能判定相应的行有键按下。

在单片机应用系统中,键盘是人机对话不可缺少的组件之一。

在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。

键盘接口实验实验报告总结及程序.doc

键盘接口实验实验报告总结及程序.doc

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

二、实验仪器与设备1.微机 1 台 C51 集成开发环境 3 。

Proteus 仿真软件三、实验内容1.用 Proteus 设计一矩阵键盘接口电路。

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

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

参考电路见后面。

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

3.将 P1 口矩阵键盘改为 8 个独立按键(用中断方式设计),键盘通过74LS30 (8 输入与非门)和 74LS04(六反相器)与 /INT0 相连,重新编写识别和显示程序。

四、实验原理矩阵键盘识别一般应包括以下内容:1)判别有无键按下。

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

3)用计算法火或查表法得到键值。

4)判断闭合键是否释放,如果没释放则继续等待。

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

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

六、电路设计及调试、程序1)程序设计:矩阵键盘#include<>#define uchar unsigned char#define uint unsigned intuchar codetable1[]={0x00,0x01,0x21,0x61,0x65,0x6d,0x7d,0x7f};uchar codekey_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};R4S6S5 S4S3 1nF19XTAL1P0.0/AD0 39S2X138S1 P0.1/AD1 U1S0CRYSTALP0.2/AD2 3736 9SRG8R318 XTAL2P0.3/AD3 R35P0.4/AD4C1348P0.5/AD5 C1/->3322pF9P0.6/AD6 32RSTP0.7/AD71 31uFP2.0/A8 212&1DR1722P2.1/A923 4S0P2.2/A1029 2410kPSEN P2.3/A11S130 25 5ALE P2.4/A123126EAP2.5/A13S2 27 6P2.6/A1428P2.7/A1510S3P1.0 1P1.0 P3.0/RXD 10P1.1 2 1111S4P1.1 P3.1/TXDP1.2 3 12P1.2 P3.2/INT0P1.3 4 1312S5P1.3 P3.3/INT1P1.4 5 14P1.4 P3.4/T0P1.5 6 1513S6P1.5 P3.5/T1 P1.6 7 16P1.6 P3.6/WRP1.7 81774LS164P1.7 P3.7/RDP1.0P1.1P1.2P1.3 P1.4 P1.5 P1.6 P1.71U3:A2 64 574LS21R41nF 19XTAL1P0.0/AD039X138P0.1/AD1U1CRYSTALP0.2/AD2 3736 9SRG8R318 XTAL2P0.3/AD3 R35 P0.4/AD434 8C1P0.5/AD5 C1/->33P0.6/AD622pF932RSTP0.7/AD713&1uFP2.0/A8 21 21DR1722P2.1/A923 4S0P2.2/A10R1 R2 R5 R6 R7 R8 R9 R1029 PSEN24 10kP2.3/A11 5S110k10k10k10k10k10k10k10k30ALE P2.4/A12 253126EAP2.5/A13276S2 P2.6/A14 28P2.7/A15S310P1.0 1 P1.0 P3.0/RXD 10P1.1 2 1111S4P1.1 P3.1/TXDP1.2 3 12P1.2 P3.2/INT0P1.3 4 13 12S5 P1.3 P3.3/INT1 P1.4 5 14 P1.4 P3.4/T0P1.5 6 1513S6P1.5 P3.5/T1P1.6 7 16P1.6 P3.6/WR P1.781774LS164P1.7P3.7/RD2U2:A74LS0411U323485 6 11 1274LS30验中在做矩阵键盘实验时, 会出现进入中断一次后跳出来再按键不会再进入中断显示的情况原因是:没有在中断函数最后令 P1=0xf0,在边沿触发方式下退出中断程序时P1=0xf ,外部中断 0 为低电平,不会有下降产生, 仅执行一次中断后再不会有中断产生,即使有按键按下。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验四 LED及键盘接口实验

实验四  LED及键盘接口实验

实验四LED显示器及键盘接口实验
实验电路见文件EX04_1.DSN和EX04_2.DSN,两电路完全等价,区别在于EX04_1.DSN中是由分离LED数码显示管和按扭元件组成LED显示器和键盘;EX04_2.DSN是由封装元件组成LED显示器和键盘。

程序功能:
1、当键盘输入数字时,新输入的数显示在显示器的最右端,原来的显示左移一位。

2、当输入‘*’或‘#’时,清除所有显示的内容。

参考:
1、可参考教材P169~176,注意实验电路中使用的是8255,教材使用的是8155,两者
在初始化命令设置和寻址上有区别。

2、8255的命令控制字详见微机原理教材。

控制字
在实验电路中的地址分配如下:PA 0000H
PB 0400H
PC 0800H
控制0C00H
3、访问8255用MOVX指令。

基于8255的小键盘接口实验报告

基于8255的小键盘接口实验报告

课程:微机原理与接口技术实验实验名称:硬件仿真实验第一页共页系别:理学院实验日期2014年12月12号专业班号:组别:交报告日期2014年12月19号姓名:学号:报告退发(订正、重做)实验名称:基于8255的小键盘接口实验1、实验目的(1)了解8255可编程并行接口芯片的工作原理;(2)掌握8255的应用。

二、实验设备安装有proteus7.10pro的PC一台。

三、实验内容用8255设计一个4*4矩阵键盘的接口,将按键的键值显示在7段数码管上。

实验模拟电路图如下:上图为按下F键后的情形,7段共阴极数码管上显示出F。

程序代码为:程序代码为:POUT MACRO PORT_ADDR,CONTENTSMOV DX,PORT_ADDRMOV AL,CONTENTSOUT DX,ALENDMGETK MACRO PORT_ADDR,MASK,TARGET MOV DX,PORT_ADDRIN AL,DXAND AL,MASKCMP AL,MASKJZ TARGETENDM.model small.8086.stack.code.startupK0:pout 1006h,81hK1:pout 1000h,dcodepout 1004h,0getk 1004h,0fh,k1mov ah,alpout 1006h,88hpout 1004h,ahgetk 1004h,0f0h,k0or al, ahmov si,0mov cx,16K2:cmp al,kcode[si]jz k3inc siloop K2jmp K0K3:mov al,seg7[si]mov dcode,aljmp K0.datakcode db 07eh,07dh,07bh,077h,0beh,0bdh,0bbh,0b7hdb 0deh,0ddh,0dbh,0d7h,0eeh,0edh,0ebh,0e7hseg7 db 03fh,006h,05bh,04fh,066h,06dh,07dh,007hdb 07fh,06fh,077h,07ch,039h,05eh,079h,071h4、 实验小结通过实验对反转法键码识别原理和8255工作原理有了进一步了解,也对编程有了进一步熟悉。

实验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、将键盘接口程序加上注释语句,并说出其功能。

键盘接口实验实验报告及程序

键盘接口实验实验报告及程序

键盘接口实验实验报告及程序一、实验目的本次实验的主要目的是深入了解计算机键盘接口的工作原理,并通过编程实现对键盘输入的读取和处理。

通过这个实验,我们将掌握如何与计算机硬件进行交互,提高对计算机系统底层运作的认识。

二、实验原理计算机键盘通常通过 PS/2 接口或 USB 接口与主机相连。

在本次实验中,我们以 PS/2 接口为例进行研究。

PS/2 接口使用双向同步串行协议进行通信,数据传输速率约为 10 167Kbps 。

键盘在向主机发送数据时,每个字节包含 11 位,分别是起始位(总是 0 )、 8 位数据位(低位在前)、校验位(奇校验)和停止位(总是 1 )。

主机通过向键盘发送命令来控制键盘的工作模式和获取相关信息。

三、实验设备及环境1、计算机一台2、开发板及相关配件3、编程软件(如 Keil 等)四、实验步骤1、硬件连接将开发板与计算机通过相应的接口连接好,确保连接稳定。

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

初始化相关的硬件接口和寄存器。

编写读取键盘输入数据的程序代码。

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

将编译成功的程序下载到开发板中。

4、实验测试按下键盘上的不同按键,观察开发板的输出结果。

检查读取到的数据是否准确,校验位是否正确。

五、程序代码实现以下是一个简单的基于 C 语言的键盘接口读取程序示例:```cinclude <reg51h>//定义 PS/2 接口相关引脚sbit PS2_CLK = P1^0;sbit PS2_DATA = P1^1;//读取一个字节的数据unsigned char ReadByte(){unsigned char data = 0;unsigned char i;while(PS2_CLK == 1);//等待时钟线拉低for(i = 0; i < 8; i++){while(PS2_CLK == 0);//等待时钟上升沿data =(data << 1) | PS2_DATA; //读取数据位}while(PS2_CLK == 1);//等待时钟线拉低return data;}void main(){unsigned char key;while(1){key = ReadByte();//读取键盘输入的数据//在此处对读取到的数据进行处理和显示}}```六、实验结果与分析在实验过程中,我们按下不同的键盘按键,开发板能够准确地读取到相应的键值。

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

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

实验仪器与设备
1.微机1台C51集成开发环境3。

Proteus仿真软件
实验内容
用Proteus设计一矩阵键盘接口电路。

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

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

参考电路见后面。

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

将P1口矩阵键盘改为8个独立按键(用中断方式设计),键盘通过74LS30(8输入与非门)和74LS04(六反相器)与/INT0相连,重新编写识别和显示程序。

实验原理
矩阵键盘识别一般应包括以下内容:
判别有无键按下。

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

用计算法火或查表法得到键值。

判断闭合键是否释放,如果没释放则继续等待。

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

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

电路设计及调试、程序
程序设计:矩阵键盘
#include<>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={0x00,0x01,0x21,0x61,0x65,0x6d,0x7d,0x7f};
uchar code
key_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0 xd7,0xb7,0x77};
验中在做矩阵键盘实验时,会出现进入中断一次后跳出来再按键不会再进入中断显示的情况原因是:
没有在中断函数最后令P1=0xf0,在边沿触发方式下退出中断程序时P1=0xf,外部中断0为低电平,不会有下降产生,仅执行一次中断后再不会有中断产生,即使有按键按下。

2.实验中出现了进入中断跳不出来的情况,原因是:
给窗口送键值显示后没加while(!TI); TI=0;语句
总结:实验前应画出程序流程图认真分析,有助于程序的编写。

在矩阵键盘的实验中,若选择电平触发,不在中断后令P1=0xf0,则跳出中断后检测到列线全为零,又产生中断,进入中断后扫描按键发现无按键按下又退出,列还是全为零又进入中断,如此反复,效率很低。

相关文档
最新文档