C51单片机技术------入门与提高新疆师范大学物理与电子工程学院刘楚湘主讲第十章MCS-51单片机与键盘、显示器、打印机的接口设计10.1键盘接口原理1.键盘输入的特点第十章MCS-51单片机与键盘、显示器、打印机的接口设计2.按键的确认键的闭合与否,反映在行线输出电压上就是呈现高电平或低电平,如果高电平表示键断开.低电平则声示键闭合,通过对行线电平高低状态的检测,便可确认按键按下与否。为了确保CPU对一次按键动作只确认一次按键有效,必须消除抖动期t1和t3的影响。下面将介绍消除抖动的措施。3.如何消除按键的抖动常采用软件来消除按键抖动。采用软件来消除按键抖动的基本思想是:在第一次检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认为该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10ms的子程序后,检测该行线为高电平,说明按键确实已经松开。采取以上措施,躲开了两个抖动期t1和t3,从而消除了按键抖动的影响。第十章MCS-51单片机与键盘、显示器、打印机的接口设计10.2.1键盘接口的工作原理1.独立式键盘接口第十章MCS-51单片机与键盘、显示器、打印机的接口设计第十章MCS-51单片机与键盘、显示器、打印机的接口设计图10-9程序如下:第十章MCS-51单片机与键盘、显示器、打印机的接口设计KEYIN:MOVDPTR,#BFFFH;键盘地址BFFFHMOVXA,@DPTR;读键盘状态ANLA,#01FH;屏蔽高3位00011111MOVR3,A;保存键盘状态值LCALLDELAY10;调用延时10ms子程序,软件去键盘抖动MOVXA,@DPTR;再读键盘状态ANLA,#01FH;屏蔽高3位CJNEA,R3,RETURN;2次结果不一样,说明是抖动引起的,转RETURN地址译码关系图键盘地址BFFFH第十章MCS-51单片机与键盘、显示器、打印机的接口设计CJNEA,#1EH,KEY2;2次结果一样,有键按下。再判是否S1键按下?S1键未按下,转KEY200011110LJMPPKEY1;是S1键按下,转S1键处理子程序PKEY1KEY2:CJNEA,#1DH,KEY3;S2键未按下,转KEY300011101LJMPPKEY2;S2键按下,转PKEY2处理KEY3:CJNEA,#1BH,KEY4;S3未按下,转KEY400011011LJMPPKEY3;S3按下,转PKEY3处理第十章MCS-51单片机与键盘、显示器、打印机的接口设计KEY4:CJNEA,#17H,KEY5;S4键未按下,转KEY500010111LJMPPKEY4;S4按下,转PKEY4处理KEYS:CJNEA,#0FH,PASS;S5未按下,转RETURN00001111LJMPPKEY5;S5按下,转PKEY5处理RETURN:RET;重键或无键按下,从子程序返回PKEY1:……;S1键处理子程序PKEY2:……;S2键处理子程序PKEY3:……;S3键处理子程序PKEY4:……;S4键处理子程序第十章MCS-51单片机与键盘、显示器、打印机的接口设计2.行列式键盘接口行列式键盘工作原理(1)行列式键盘的结构第十章MCS-51单片机与键盘、显示器、打印机的接口设计①扫描法第1步,识别键盘有无键被按下;第2步,如有键被按下,识别出具体的按键。首先把所有的列线均置为低电平,检查各行线电平是否有变化,如果有变化,则说明有键被接下,如果没有变化,则说明无键被按下。其次,先把某一列置低电平,其余各列置为高电平,检查各行线电平的变化,如果某行线电平为低电平,则可确定此行此列交叉点处的按键被按下。(2)按键的识别方法以图10—10(b)中3号键被按下为例,来说明此键是如何被识别出来的。第十章MCS-51单片机与键盘、显示器、打印机的接口设计第1步,让行线编程为输入线,列线编程为输出线,并使输出线输出为全低电平,则行线中电平由高变低的所在行为按键所在行。第2步,再把行线编程为输出线,列线编程为输入线,并使输出线输出为全低电平,则列线中电平由高变低所在列为按键所在列。结合上述2步的结果,可确定按键所在行和列,从而识别出所按的健。②线反转法第十章MCS-51单片机与键盘、显示器、打印机的接口设计【例】假设3号键被按下,那么第1步即在D0~D3输出全为0,然后读入D4~D7位,结果D4=0,而D5、D6和D7均为1,因此,第1行出现电平的变化,说明第1行有键按下;第2步让D4~D7输出全为0,然后读入D0~D3位,结果D0=0而D1、D2和D3均为1,因此第4列出现电平的变化,说明第4列有键按下。综合上述分析,即第1行第4列按键被按下,此按键即是3号键。第十章MCS-51单片机与键盘、显示器、打印机的接口设计对于独立式键盘,由于按键的数目比较少,可根据实际需要灵活编码。对于行列式键盘,按键的位置由行号和列号惟一确定、所以常常采用依次排列键号的方式对键盘进行编码。以4×4键盘为例,键号可以编码为01H,02H,03H,…,0EH,0FH,10H共16个。(3)键盘的编码第十章MCS-51单片机与键盘、显示器、打印机的接口设计10.2.2键盘的工作方式1.编程扫描方式这种方式就是只有当单片机空闲时,才调用键盘扫描子程序,反复的扫描键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。第十章MCS-51单片机与键盘、显示器、打印机的接口设计端口地址PA口7F00HPB口7F01HPC口7F02H控制寄存器7F03H编程扫描方式的具体步骤(1)设置PA口工作于方式0输出,PC口低4位工作于方式0输入。(2)判断键盘上有无键按下(PA口8位输出全0,读PC口低4位状态)(3)延时10ms来消除按键抖动(4)求按下键的键号(扫描法或线反转法)。(5)等待按键释放后,再进行按键功能的处理操作。第十章MCS-51单片机与键盘、显示器、打印机的接口设计单片机对键盘的扫描也可采用定时扫描方式,即每隔一定的时间对键盘扫描一次。”在这种扫描方式中,通常利用单片机内的定时器,产生10ms的定时中断,CPU响应定时器溢出中断请求,对键盘进行扫描,在有键按下时识别出该键,并执行相应键的处理功能程序。2.定时扫描工作方式为进一步提高单片机扫描键盘的工作效率,可采用中断扫描方式,即只有在键盘有键按下时,才执行键盘扫描程序并执行该按键功能程序,如果无键按下,单片机将不理睬键盘。3.中断工作方式第1层:单片机如何来监视键盘的输入。体现在键盘的工作方式上就是:①编程扫描工作方式;②定时扫描工作方式;③中断扫描工作方式。第2层:确定具体按键的键号。体现在按键的识别方法上就是:①扫描法;③线反转法。第3层:实现按键的功能,执行键处理程序。键盘所做的工作分为3个层次第十章MCS-51单片机与键盘、显示器、打印机的接口设计键盘扫描应用举例(例题10_1~10_3)第十章MCS-51单片机与键盘、显示器、打印机的接口设计10.3键盘/显示器接口设计实例10.3.1利用并行IO芯片8155H实现键盘/显示器接口第十章MCS-51单片机与键盘、显示器、打印机的接口设计第十章MCS-51单片机与键盘、显示器、打印机的接口设计8155H的I/O口地址为7F00H~7F05H,RAM地址为7E00H~7EFFH。8155H的PA口为输出口,控制键盘列线的扫描,PA口同时又是6位共阴极显示器的位扫描口。PB为输出口作为显示器的段码(字型码)口,8155H的PC口作为键盘的行线状态的输入口,故称为键输入口。75452为反相驱动器,7407为同相驱动器。第十章MCS-51单片机与键盘、显示器、打印机的接口设计8155芯片使用介绍第十章MCS-51单片机与键盘、显示器、打印机的接口设计图10—14中的6位显示器采用动态显示的方式。在8051内部RAM中设置6个显示缓冲单元79H~7EH,分别存放显示器要显示的6位数据。8155H的PA口扫描输出总是只有1位高电平,经75452反相后,即显示器的6位中仅有1位公共阴极为低电平,其他位为高电平。8155H的PB口输出相应位的显示数据的段码,使某一位显示某一字符,其它位为暗。依次的改变PA口输出为高的位,PB口输出对应的段码,显示器的6位就动态地显示出由缓冲区中显示数据所确定的字符。显示程序的流程如图10—15所示。00000001位选码→R31.动态显示程序设计第十章MCS-51单片机与键盘、显示器、打印机的接口设计参考程序如下:DIR:MOVR0,#79H;置缓冲器指针初值MOVR3,#01H;位选码的初值送R3MOVA,R300000001LD0:MOVDPTR,#7F01H;DPTR指向8155HPA口MOV@DPTR,A;位选码→8155HPA口(PA0位)最左边LED亮INCDPTR;数据指针指向PB口MOVA,@R0;缓冲区中取出显示数据→AADDA,#0DH;加偏移量(下条指令到表首间所有指令占的单元数)MOVCA,@A+PC;根据显示数据来查表取段码在8031内部RAM中设置6个显示缓冲单元79H~7EH,分别存放显示器要显示的6位数据。8155H的I/O口地址为7F00H~7F05H第十章MCS-51单片机与键盘、显示器、打印机的接口设计DIR1:MOVX@DPTR,A;段码→8155H的PB口ACALLDL1ms;延时1ms,即该位显示1msINCR0;显示数据缓冲区指针指向下一个数据单元MOVA,R3;位选码送入A中(初值R3=01H)JBACC.5,LD1;判断是否扫描到最右边的LED,如到最右边,则返回RLA;位选码向左移一位,准备让右边的下一位LED亮MOVR3,A;位选码送R3中保存AJMPLD0LD1:RET初始的位选码00000001第十章MCS-51单片机与键盘、显示器、打印机的接口设计DSEG:;共阴极LED段码表DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDB31H,6EH,1CH,23H,40H,03HDB38H,00DL1ms:MOVR7,#02H;延时1ms子程序DL:MOVR6,#0FFHDL6:DJNZR6,DL6DJNZR7,DLRET程序中的ADDA,#0DH指令中的“0DH”为偏移量(即为查表指令下一条指令到表首地址标号DESG之间所有指令所占单元之和),在显示数据的基础上加上偏移量,可查到该显示数据所对应的段码。第十章MCS-51单片机与键盘、显示器、打印机的接口设计2.键盘程序设计键盘程序的功能有以下4个方面:(1)判别键盘上有无键闭合:其方法为:首先把所有的列线(PA口)均置为低电平,检查各行线(PC口)电平是否有变化(2)去除键的机械抖动:其方法为延迟一段时间再判别键盘的状态。(3)判别闭合键的键号:方法为对键盘的列线进行逐列扫描,扫描口PA0~PA7依次输出下列编码,即只有1列为低电平,其余各列为高电平:(行列扫描法)PA7PA6PA5PA4PA3PA2PA1PA01111111011111101……1011111101111111第十章MCS-51单片机与键盘、显示器、打印机的接口设计相应地依次读PC口的状态,若PC3~PC0全为1,则列线为0的这1列上没有键闭合。闭合键的键号等于为低电平的列号加上行线为低电平的行的首键号。例如:PA口输出为11111101时,读出PC3~PC0为1101,则第1行第1列相交的键处于闭合状态,第1行的首键号为8,列号为1。因此,闭合键的键号N为:N=行首键号十列号=8+1=9(4)使CPU对键的1次闭合仅作1次处理,采用的方法为等待闭合键释放以后再作处第十章MCS-51单片机与键盘、显示器、打印机的接口设计键盘程序的流程图第十章MCS-51单片机与键盘、显示器、打印机的接口设计KEY1:ACALLKS1;调用判有无键闭合于程序JNZLK1;(A)≠0有键闭合,跳LK1