矩阵键盘与led灯输出设计.docx
- 文档编号:26578102
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:24
- 大小:369.31KB
矩阵键盘与led灯输出设计.docx
《矩阵键盘与led灯输出设计.docx》由会员分享,可在线阅读,更多相关《矩阵键盘与led灯输出设计.docx(24页珍藏版)》请在冰豆网上搜索。
矩阵键盘与led灯输出设计
交通与汽车工程学院
课程设计说明书
课程名称:
微机原理及应用课程设计
课程代码:
8234570
题目:
4x4矩阵键盘与LED灯输出设计
年级/专业/班:
学生姓名:
学 号:
开始时间:
2012年07月02日
完成时间:
2012年07月06日
课程设计成绩:
学习态度及平时成绩(30)
技术水平与实际能力(20)
创新(5)
说明书(计算书、图纸、分析报告)撰写质量(45)
总分(100)
指导教师签名:
年月日
摘要
矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。
显示按键信息,既降低了成本,又提高了精确度,省下了很多的I/O端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。
并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键,在这种情况下如果用独立式按键的话,显然太浪费I/O端口资源,为了解决这一问题,我们使用矩阵式键盘。
4*4矩阵式键盘采用89C52单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转换成数字量,显示于LED灯上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
关键词:
89C52单片机4*4矩阵LED灯
1引言
问题的提出
矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。
显示按键信息,既降低了成本,又提高了精确度,省下了很多的I/O端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。
并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键,在这种情况下如果用独立式按键的话,显然太浪费I/O端口资源,为了解决这一问题,我们使用矩阵式键盘。
矩阵式键盘简介:
矩阵式键盘又称行列键盘,它是用N条I/O线作为行线,N条I/O线作为列线组成的键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为N*N个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
最常见的键盘布局如图所示。
一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。
3
2
1
0
7
6
5
4
B
A
9
8
F
E
D
C
图1-1矩阵式键盘的按钮
任务与分析
本次设计的系统的控制中心是89C52单片机。
首先,在Protel软件环境中进行硬件电路图的设计。
然后在8052软件环境中进行系统的软件编程,并进行程序源文件的编译和调试,最后生成.hex文件。
此.hex文件是硬件电路运行实现的源代码来源。
把.hex文件加载到AT89C52单片机芯片,然后在Proteus软件环境中运行硬件电路,LED灯就可以正常显示了。
本设计的系统主要由:
AT89C52为中央处理芯片,用于数据处理,初值设定。
矩阵键盘电路是本设计的核心模块,由他提供输入信息并由LED灯显示,用C语言进行编程。
本系统可以分为以下4大模块:
1、AT89C52模块:
用于数据处理,和矩阵电路通信,并控制信息传输过程,采集输入信息并予以处理。
2、矩阵电路模块:
实时输入可以通过软件编程来实现,这种方法需要编制的程序比较简单。
3、LED显示模块:
显示模块采用普通的LED数码管,此模块用于实时的显示输入信息。
4、程序:
包括单片机控制电路的接口程序(实现单片机和矩阵电路及LED灯之间的数据传输过程)和显示程序。
2系统方案设计
系统设计方案
通过查阅相关资料,设计初期共有2个方案供我选择,分别是:
(1)采用89C2051单片机组成的系统;
(2)采用89C52单片机组成的系统。
(1)采用89C2051单片机组成的系统
此系统的硬件部分主要是由89C2051单片机所组成。
该系统硬件结构简单,但是单片机的I/O接口太少,不足以实现多种功能,软件设计部分,程序冗长而复杂,易产生混淆。
(2)采用89C52单片机组成的系统
这个方案采用89C52单片机,LED显示器,4*4键盘来组成系统的硬件。
8052是8051的强化版,接口多于8051,功能稳定,实用性强。
所以,本次设计选用AT89C52单片机组成的系统。
系统总体框图
图2-1系统总体框图
当程序启动后,程序进入初始化阶段。
单片机将从程序中键盘按钮初始化,得到对应的值。
再反馈给LED灯,输入值是多少,就亮多少个灯。
3系统硬件电路设计
89C52单片机
AT89C52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C52是它的一种强化版本。
AT89C52单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3-189C52单片机引脚图
89C52单片机与早期Intel的8051/8751/8031芯片的外部引脚和指令系统完全兼容,只不过用FlashROM替代了ROM/EPROM而已[3]。
89C52单片机内部结构如图所示。
图3-289C52单片机内部结构示意图
各引脚的功能如下:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高[3]。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA:
当/EA保持低电平时,则在此期间CPU只访问外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,则执行内部程序存储器中的程序。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
89C52的主机系统图如下所示:
时钟电路
图3-3中外接晶体以及两个电容构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为30pF左右,晶振频率选
复位电路
为了初始化单片机内部的某些特殊功能寄存器,必须利用复位电路,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。
单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。
复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H,SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。
复位操作有两种情况,即上电复位和手动(开关)复位。
本系统采用上电复位方式。
图3-3单片机主机系统图
矩阵式键盘电路
AT89C52单片机的并行口P1接4×4矩阵键盘,以-作输入线,以-作输出线;P1口输出按键信息,在LED灯上显示相应的亮灭数目。
实际电路图连接如图3-4所示。
图3-4矩阵式键盘电路
由于键盘按钮的不稳定性,所以设计时特别添加了防抖动程序,系统可以一延时程序判定按键是否因为抖动而按下,从而判定是否为有效输入信号其流程图如下所示:
图3-5矩阵键盘流程图
译码显示电路
译码电路中常用的显示器有LED(数码管)和LCD(液晶显示器)。
这两种显示器都具有线路简单、耗电少、成本低、寿命长等优点。
本系统输出结果选用16个LED灯(发光二极管)显示。
正常显示时公共端接低电平(GND),各发光二极管是否点亮取决于各引脚上是否是高电平。
其电路图如图3-6所示。
图3-6译码显示电路
当按键0闭合时,亮1个二极管;
当按键1闭合时,亮2个二极管;
当按键2闭合时,亮3个二极管;
当按键3闭合时,亮4个二极管;
当按键4闭合时,亮5个二极管;
当按键5闭合时,亮6个二极管;
当按键6闭合时,亮7个二极管;
当按键7闭合时,亮8个二极管;
当按键8闭合时,亮9个二极管;
当按键9闭合时,亮10个二极管;
当按键A闭合时,亮11个二极管;
当按键B闭合时,亮12个二极管;
当按键C闭合时,亮13个二极管;
当按键D闭合时,亮14个二极管;
当按键E闭合时,亮15个二极管;
当按键F闭合时,二极管全亮。
译码显示电路的流程图如下图(图3-7)所示:
图3-7译码显示电路流程图
4系统软件设计
proteus软件环境介绍
本系统的硬件设计首先是在Proteus软件环境中仿真实现的。
Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是互动的。
针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试。
如果有显示及输出,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,还能看到运行后输入输出的效果。
Proteus建立了完备的电子设计开发环境,尤其重要的是ProteusLite可以完全免费,也可以花微不足道的费用注册达到更好的效果[2]。
Proteus是目前最好的模拟单片机外围器件的工具。
可以仿真51系列、AVR、PIC等常用的MCU及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC器件...)。
其实Proteus与multisim比较类似,只不过它可以仿真MCU,当然,软件仿真精度有限,而且不可能所有的器件都找得到相应的仿真模型,用开发板和仿真器当然是最好选择,可是初学者拥有它们的可能性比较小。
当然,硬件实践还是必不可少的。
在没有硬件的情况下,Proteus能像pspice仿真模拟/数字电路那样仿真MCU及外围电路。
另外,即使有硬件,在程序编写早期用软件仿真一下也是很有必要的。
Proteus软件主要具有以下几个方面的特点:
1、设计和仿真软件Proteus是一个很有用的工具,它可以帮助学生和专业人士提高他们的模拟和数字电路的设计能力。
2、它允许对电路设计采用图形环境,在这种环境中,可以使用一个特定符号来代替元器件,并完成不会对真实电路造成任何损害的电路仿真操作。
3、它可以仿真仪表以及可描述在仿真过程中所获得的信号的图表。
4、它可以仿真目前流行的单片机,如PICS,ATMEL-AVR,MOTOROLA,8051等。
5、在设计综合性方案中,还可以利用ARES开发印制电路板。
·Protel软件环境介绍
Protel印制板设计软件包是澳大利亚proteltechnology公司与1990年推出的电子CAD产品,具有方便、易学、实用、快速以及高速度、高步通率的特点。
它采用了分层次下拉窗口菜单结构形式,用户基本上不需要记背太多的键盘命令,用鼠标点击菜单命令就能操作,protel有着很高的自动布线布通率。
布通率是电子产CAD产品的一项重要指标,它反映电子元件在电路图中连接关系有多少能在印刷版图中实现。
在设计常用的单、双面印制板时只要选择适当的元件布局和布线策略方法,protel就可以轻易的达到98%-100%的布通率。
对于极少数不能布通的定方,protel可以用飞线指示出来,引导用户用手工方法连通。
另外,protel有强大的宏命令设置功能,利用宏命令功能多定义的热键可以大大提高操作速度[1]。
Protel对微机的软硬件配置要求很低:
cpu在8088以上,以上版本,内存640kb以上,双软件(或一个软件一个硬盘),单色显示器(多层板设计时最好用彩色),各种兼容打印机。
也能在Windows9X平台的模拟DOS下运行。
Protel已成为印制板设计加工方面的工业标准。
据初步统计protel在CAD的市场占有率达95%,成为电子产品制造业界的首选CAD软件。
·系统软件分析
任何一个应用系统,它们都有着自己的硬件系统和软件系统,少了任何一个部分都不可能称之为一个完整的应用系统,它们之间是相互依存的一个整体,硬件系统是软件系统的一个基础和前提,为软件系统提供了一个操作平台;而软件系统是硬件系统的灵魂,它对硬件系统起到扩充和完善的作用。
可想而知软件系统与硬件系统同等重要,下面为系统软件设计过程:
(1)程序设计过程
因为使用了矩阵电路,在写程序是必须对单片机的P/I口进行初始化,以确定各键盘按钮所代表的信号。
程序流程图
读列线是否有键按下
延时去抖动
读列线是否有键按下
N
Y
N
Y
停止仿真
图4-1主程序流程图
主程序流程图说明:
因为使用了矩阵电路,只需要用单片机对每个按钮的值进行初始化。
在首次对按钮进行操作之前,必须对它进行初始化,然后进行按键的判断,如果按下键,则转去处理程序,若没按下键,则保持当前的状态。
将正常显示的LED灯数目与按下的键做对比,看是否正确。
5系统调试过程
通过上面的硬件设计和软件设计过程,设计的工作已经基本完成,接下来的工作就是对所设计好的应用系统进行调试。
通过调试可以检查出系统出现的一些错误,从而进行下一步的修改。
(1)在Protel99SE中,对硬件电路图进行ERC电气规则检查。
图5-1protel原理图
图5-2ERC电气规则检查结果
(2)程序调试
程序经过调试显示“0错误,0警告”。
表示程序调试通过。
图5-3程序调试通过示意图
(3)protues调试
在进行protues调试前,应先用KeiluVision4创建一个后缀名为“.hex”的文件,创建的流程图如下所图示:
图5-4hex文件生成流程图
图5-5protues仿真图
结论
通过此次的单片机课程设计,我不仅加深了对单片机理论的理解,深刻懂得了要不断地时间才能掌握知识,而且还学会了如何去加强锻炼创新精神,从而不断地战胜自己,超越自己。
创新,是要我们将理论很好地联系实际,并不断地去开动自己的脑子,从为先到并做到别人没想到没做到的事,不断地超越别人,超越自己;同时,更重要的是,在这一设计过程中,我懂得了坚持不懈,不轻易言弃是每个理工科学子应具备的良好素质。
设计过程,也好比是我们的成长的历程,常有一些不如意的事情发生,这就对我们提出了挑战。
只要自己坚持,坚持,再坚持,再苦再累也值得。
机遇青睐有准备的人。
这个设计过程中,我遇到过许多的考验,给整个设计带来的困扰,但最后还是坚持了下来.回头想想这个设计的过程,我明白了,原来结果并不是那么得重要,我们更应该注重的是过程。
系统以单片机AT89C52为核心部件,单片机系统完成对按键信号识别、检测、处理、显示等功能,用Proteus软件绘制电路原理图,利用C语言编制程序。
这个系统设计能让我们更好地去认识和使用单片机,矩阵式键盘,节约I/O口资源,引脚分配,实时显示,芯片应用,编程实践,还有诸如此类的优点.
本次设计只涉及了一部分的功能,可以将之使用在电话座机中。
在进一步的研究中还可以考虑加入声音的播放等功能,相信会使之更加完善。
致谢
在陈飞老师的指导下,在孙为民、杨冬、刘镇伟等同学的帮助下,我完成了本次设计。
本设计从选题到完成,每一步都是在他们的指导和帮助下完成的,倾注了老师和同学们大量的心血及努力。
另外,本设计的完成也离不开其他老师和各位同学给我的建议和帮助,是他们让我明白了团队合作的精神。
在此,我谨向陈飞老师和帮助过我的老师和同学们,表示崇高的敬意和衷心的感谢!
参考文献
1]《Protel99SEEDA技术及应用》徐峥颖编著,北京:
机械工业出版社,2005
[2]《单片机系统的protues设计与仿真》张靖武编著,北京:
电子工业出版社,2007
[3]《单片机原理及接口技术》李朝青编著,北京:
北京航空航天大学出版社,2005
[4]《MCS-51单片机应用开发实用子程序》边春远编著,北京:
人民邮电出版社,2005
附录1
源程序:
#include<>
#defineucharunsignedchar
#defineuintunsignedint
#defineSCANPORTP1
ucharuca_LineScan[4]={0xEF,0xDF,0xBF,0x7F};
ucharucKeyScan()
{
ucharTemp=0;
ucharucRow=0,ucLine=0;
for(ucLine=0;ucLine<4;ucLine++)
{
SCANPORT=uca_LineScan[ucLine];
Temp=SCANPORT&0x0F;
if(Temp!
=0x0F)
{
switch(Temp)
{
case0x0E:
ucRow=10;break;
case0x0D:
ucRow=20;break;
case0x0B:
ucRow=30;break;
case0x07:
ucRow=40;break;
default:
ucRow=50;break;
}
break;
}
}
SCANPORT=0x0F;
returnucRow+ucLine+1;
}
voidvKeyProcess(unsignedcharucKeyCode)
{
switch(ucKeyCode)
{
case11:
P2=0xff;P3=0x7f;break;//'7'
case12:
P2=0xff;P3=0x3f;break;//'8'
case13:
P2=0xff;P3=0x1f;break;
case14:
P2=0xff;P3=0x0f;break;
case21:
P2=0xff;P3=0x07;break;//'4'
case22:
P2=0xff;P3=0x03;break;//'5'
case23:
P2=0xff;P3=0x01;break;
case24:
P2=0xff;P3=0x00;break;
case31:
P3=0x00;P2=0x7f;break;//'1'
case32:
P3=0x00;P2=0x3f;break;//'2'
case33:
P3=0x00;P2=0x1f;break;
case34:
P3=0x00;P2=0x0f;break;
case41:
P3=0x00;P2=0x07;break;//'3'
case42:
P3=0x00;P2=0x03;break;
case43:
P3=0x00;P2=0x01;break;//'0'
case44:
P3=0x00;P2=0x00;break;//'+'
default:
break;}
}
voidmain()
{
while
(1)
{
vKeyProcess(ucKeyScan());
}
}
附录2
Pretel原理图:
PCB板:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 键盘 led 输出 设计