本科实验报告实验名称:并行接口的键盘控制课程名称:计算机原理与应用实验实验时间:2014年5月12任课教师:张笈实验地点:信息系统与安全对抗实验中心实验教师:高平实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:信息与电子学院同组搭档:专业:电子科学与技术成绩:一、实验目的1.掌握简单并行接口(8255A)的工作原理及使用方法。2.了解小键盘的工作原理,学会设计小键盘的接口技术。3.利用8255并行接口芯片作为小键盘的接口电路,掌握它们之间的线路连接。二、实验内容与步骤1.接线:PA0~PA3/8255接行0~行3/4X4键盘PB0~PB3/8255接列0~列3/4X4键盘CS/8255接Y1/IO地址2.编程:实现在按下小键盘上的任意键后,在微机屏幕上显示相应字符。它们的对应关系如下:小键盘显示0——01——12——23——34——45——56——67——7小键盘显示8——89——9A——AB——BC——CD——DE——EF——F三、实验原理1.8255A芯片工作方式的设置1)基本控制字基本控制字的格式如下图所示:各位含义如下:D7:设定工作方式标志,1有效。D6、D5:A组方式选择00——方式001——方式11X——方式2D4:端口A功能(1输入,0输出)D3:端口C高四位功能(1输入,0输出)D2:B组方式选择(0=方式0,1=方式1)D1:端口B功能(1输入,0输出)D0:端口C低四位功能(1输入,0输出)2)端口C复位控制字端口C复位控制字如下图所示:各位含义如下:D7:位置0置一标志,0有效。D6、D5、D4:不用,可任意值。D3、D2、D1:端口C的每位选择,由111~000分别表示第7——第0位。D0:位置1/置0,1=置1,0=置0。2.小键盘扫描键盘阵列由8255芯片控制,并将行列连接到8255芯片A口,B口,还需要链接8255芯片的片选到Y1/IO地址(288H~28FH),以使键盘阵列由8255芯片控制;8255A与小键盘借口线路如下图:首先进行键盘的行扫描,确定是否有按键按下,当按键按下时,电平变为低电平。然后查找具体的按键,这样进行一次扫描。四、编程方法程序原理是采用行扫描法,对键盘的每行进行——扫描,第一步应该判断是否有键按下,并确定是哪行;第二步是判断那个行哪一个键被按下,最后显示在屏幕上。对于按键还要加上防抖动程序。程序流程如下:开始五、实验心得:这是第一次做计算机原理的上机实验,实验前老师简单讲了一下试验箱的用法和本节课所用部分的连线接法。在理论课上老师也给出了实验的步骤和代码编写的示例。总的来说实验不是很困难,但是如果完全自己编写,应该很是会遇到很多问题,所以课下还是需要多练习。在程序编译并且连接之后,按下键盘会有抖动,有时候会出现两个字母,所以需要把延时改长一点时间。做完试验后,我分别尝试了两个改变。一个是改变键盘的连接线,还有就是改变开头tab1,tab2,tab3,tab4的初始定义。当两个相互对应的时候实验结果正确。实验大部分内容,老师上课都已经讲过了,要想完全掌握还需要多做实践。六、程序代码datasegmenttab1DB'F','E','D','C'tab2DB'B','A','9','8'tab3DB'7','6','5','4'tab4DB'3','2','1','0'kbDB00eh,00dh,00bh,007hportequ288h;Y1/IO地址dataendsstacksegmentstadb256dup(?)topequsizestastackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfarmovax,datamovds,axmovax,stackmovss,axmovsp,top;初始化8255movdx,port+3moval,10000010boutdx,albegin:moval,0;全局使能movdx,portoutdx,almovdx,port+1inal,dxandal,0fhcmpal,0fhjebegin;若有键按下,查找哪个键moval,00001110b;假设某一行movdx,portoutdx,almovdx,port+1;对b端口检测inal,dxleabx,tab1cmpal,0fhjnedisplaymoval,00001101b;下一行扫描movdx,portoutdx,almovdx,port+1inal,dxleabx,tab2cmpal,0fhjnedisplaymoval,00001011bmovdx,portoutdx,almovdx,port+1inal,dxleabx,tab3cmpal,0fhjnedisplaymoval,00000111bmovdx,portoutdx,almovdx,port+1inal,dxleabx,tab4cmpal,0fhjnedisplaynopjmpbegin;查找按下的键,并显示display:movdi,bxleasi,kb;存小键盘扫描码next:cmpal,[si];查键盘扫描码表jeshow;找到了,则显示否则继续incsiincdijmpnextshow:;显示movah,2movdl,[di]int21hcmpdl,'F'jeovercalldelayjmpbegin;重新开始查询over:movah,4chint21hmainendpdelayprocnear;延时循环pushdipushcxmovcx,01Fhmovdi,100again:nopdecdijnzagaindeccxjnzagainpopcxpopdiretdelayendpcodeendsendmain