您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 键盘扫描显示实验原理及分析报告
键盘扫描显示实验原理及分析报告学院计算机工程学院专业计算机科学与技术年级班别09计算机科学与技术1班学号2009404010131学生姓名李雅旖指导教师李永2012年01月JINGCHUUNIVERSITYOFTECHNOLOGY目录一、内容提要二、实验目的三、实验要求四、实验器材五、实验电路六、实验说明七、实验框图八、实验程序九、实验分析十、实验心得十一、参考文献一、内容提要单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机在人们的生活中得到广泛的应用。本文介绍了基于单片机的键盘扫描显示实验,详细讨论了它从软件上实现的过程,以及硬件接口的原理及其实现,根据输出的列码和读取的行码来判断按下的是什在么键,即有按键时向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,理解读取键盘按键的原理,和最简单的单片机接口原理二、实验目的:1、掌握键盘和显示器的接口方法和编程方法。2、掌握键盘扫描和LED八段数码管显示器的工作原理。二、实验要求:在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。实验程序可分成三个模块:1、键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。2、显示模块:将显示单元的内容在显示器上动态显示。3、主程序:调用键输入模块和显示模块。三、实验器材:1、超想-3000TC综合实验仪1台2、KEIL仿真器1台3、计算机1台四、实验电路:这里只是键盘草图,详细原理参见“8155键显模块”。五、实验说明:本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。列扫描码还可以分时用作LED的位选通信号。六、实验框图:列码(0e101H)行码(0e103H)显示缓冲区初始化LED显示读取键值键值转换为显示数据有键输入?否是主程序框图读键输入子程序框图七、实验程序如下:STMOV11H,R7键盘扫描实验OUTBITequ0e101h;位控制口CLK164equ0e102h;段控制口(接164时钟位)DAT164equ0e102h;段控制口(接164数据位)否是否开始输出列扫描信号列扫描信号移位该列有键输入?读入行信号6列扫描完?初始化地址参数按照行列计算键值查表得键码等待键盘释放S待按键释放返回INequ0e103h;键盘读入口ORG0000HLJMPSTAR;==========================================================================KEY1:MOV13H,#06HMOV12H,#20HKEY2:MOVA,12HCPLAMOVR7,AMOVDPTR,#0E101HMOVA,R7MOVX@DPTR,AMOVA,12HCLRCRRCAMOV12H,AMOVDPTR,#0E103HMOVXA,@DPTRMOVR7,AMOVA,R7CPLAMOVR7,AMOVA,R7ANLA,#0FHMOV14H,ADEC13HMOVR7,13HMOVA,R7JZKEYDISMOVA,14HJZKEY2KEYDIS:MOVA,14HJZTESTKEY5MOVA,13HADDA,ACCADDA,ACCMOV13H,AMOVA,14HJNBACC.1,TESTKEYINC13HSJMPTESTKEY2;;=================================================;键盘扫描TESTKEY:MOVA,14HJNBACC.2,TESTKEY1INC13HINC13HSJMPTESTKEY2TESTKEY1:MOVA,14HJNBACC.3,TESTKEY2MOVA,#03HADDA,13HMOV13H,ATESTKEY2:MOVDPTR,#0E101HCLRAMOVX@DPTR,ATEKEY3:MOVR7,#0AHLCALLMLOOPLCALLMLOOP4MOVA,R7JNZTESTKEY3MOVR7,13HMOVA,R7MOVDPTR,#0134HMOVCA,@A+DPTRMOVR7,ARET;==========================================================================TESTKEY4:DB22H;;==========================================================================TESTKEY5:MOVR7,#0FFHRET;==========================================================================GETKEY:MOV10H,#20HMOV0EH,#00HGETKEY1:MOVA,0EHCLRCSUBBA,#06HJNCGOON2MOVDPTR,#0E101HCLRAMOVX@DPTR,AMOVR7,0EHMOVA,#08HADDA,R7MOVR0,AMOVA,@R0MOVR7,AMOV0FH,#00HGETKEY2:MOVA,0FHCLRCSUBBA,#08HJNCGOON1MOVA,11HJNBACC.7,KLOOPMOVDPTR,#0E102HMOVA,#01HMOVX@DPTR,ASJMPKLOOP1;;==========================================KLOOP:MOVDPTR,#0E102HCLRAMOVX@DPTR,AKLOOP1:MOVDPTR,#0E102HMOVXA,@DPTRMOVR7,AMOVA,R7ORLA,#02HMOVR7,AMOVA,R7MOVX@DPTR,AMOVDPTR,#0E102HMOVXA,@DPTRMOVR7,AMOVA,R7ANLA,#0FDHMOVR7,AMOVA,R7MOVX@DPTR,AMOVA,11HADDA,ACCMOV11H,AINC0FHSJMPGETKEY2GOON1:MOVDPTR,#0E101HMOVA,10HMOVX@DPTR,AMOVR7,#01HLCALLMLOOPMOVA,10HCLRCRRCAMOV10H,AINC0EHSJMPGETKEY1GOON2:RET;==========================================================================WAIT:MOVDPTR,#0E100HMOVA,#03HMOVX@DPTR,AMOV08H,#0FFHMOV09H,#0FFHMOV0AH,#0FFHMOV0BH,#0FFHMOV0CH,#00HMOV0DH,#00HWAIT1:LCALLGETKEYLCALLMLOOP4MOVA,R7JZWAIT1LCALLKEY1MOVR6,#00HMOVR6,#00HMOVA,R7ANLA,#0FHMOVR7,AMOVA,#24HADDA,R7MOVDPL,AMOVA,#01HADDCA,R6MOVDPH,ACLRAMOVCA,@A+DPTRMOVR7,AMOV0DH,R7SJMPWAIT1RET;==========================================================================TAB:Q0124:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;?.[Ofm}.Q012C:DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;ow|9^yqQ0134:DB00H,01H,04H,07H,0FH,02H,05H,08H;........Q013C:DB0EH,03H,06H,09H,0DH,0CH,0BH,0AH;........Q0144:DB10H,11H,12H,13H,14H,15H,16H;.......;==========================================================================MLOOP:MOV15H,R7MLOOP1:MOVR7,15HDEC15HMOVA,R7JZMLOOP3MOV16H,#64HMLOOP2:MOVA,16HJZMLOOP1DEC16HSJMPMLOOP2SJMPMLOOP1MLOOP3:RET;==========================================================================MLOOP4:MOVDPTR,#0E101HCLRAMOVX@DPTR,AMOVDPTR,#0E103HMOVXA,@DPTRMOVR7,AMOVA,R7CPLAMOVR7,AMOVA,R7ANLA,#0FHMOVR7,ARET;==========================================================================STAR:MOVR0,#7FHCLRASTAR1:MOV@R0,ADJNZR0,STAR1MOVSP,#16HLJMPWAITEND;==================================================================八.实验分析:一:主程序分析主程序执行步:1:显示缓冲区初始化2:LED显示3:判断是否有键输入。4:如果有键盘输入读取键值:5:键值转换为显示数据二:子程序分析:子程序执行步骤:1:初始化地址参数2:输出列扫描信号列3:扫描信号移位4:读入行信号5:该列有键输入若是则执行6,7,8,若不是则执行9,2,3,4.6按照行列计算键值7查表得键码9:6列扫描完?10:子程序主要代码分析如下:键盘扫描子程序分析:程序段TESTKEY分析:本段程序主要作用是初始化地址参数,将14H放入运算器A中,判断A的值是否不小于ACC.2的值如果是则跳转到TESTKEY1如果不是则A的值加13H再加13H,程序无条件跳转到TESTKEY2TESTKEY:MOVA,14HJNBACC.2,TESTKEY1INC13HINC13HSJMPTESTKEY2程序段TESTKEY1分析:将14H的值放入运算器A中判断A的值是否不小于ACC.3的值如果是则跳转到TESTKEY2如果不是则将A的值加立即数03再放入运算器A中,再将地址13H的值加上运算器A中的值放入A中。再将A中的值放入13H中。TESTKEY1:MOVA,14HJNBACC.3,TESTKEY2MOVA,#03HADDA,13HMOV13H,A程序段TESTKEY2分析:本程序段主要功能是:输出列扫描信号列扫描信号移位具体分析如下:地址指针DPTR指向立即数#0E101H的地址,将运算器A内存放的值的所有位都向左移动1位,将运算器A的值放入地址0E101H中TESTKEY2:MOVDPTR,#0E101HCLRAMOVX@DPTR,A程序段TESTKEY3分析:将立即数#OA放入R7中,程序长跳转到MLOOP,长跳转到MLOOP4将R7中存放的内容放入运算器A中,如果A中的值不等于0则程序跳转到TESTKEY3将13H的值放入R7中,将13H的值放入R7中将R7中的值放入运算器A中,将立即数0134H放入DPTR所指的地址空间,将运算器A的值加上DPTR所指地址的值相加取地址再放入运算器A中,将A中的值放入R7中,子程序结束。TESTKEY3:MOV
本文标题:键盘扫描显示实验原理及分析报告
链接地址:https://www.777doc.com/doc-5883259 .html