课程设计4乘4矩阵键盘设计.docx
《课程设计4乘4矩阵键盘设计.docx》由会员分享,可在线阅读,更多相关《课程设计4乘4矩阵键盘设计.docx(17页珍藏版)》请在冰豆网上搜索。
课程设计4乘4矩阵键盘设计
学年设计报告
设计题目4*4矩阵键盘设计
所学专业网络工程
指导教师
2012年8月30日
学年设计任务书
学年设计题目
4*4矩阵键盘设计
组长
学号
班级
组别
专业
网络工程
组员
指导教师
学年设计目的
简单应用系统设计与开发,设计一个4*4矩阵键盘
学年设计所需环境
系统环境:
WindowsXP
运行环境:
KeilC、Proteus仿真软件
学年设计任务要求
数码管显示4*4矩阵键盘按键号,按下任意键是,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号。
学年设计工作进度计划
序号
起止日期
工作内容
分工情况
⑴
2012/8/25~2012/8/26
资料查找模块
全体组员
⑵
2012/8/26~2012/8/27
讨论设计思路模块
全体组员
⑶
2012/8/27~2012/8/28
电路图构建模块
时钟和复位电路设计
矩阵键盘电路设计
显示部分设计
⑷
2012/8/28~2012/8/29
程序编写模块
完成程序设计与调试
⑸
2012/8/29~2012/8/30
整合与调试模块
完成电路与程序的整合
2012/8/30~2012/8/31
文档撰写模块
全体组员
指导教师签字:
年月日
系(教研室)审核意见:
系(教研室)主任签字:
年月日
4*4矩阵键盘设计
摘要:
随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。
电子行业的发展从长远来看很重要,但最主要的还是科技问题。
矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。
是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。
矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。
单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。
单片机将检测到的按键信号转换成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
关键词:
AT89C51;单片机;蜂鸣器;显示电路;矩阵键盘;
1绪论
1.1研究背景
随着21世纪的到来,以前的单个端口连接的按键已经不能满足人们在大型或公共场合的需求。
电子信息行业将是人类社会的高科技行业之一,4*4矩阵键盘设计是当今社会中使用的最广的技术之一。
鉴于此,研究人员通过不断地实验与研究开发,最终研发出采用矩阵键盘设计的N个端口连接N*N个按键,来满足人们的需求,对于这,我们本次的实验在于设计验证4*4矩阵键盘的功能。
1.2主要工作
本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。
按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号。
1.3本文结构
①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计;
②熟练掌握protues软件的使用,并能够按要求对设计的电路进行仿真,实现相应的功能;
③LED实时显示按键的信息;
④采用软件编程的方法实现按键信息的提取和显示
2总体设计
2.1需求分析
矩阵键盘是提高效率进行按键操作管理的有效工具,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。
它能准确、实时、高效地显示按键信息,以提高工作效率和资源利用率。
2.2系统总体设计
图2.2系统组成框
2.3主要设计软件介绍
本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,两种软件的简介如下。
2.3.1PROTEUS软件简介
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
2.3.2KEIL简介
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
3硬件电路设计
3.1芯片选型
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图2-1单片机AT89C51引脚图
3.2时钟和复位电路
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。
外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30PF
10PF,而如果使用陶瓷振荡器建议选择40PF
10PF。
用户也可以采用外部时钟。
采用外部时钟的电路如图示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
图3.2时钟和复位电路示意图
3.3矩阵式键盘电路
矩阵键盘又称为行列式键盘,它用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上设置一个按键。
这样键盘中按键个数是4×4个。
这种行列式键盘结构有效提高单片机系统中I/O的利用率。
如下图所示:
图3.3矩阵式键盘电路示意图
3.4显示电路
本设计用单片机的P0口来控制LED显示器的数字显示。
当按键有按下时,LED数码管将对应显示出该音符数字或字母。
从而可以通过手动和眼来确定所按的哪个音符,应该发出哪个音符的声音如图3.4所示。
图3.4显示电路示意图
3.5蜂鸣器电路
播放模式其实就是喇叭,它连接到P3.0口上,当有按键按下时,就会发出声音。
如下图所示:
图3.5蜂鸣器电路示意图
3.6总电路
图3.6总电路示意图
4系统软件设计
4.1软件流程图
图4.1软件流程示意图
4.2程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
//段码
ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
sbitBEEP=P3^7;
//上次按键和当前按键的序号,该矩阵中序号范围0~15,16表示无按键
ucharPre_KeyNo=16,KeyNo=16;
//延时
voidDelayMS(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
//矩阵键盘扫描
voidKeys_Scan()
{
ucharTmp;
P1=0x0f;//高4位置0,放入4行
DelayMS
(1);
Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1
switch(Tmp)//判断按键发生于0~3列的哪一列
{
case1:
KeyNo=0;break;
case2:
KeyNo=1;break;
case4:
KeyNo=2;break;
case8:
KeyNo=3;break;
default:
KeyNo=16;//无键按下
}
P1=0xf0;//低4位置0,放入4列
DelayMS
(1);
Tmp=P1>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值
switch(Tmp)//对0~3行分别附加起始值0,4,8,12
{
case1:
KeyNo+=0;break;
case2:
KeyNo+=4;break;
case4:
KeyNo+=8;break;
case8:
KeyNo+=12;
}
}
//蜂鸣器
voidBeep()
{
uchari;
for(i=0;i<100;i++)
{
DelayMS
(1);
BEEP=~BEEP;
}
BEEP=0;
}
//主程序
voidmain()
{
P0=0x00;
BEEP=0;
while
(1)
{
P1=0xf0;
if(P1!
=0xf0)Keys_Scan();//获取键序号
if(Pre_KeyNo!
=KeyNo)
{
P0=~DSY_CODE[KeyNo];
Beep();
Pre_KeyNo=KeyNo;
}
DelayMS(100);
}
}
5系统测试与数据分析
依次按下开关,数码显示管会对应显示出0~f共16个数字
图5-1初始界面
图5-2部分结果显示
图5-3部分结果显示
6结束语
经过一周左右时间的努力,我们小组终于完成了本次的学年设计。
一个星期的学年设计对于我们初学者来说并不简单。
因为我们对单片机这门课程学习的时间很少,这是一门理论与实践相结合的课程,需要我们不断的学习与实践才能真正掌握这门课程。
刚开始拿到选题,我们先是查找相关资料,从图书馆和网上找到相关的课题,参考借鉴别人的成果从而理清我们设计的思路。
此次学年设计大致可以分为两部分,电路图部分和程序编程部分。
其中电路图又用到了Proteus仿真软件,由于之前没有使用过该仿真软件,所以在操作的过程中遇到了很多困难,但庆幸的是通过老师的讲解和我们从网上找到的资料,对Proteus软件有了很大的了解,同样学会了一些简单的操作。
至于编程部分我们感到也是有很大的难度,首先就是编程的keiluvision2软件的操作与使用,这与我们往常使用的C语言编程软件不同,相比之下更难使用。
更有难度的是程序的编写与调试。
在编写程序的过程中,我们遇到了各种各样的问题,这就需要我们冷静的思考与集体的讨论。
到后来我们还请教了其他的同学,也询问过老师,最终一个合格的程序还是被我们编写出来了。
最后就需要我们将程序整合到51单片机中,在经过几次调试后,最终的结果还是符合这次学年设计的具体要求的。
经过这次的学年设计,我们小组成员收获了很多。
第一次将理论知识与实践相结合。
还有的就是关于团体合作的,没有团队每一位成员的努力,我们是不可能这么快就完成了这次学年设计的任务。
致谢
感谢此次学年设计为我们指导的老师,从选题之初,她就一直在帮助着我们。
教我们安装使用软件,提供给我们参考资料。
在撰写文档时,是老师耐心的检查出其中的错误,指正出来让我们改正,使得我们按时完成了任务。
最后,再次感谢老师以及帮助过我们的同学!
参考文献
[1]何钦铭.颜晖.C语言程序设计[M]..北京:
高等教育出版社,2008.
[2]李朝青.单片机原理及接口技术[D].北京:
北京航空航天大学出版社,2006;1-277.
[3]谭浩强.C语言程序设计(第二版)[M],北京:
清华大学出版社,1991.
评语:
评阅教师签名:
年月日
成绩