4×4矩阵键盘控制LED原理及软硬件设计、仿真调试 毕业论文.doc_第1页
4×4矩阵键盘控制LED原理及软硬件设计、仿真调试 毕业论文.doc_第2页
4×4矩阵键盘控制LED原理及软硬件设计、仿真调试 毕业论文.doc_第3页
4×4矩阵键盘控制LED原理及软硬件设计、仿真调试 毕业论文.doc_第4页
4×4矩阵键盘控制LED原理及软硬件设计、仿真调试 毕业论文.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

应用电子专业44矩阵键盘控制led原理及软硬件设计、仿真调试毕业论文目 录1 引 言.12 44矩阵键盘控制led工作原理及软硬件设计、仿真调试.22.1 44矩阵式键盘识别显示系统概述.22.2 44矩阵式键盘原理.32.3 44矩阵式键盘控制led显示方法.42.31数码管动态扫描显示电路.42.3.2 8位数码管显示程序的编程方法.52.3.3任务说明.62.3.4原理图绘制说明.62.4电路设计及电路图.82.4.1 44矩阵式键盘软件编程.92.5 44矩阵式键盘软件仿真调试分析.142.5.1 proteus仿真说明.143结 论.19 4谢 词.20 5参考文献.21 一 引言本实验是在基于protues平台下,运用 80c51芯片编写程序设计实现的矩阵式键盘。通过对矩阵键盘的硬件电路的设计及对其进行程序汇编和运行,通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的识别。用单片机的并行p1口连接4*4矩阵键盘,并以单片机的p1.0p1.3口作键盘输入的列线,以单片机的p1.4p1.7口作为键盘输入的行线,然后用p0.0p0.6作输出线,通过电阻在显示器上显示不同的符号按键 “0f”1。在硬件电路的基础上加上软件程序的控制来设计实现。矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以n个端口连接控制n*n个按键,即时在led数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。矩阵式键盘又称行列键盘,它是用n条i/o线作为行线,n条i/o线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为n*n个2。这种行列式键盘结构能有效地提高单片机系统中i/o口的利用率。矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。 二 44矩阵键盘控制led原理及软硬件设计、仿真调试2.1 44矩阵式键盘识别显示系统概述 矩阵式键盘模式以n个端口连接控制n*n个按键,实时在led数码管上显示按键信息。显示按键信息,省下了很多的i/o端口为他用,相反,独立式按键虽编程简单,但占用i/o口资源较多,不适合在按键较多的场合应用。并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键。矩阵式键盘简介:矩阵式键盘又称行列键盘,它是用n条i/o线作为行线,n条i/o线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为n*n个2。这种行列式键盘结构能有效地提高单片机系统中i/o口的利用率。最常见的键盘布局如图1所示。一般由16个按键组成,在单片机中正好可以用一个p口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。在me300b单片机开发系统中使用数码管来显示信息时,要将jp2的2、3端短接。见图1 图1 键盘布局 图2 键盘布局矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。 2.2 44矩阵式键盘原理行列式键盘的接法比独立式键盘的接法复杂,编程实现上也会比较复杂。但是,在占用相同的io端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多,其原理图如图3所示。 图3 44矩阵式键盘原理图实际的工程中,可能会使用pic16c5x这种通用的可编程的键盘、显示接口器件,使用pic16c5x单片器件就能够完成键盘输入和显示控制两种功能。行列式键盘的工作方式是先用列线发送扫描字,然后读取行线的状态,查看是否有按键按下。键盘部分提供一种扫描的工作方式,可以和具有64个按键的矩阵键盘相连接,能对键盘不断扫描、自动消抖、自动识别按下的键,并给出编码,能对双键或n个键同时按下的情况实行保护。在显示部分,它可以为发光二极管、荧光管及其他显示器提供按扫描方式工作的显示接口,而且为显示器提供多路复用信号,可以显示多达16位的字符或数字。键盘中有无按键按下是由列线送入全扫描字、行线读入行线状态来判断的,其方法 是将列线的所有io线均置成低电平,然后将行线电平状态读入累加器a中,如果有 键按下,总会有一根行线被拉至低电平,从而使行输入不全为1。键盘中哪一个键按下可由列线逐列置低电平后,检查行输入状态来判断,其方法是依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的键不在此列,如果不全为1,则所按下的键必在此列,而且是在与0电平线相交的交点上的那个键。2.3 44矩阵式键盘控制led显示方法2.3.1数码管动态扫描显示电路图4 数码管电路在me300b开发系统中,采用了8位数码管动态扫描显示。它将所有数码管的8个段线相应地并接在一起,并接到 at89s51的p0口,由p0口控制字段输出。而各位数码管的共阳极由at89s51的p2口控制q20q27来实现8位数码管的位输出控制。这样,对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此,同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。2.3.2 8位数码管显示程序的编程方法根据要使用的数码管的具体位置来确定扫描初值和扫描方向。根据使用数码管的个数来确定扫描的位数。准备好要显示的数据,放入相应的显示单元中。= 8位数码管显示子程序;从右至左依次点亮8个数码管=display: mov r1,#07fh ;扫描初值送入r1 mov r2,#08h ;扫描位数送入r2 mov r0,#30h ;开始填充显示单元disp1: mov a,r0 ;显示内容送入a mov dptr,#table ;获得表头 movc a,a+dptr ;查表获得显示数据 mov p0,a ;显示单元数据 mov p2,r1 ;开始显示当前位 mov a,r1 ;准备显示下一位 rr a mov r1,a inc r0 ;取下一个单元地址 lcall delay2ms ;延时 2 ms djnz r2,disp1 ;重复显示下一个 ret ;显示完成,返回因键值显示只需用一位数码管,可将上面的显示程序进行优化,得到下面的显示程序。=键值显示子程序=key_plaer: mov a,30h ;键值数据送入a mov dptr,#table ;取段码表地址 movc a,a+dptr ;查显示数据对应段码 mov p0,a ;段码送入p0口 clr p2.7 ;第一个数码管显示 call delay2ms setb p2.7 rettable: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh ;0f(1)在“单片机系统”区域中,把单片机的p1.0p1.7端口通过8联拨动拨码开关jp3连接到“4*4行列式键盘”区域中的m1m4,n1n4端口上3。即将p1口作为整个系统的输入接口电路 。 (2)在“单片机系统”区域中,把单片机的p0.0p0.6端口通过上拉电阻连接到“静态数码显示模块”区域中的任何一个ag端口上4。 (3)此实验采用的是共阴极led显示块,只有当ag端口输入高电平时才有效,即显示块中的对应的发光二极管才发光,低电平时不显示,通过ag端口的不同输入使显示器显示不同的字符。2.3.3任务说明 at89c51单片机对44矩阵键盘进行动态扫描,当按键盘的键时,可将相应按键值(0f)实时显示在数码管上;按照设计任务在proteus 7 professional中绘制电路原理图;根据设计任务的要求编写程序,画出程序流程图,并在proteus下进行仿真,实现相应功能2.3.4原理图绘制说明1. 原理图说明 本实验是at89c51单片机对44矩阵键盘进行动态扫描,当按键盘的键时,可将相应按键值(0f)实时显示在数码管上。44矩阵键盘是用4条i/o线作为行线,4条i/o线作为列线,在行线和列线的交叉点上设置一个按键,每个按键有它的行值和列值,用4条行线和列线分别接p1.0-p1.7,要进行数码管动态扫描,就要将数码管的七段af相应的与p0.0-p0.6相连接,即把输入端口p1.0-p1.7连接到44行列式按键上作为输入,p0.0-p0.6作为输出端口控制共阳级数码管a-g,对应的a-g通过程序进行点亮或者熄灭来显示数值(0f)。2.原理图绘制 (1)打开proteus软件,进入其界面,然后新建一个图纸文件,软件默认为landspacea4纸张,符合我们的要求,所以不需要修改。(2) 开始绘图,点击按钮p,弹出选择添加器件框图,如图1所示,在keywords里直接输入所需器件的名称或者在category的下面各个选项里一次查找所需的器件名称,然后点击ok 图5 选择添加器件框图 (3)依次添加at89c51芯片,7seg-com-cathode共阳极的7段数码管,16个按键,八个电阻r0r7,一个晶片x1,3个电容,地及电源。(4)按照设计的要求正确连接电路,连接时注意管脚的分配及at89c51的工作原理。(5)对连接好的电路图进行仿真,如有错误要先按下暂停,然后对电路作进一步的调整与修改,再进行仿真,保存原理图文件2.4 电路设计及电路图把单片机的p1.0p1.7端口通过8联拨动拨码开关连接到“4*4行列式键盘”,其中p1.0-p1.3作为列线,p1.4-p1.7作为行线,把单片机的p0.0p0.6端口连接到共阴极“静态数码显示模块”区域中对应的ag端口上;系统首先通过cpu对全部键盘进行扫描,即把第一根行线置为“0”状态,其余行线置于“1”状态,读入输入缓冲器的状态,若其状态全为“1”表明该行无键按下,再将第二根行线置为“0”状态,同样读入输入缓冲器的状态,如其状态也全为“1”,则置第一根行线置为“0”状态,以此类推5。如读入输入缓冲器的状态不全为“1”,确定哪一根列线为“0”状态,当某个键的行线和列线都为“0”状态时,表明该键按下。最后通过显示程序将该键的序号显示出来。(如下图6)图6 44矩阵式键盘电路图2.4 44矩阵式键盘软件编程 key equ 30h org 0000h;入口地址sjmp start start: mov p0,#00h jixu:mov p1,#0ffh;判第0行是否有键按下clr p1.4 ;将p1.4清零mov a,p1 anl a,#0fh ;屏蔽高4位xrl a,#0fh jz nokey0 ;a为0,转向nokey0lcall delay10ms ;延时,去抖动 mov a,p1 ;再确认一次anl a,#0fh xrl a,#0fh jz nokey0 ;a为0,转向nokey0mov a,p1 ;判哪一个键按下anl a,#0fh cjne a,#0eh,next1 mov key,#0 ljmp ok ;转向显示程序next1:cjne a,#0dh,next2 mov key,#1 ljmp ok next2:cjne a,#0bh,next3 mov key,#2 ljmp ok next3:cjne a,#07h,nokey0 mov key,#3 ljmp ok nokey0:mov p1,#0ffh ;判第1行是否有键按下clr p1.5 ;将p1.5清零mov a,p1 anl a,#0fh ;屏蔽高4位xrl a,#0fh jz nokey1 ;a为0,转向nokey1lcall delay10ms ;延时,去抖动mov a,p1 ;再确认一次anl a,#0fh xrl a,#0fh jz nokey1 ;a为0,转向nokey1mov a,p1 ;判哪一个键按下anl a,#0fh cjne a,#0eh,next5 mov key,#4 ljmp ok next5:cjne a,#0dh,next6 mov key,#5 ljmp ok next6:cjne a,#0bh,next7 mov key,#6 ljmp ok next7:cjne a,#07,nokey1 mov key,#7 ljmp ok nokey1:mov p1,#0ffh ;判第2行是否有键按下clr p1.6 ;将p1.6清零mov a,p1 anl a,#0fh ;屏蔽高4位xrl a,#0fh jz nokey2 ;a为0,转向nokey2lcall delay10ms ;延时,去抖动mov a,p1 ;再确认一次anl a,#0fh xrl a,#0fh jz nokey2 ;a为0,转向nokey2mov a,p1 ;判哪一个键按下anl a,#0fh cjne a,#0eh,next9 mov key,#8 sjmp ok next9:cjne a,#0dh,next10 mov key,#9 sjmp ok next10:cjne a,#0bh,next11 mov key,#10 sjmp ok next11:cjne a,#07,nokey2 mov key,#11 sjmp ok nokey2:mov p1,#0ffh ;判第2行是否有键按下clr p1.7 ;将p1.6清零mov a,#p1 anl a,#0fh ;屏蔽高4位xrl a,#0fh jz next16 ;a为0,转向next16lcall delay10ms ;延时,去抖动mov a,p1 ;再确认一次anl a,#0fh xrl a,#0fh jz next16 ;a为0,转向next16mov a,p1 ;判哪一个键按下anl a,#0fh cjne a,#0eh,next13 mov key,#12 sjmp ok next13:cjne a,#0dh,next14 mov key,#13 sjmp ok next14:cjne a,#0bh,next15 mov key,#14 sjmp ok next15:cjne a,#07h,next16 mov key,#15 sjmp ok next16:ljmp jixu ok:mov a,key ;查表显示mov dptr,#table movc a,a+dptr mov p0,a ljmp jixu delay10ms:mov r6,#10 ;延时d1:mov r7,#248 djnz r7,$ djnz r6,d1 ret table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh,6fh,77h,7ch,39h,5eh,79h,71h end开始扫描是否有键按下y识别是哪一个键按下通过p0口查询显示该序号n图7 系统程序图y2.5 44矩阵式键盘软件仿真调试分析在proteus中设计好实验电路后,然后在proteus编程环境中进行程序设计和编译,生成hex文件并加载hex文件,点启动,运行仿真6。由于开始时p0口的值被赋为00h,p1口的值为ffh,当无键按下时,将p1.4口置0,再将p1口的值送a,屏蔽高4位,与0f相异或后,a的值变为0,即第0行没有键按下,转入nokey0子程序中,重新赋值p1口的值为ffh,将p1.5口置0后送a,屏蔽高4位,与0f相异或后,a的值又变为0,即第1行没有键按下7,转入nokey1子程序中,同理,可以得知第2行和第3行也没有键按下。因而,p0口没有被重新赋值,保持为00h不变,又显示器是共阴极的,此时p0.0-p1.6口均为“0”,即“a-g”段均不显示,从而显示器不显示,并转向程序的开始继续循环扫描键盘,直到有键按下为止。2.5.1proteus仿真说明1. 现在keil软件里编译连接c程序,使生成.hex文件。c程序:#include#define uchar unsigned char#define uint unsigned int#define scanport p1sbit spk=p30;uchar code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71;uchar uca_linescan4=0xef,0xdf,0xbf,0x7f;uchar uckeyscan()uchar temp=0; uchar ucrow=0,ucline=0; for(ucline=0;ucline4;ucline+)scanport=uca_linescanucline; temp=scanport & 0x0f; if(temp!=0x0f) switch(temp)case 0x0e: ucrow=10;break; case 0x0d: ucrow=20;break;case 0x0b: ucrow=30;break;case 0x07: ucrow=40;break;default: ucrow=50;break;break;scanport=0x0f; return ucrow+ucline+1; void vkeyprocess(unsigned char uckeycode)switch(uckeycode)case 11:p0=table0;spk=1;break; case 12:p0=table1;spk=1;break; case 13:p0=table2;spk=1;break;case 14:p0=table3;spk=1;break; case 21:p0=table4;spk=1;break; case 22:p0=table5;spk=1;break; case 23:p0=table6;spk=1;break;case 24:p0=table7;spk=1;break; case 31:p0=table8;spk=1;break; case 32:p0=table9;spk=1;break; case 33:p0=table10;spk=1;break;case 34:p0=table11;spk=1;break;case 41:p0=table12;spk=1;break; case 42:p0=table13;spk=1;break;case 43:p0=ta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论