行列式键盘单片机课程设计报告_第1页
行列式键盘单片机课程设计报告_第2页
行列式键盘单片机课程设计报告_第3页
行列式键盘单片机课程设计报告_第4页
行列式键盘单片机课程设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计报告课题名称 行列式键盘 学生姓名 xx 所在班级 xx 学生学号 xx 指导教师 xx 二一五年一月目录第一章 课程简介11.1 行列式键盘实现的功能11.2 技术指标1第二章 硬件设计22.1 最小系统简介22.1.1 主要管脚说明22.2 晶振 32.3 行列式键盘的电路介绍42.4 共阳极数码管的介绍52.5 发光二极管的介绍6第三章 软件设计73.1 设计流程图73.2 程序流程图 8第四章 调试94.1 硬件调试94.1.1 电路电源调试94.1.2 电路下载调试94.2 软件调试9第五章 总结105.1 课程设计总结10第六章 附录12附录A 原理总图12

2、附录B 程序代码13附录C 实物图17第一章 课程简介1.1 行列式键盘实现的功能4*4行列式键盘以STC89C52单片机为核心,主要由4*4行列式键盘电路、4位8段数码管显示电路、LED灯电路和数码管位驱动电路等组成,软件选用C语言编程,简洁易懂。单片机将检测到的按键信号转换成数字量,由数码管显示4*4行列式键盘的行与列的数字信息。功能如下:按下S1键,数码管显示11,LED灯亮第一个,同时蜂鸣器发出响声;按下S2键,数码管显示12,LED灯亮第二个,同时蜂鸣器发出响声;按下S3键,数码管显示13,LED灯亮第一个和第二个,同时蜂鸣器发出响声;以此类推,按下按键,数码管显示按键的行列坐标数值

3、,LED灯依照8421编码规则进行亮灭,亮代表1,灭代表0,表示0-F这16个数,同时伴随蜂鸣器的响声; 行列式键盘控制系统可以提高效率,是进行按键操作管理的有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身的要求。并能正确、实时、高效地显示按键信息,以提高工作效率和资源利用率。行列式键盘是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,并通过单片机,显示在LED数码管上。单片机控制键盘显示系统,可以对不同的按键进行实时显示,其核心是单片机、键盘矩阵电路和数码管显示电路。该系统灵活性强,易于操作,可靠性高,应用广泛。1.2 技术指标使用四位八段数码管中的两位,

4、4个LED发光二极管以及16个4*4的行列式键盘。整个电路使用+5V的直流电源,也可以用充电宝和笔记本电脑进行供电。第二章 硬件设计2.1 最小系统简介图2-1 最小系统对51系列单片机来说,最小系统一般应该包括:单片机STC89C52、晶振电路、复位电路。 STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的

5、解决方案。 2.1.1 主要管脚说明 VCC(40引脚):电源电压 VSS(20引脚):接地 P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。 P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或

6、者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。 此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表: 在对Flash ROM编程和程序校验时,P1接收低8位地址。 P2端口(P2.0P2.7,2128引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,

7、这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。 在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。 P3端口(P3.0P3.7,1017引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入

8、。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。 在对Flash ROM编程或程序校验时,P3还接收一些控制信号。 P3口除作为一般I/O口外,还有其他一些复用功能。2.2 晶振   图2-2 晶振单片机系统里都有晶振,在单片机系统里晶振作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率。通常一个系统共用一个晶振,便于各部分

9、保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。STC89C52RC使用12MHz的晶体振荡器作为振荡源。2.3 行列式键盘的电路介绍图2-3 行列式键盘 STC89C52单片机的并行口P3接4*4矩阵键盘,以P3.0P3.3作行输入线,以P3.4P3.7作列输出线;P3口输出按键信息,在数码管上显示每个按键的行与列的序号。P3口的低4位控制行输入,高4位控制列输入当没有按键按下时,P3.0P3.3与P3.4P3.7之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置行线P3.0P3.3为输入状态,从列线P3.4

10、P3.7输出低电平,读入行线数据,若某一行线为低电平,则该行线上有键闭合。第二步,列线轮流输出低电平,从行线P3.0P3.3读入数据,若有某一行为低电平,则对应的列线上有键按下。当确定了是哪一个按键按下后,通过软件程序的设计,返回键盘扫描的键值,由PO口输出给数码管显示。2.4 共阳极数码管的介绍图2-4 共阳极数码管及位驱动这是一个四位八段的共阳极数码管,STC89C52的P0.0P0.7为段输出口,P2.0P2.3为位输出口。使用ULN2003的4个输出口作为位驱动,用来驱动8段数码管的DS1DS4。该数码管内部有8个发光二极管,公共端由8个发光二极管的阳极并接而成,正常显示时公共端接高电

11、平(VCC),各发光二极管是否点亮取决于a-dp各引脚上是否是低电平。LED数码管的外部有12个引脚,其中6,8,9,12脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字(0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上高电平即可。由于系统要显示的内容比较简单,显示量不多,所以选用数码管既方便又经济。2.5 发光二极管的介绍图2-5 发光二极管发光二极管简称LED灯,是一种将电能转化为光能的特殊二极管。发光二极管和普通的二极管一样,由一个PN结组成。具有单向导电性。当发光二极管工作在正向偏置状态下,且有一定大小的

12、电流通过发光二极管时。它就会发光。光的颜色视发光二极管的材料而定。发光二极管正向工作电压为1.5V左右,正向电流为5-15mA.80C51引脚输出低电平可直接驱动LED。第三章 软件设计3.1 设计流程图 STC89C52RC P2.0P2.3 P3.0P3.7 P0.0P0.7 P1.0P1.3 数码管显示行与列ULN20034*4键盘LED灯响应 图3-1 设计流程图单片机将从程序中键盘按键初始化对应得到的值通过数码管显示行与列的数值,通过LED灯显示0-F的值并伴随蜂鸣器的响声。 3.2 程序流程图 开始系统初始化扫描P3端口有按键按下Y确定键盘的行列值行列值正确YLED灯作用和数码管显

13、示按键行列值结束图3.2 程序流程图本程序对系统按键进行了初始化,通过对按键的扫描结果进行判断是否有按键按下,同时由数码管显示出当前按键行与列的数值,相应的LED灯作用;没有按键按下就保持原来的状态。第四章 调试4.1 硬件调试 4.1.1 电路电源调试 在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V4.8V之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。 电路电源主要通过USB外部供电,输入+5V电压。提供单片机电源、数码管电源和ULN2003电源。将数

14、字电源通电后测试各个数字芯片的电源电压,即可进行电路电源的调试。 4.1.2 电路下载调试 正确连接电路,通过USB串口下载相关程序,测试数码管是否能正确显示数字,行列式键盘能否正确响应。4.2 软件调试第一步要根据硬件连接图和各器件的特性选择本次课程所需的电路,然后根据电路进行软件编程,实现课程的相关要求。第二步将单片机插入40P的紧缩座,插上12M的晶振以及USB数据线。第三步在电脑上根据相关资料提示找到STC的驱动程序,进行安装。第四步装下载软件加载程序,根据相关提示,选择单片机型号,找到软件编程程序,对软件编程程序首先要用KEIL软件进行编译生成hex的格式,然后进行下载。第五步在程序

15、下载完成后,对开发板进行软件启动,程序就正式下载到单片机中了。第六步测试载入程序后,单片机系统能不能完成本次课程所需的各个要求。依次按下4×4行列式键盘,观察数码管的显示结果。结果数码管正确显示出了各个按键的行与列的位置信息,验证程序完全正确,不需要修改。到此,软件调试结束。第五章 总结5.1 课程设计总结通过本次单片机课程设计,我不仅加深了对单片机理论知识的理解,学会了学以致用的重要性;而且还学会了如何去加强锻炼创新精神,同时也提高了自身的动手能力,让我深刻的意识到理论与实际结合的重要性。本次单片机课程设计,主要分为硬件焊接和软件编写这两个部分。硬件焊接主要看个人的焊接水平和细心程

16、度。在焊接之前一定要了解各个元器件在整个电路系统中所起到的作用,这样才能正确焊接元器件的位置,避免元器件的错焊。由于固定思维的影响,很多同学以为排阻没有焊接焊接方向要求导致了错焊,还好我仔细看了焊接说明书,这说明焊接前一定要认真了解相关内容,否则可能会事倍功半。本次焊接较难的就是贴片的焊接,不仅要正确焊接贴片管脚,不能使管脚相连,还要注意不能使贴片受热时间过长,避免贴片被高温烧坏,导致器件不能正常工作。焊接过程中,我最小的贴片CH340管脚焊接没有问题,但是软件测试时不能正常烧写程序,我想可能就是焊接过程中温度过高,将芯片给烧坏了,以后一定要注意。软件编写对我来说确实是个大问题,虽然本次课程设

17、计的题目不是很难,只要通过数码管显示按键行与列的位置。但是在实际操作过程当中遇到了不少困难,首先是通过程序判别按键所在的行与列,这个需要一系列的计算,还好书上有行列式键盘键值。之后是按键数值在LED数码管上的显示,确实是不会编写,特别还是要用到位驱动。之后根据相关问题,我不断地去查找资料,参考类似的程序和询问可能会的同学,这个过程让我开动了自己的脑子,从而也实现了自我的超越,让自己的知识能够得到不断地完善;同时更重要的是,在这一设计过程当中,让我懂得了在学习的道路上会遇到很多的阻碍,但关键的是能做到坚持不懈,不轻易放弃,最终达到自己想要的目标。单片机的学习对于我们专业来说非常的重要,通过本次设

18、计也让我更加清晰了对专业的了解,理论知识再丰富,没有实际的操作经验也是不行的;本次设计也运用到了protel软件进行原理图的绘制,虽然不是单片机这门课需要掌握的内容,但这个软件本学期已经在电子线路CAD这门课进行了系统的学习,所以这让我意识到课与课之间是息息相关的,学好现如今的每一门课可能就是为下面的学习打好坚实的基础,掌握一些软件的开发与应用更是显得尤为重要。本次课程设计我发现自己在很多方面都有或多或少的不足,首先是硬件的焊接,我感觉自己的焊接能力有待提高。焊接过程中,焊接速度不够娴熟,而且焊点不够圆润美观,希望自己能在以后多多锻炼自己的动手焊接水平,不断提高自己的焊接工艺水准,最好能达到眼

19、到手到的境界。软件编程确实是我的短板,一做到相关问题确实有点为难,幸好得到了同学的帮助和老师的提示,这才将符合设计要求的程序编辑出来。希望我能在寒假里能多花些时间学习单片机的软件编程,提高自己软件编程的能力。专业知识一定要重视,切不可浑浑噩噩的过日子,要时刻铭记自己的目标,我要学好单片机,我要朝着自己的目标做出切实可行的行动,不做语言上的巨人。在本次设计过程中,我确实学习到了很多,也对本学期自己的学习状况有了一次深刻而具体点了解和反思,希望我能在接下来的学习生活中改变自己不好的状态,认真学习,不断提高和充实自己,让自己过一个充满意义的大学生活。在设计过程中我也得到了不少同学们的帮助,要是没有同

20、学不厌其烦的帮助,我想我一个人也不可能在短时间内完成设计要求;所以在此我非常感谢在设计中给予我帮助的指导老师和同学们。第六章 附录附录A 原理总图图6-1 原理总图附录B 程序代码/张凯/*功能描述:系统上电后,按下矩阵键盘的任意按键,蜂鸣器响,同时数码管3、4两位分别显示按键的行和列,led灯显示键值。*/#include"reg52.h"#include<intrins.h>#define DUAN P0#define LED P1sbit LED1=P23;sbit LED2=P22;sbit LED3=P21;sbit LED4=P20;int num;

21、 /键值int x,y; /行和列sbit BUZZER=P25;/蜂鸣器引脚unsigned char code table = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/共阳数码管显示0F/*系统初始化*/void sys_init()ET0=1;TMOD=0X01;TH0=-10000/256;TL0=-10000%256;TR0=1;EA=1;/*延时函数500us*/void delay_s()/500usunsigned char i;_nop_();i = 24

22、7;while (-i);/*延时函数500ms*/void delay()/500msunsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;dodowhile (-k); while (-j); while (-i);/*蜂鸣器发声函数*/void fmq()int i;for(i=0;i<100;i+)BUZZER=BUZZER;delay_s();/*矩阵键盘扫描*/unsigned char Keycan() unsigned char rcode, ccode;/rcode存临时值,ccode存计算结果 P3 = 0xF0; /

23、 行扫描,列线输入 rcode=P3; if(rcode != 0xF0) / 若有键按下 delay();/ 延时去抖动 rcode=P3; if(rcode != 0xF0) ccode=P3; /取行值 P3=0xff; /行列全部置1,否则会影响列扫描的结果 P3=0x0f; /列扫描 rcode=P3; ccode = ccode|rcode; fmq(); return (ccode); return 0;/* 按键键值转换*/void Keychange(unsigned char key) switch(key) case 0x7e: num=0,x=1,y=1; break; case 0xbe: num=1,x=1,y=2; break; case 0xde: num=2,x=1,y=3;

温馨提示

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

评论

0/150

提交评论