行列式键盘单片机课程设计报告要点.pdf

上传人:tbuqq 文档编号:5212003 上传时间:2020-02-22 格式:PDF 页数:20 大小:998.40KB
返回 下载 相关 举报
行列式键盘单片机课程设计报告要点.pdf_第1页
第1页 / 共20页
行列式键盘单片机课程设计报告要点.pdf_第2页
第2页 / 共20页
行列式键盘单片机课程设计报告要点.pdf_第3页
第3页 / 共20页
行列式键盘单片机课程设计报告要点.pdf_第4页
第4页 / 共20页
行列式键盘单片机课程设计报告要点.pdf_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《行列式键盘单片机课程设计报告要点.pdf》由会员分享,可在线阅读,更多相关《行列式键盘单片机课程设计报告要点.pdf(20页珍藏版)》请在三一文库上搜索。

1、单片机课程设计报告 课题名称行列式键盘 学生姓名 xx 所在班级 xx 学生学号 xx 指导教师 xx 二一五年一月 目录 第一章 课程简介 1 1.1 行列式键盘实现的功能. 1 1.2 技术指标 . 1 第二章 硬件设计 2 2.1 最小系统简介 . 2 2.1.1 主要管脚说明 . 2 2.2 晶振. 3 2.3 行列式键盘的电路介绍 4 2.4 共阳极数码管的介绍. 5 2.5 发光二极管的介绍. 6 第三章 软件设计 7 3.1 设计流程图 . 7 3.2 程序流程图 8 第四章 调试 9 4.1 硬件调试 . 9 4.1.1 电路电源调试 . 9 4.1.2 电路下载调试 . 9

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

3、S2键,数码管显示 12,LED灯亮第二个,同时蜂鸣器发出响声; 按下 S3键,数码管显示 13,LED灯亮第一个和第二个,同时蜂鸣器发出响 声;以此类推,按下按键,数码管显示按键的行列坐标数值,LED灯依照8421 编码规则进行亮灭,亮代表1,灭代表 0,表示 0-F 这 16 个数,同时伴随蜂鸣器 的响声; 行列式键盘控制系统可以提高效率,是进行按键操作管理的有效方法,它可 以提高系统准确性,有利于资源的节约,降低对操作者本身的要求。并能正确、 实时、高效地显示按键信息,以提高工作效率和资源利用率。 行列式键盘是当今使用最为广泛的键盘模式,该系统以N 个端口连接控制 N*N个按键,并通过单

4、片机,显示在LED数码管上。单片机控制键盘显示系统, 可以对不同的按键进行实时显示,其核心是单片机、 键盘矩阵电路和数码管显示 电路。该系统灵活性强,易于操作,可靠性高,应用广泛。 1.2 技术指标 使用四位八段数码管中的两位,4个 LED 发光二极管以及16 个 4*4 的行列式键盘。整 个电路使用 +5V 的直流电源,也可以用充电宝和笔记本电脑进行供电。 2 第二章硬件设计 2.1 最小系统简介 1 2 J16 EA 321 JP6Jumper 1 P1 0 2 P1 1 3 P1 2 4 P1 3 5 P1 4 6 MO SI P 15 7 MO SO P 16 8 SC K P1 7

5、9 R ESET 10 P3 0 11 P3 1 12 P3 2 13 P3 3 14 P3 4 15 P3 5 16 P3 6 17 P3 7 18 X 1 19 X 2 2021 P2 0 22 P2 1 23 P2 2 24 P2 3 25 P2 4 26 P2 5 27 P2 6 28 P2 7 29 PSEN 30 A LE 31 EA 32 P0 7 33 P0 6 34 P0 5 35 P0 4 36 P0 3 37 P0 2 38 P0 1 39 P0 0 40 AT1 U1 V CCV CC EA R12 10 K V CC S1 9+ C 8 R ESE T V CC +C

6、7 S1 8 R 14 10 K C 9C 10 Y 3 X 1X 2 图 2-1 最小系统 对 51 系列单片机来说 , 最小系统一般应该包括 : 单片机 STC89C52 、晶振电 路、复位电路。 STC89C52 是 STC公司生产的一种低功耗、高性能CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存储器。 STC89C52 使用经典的 MCS-51内核,但做了很 多的改进使得芯片具有传统51 单片机不具备的功能。 在单芯片上, 拥有灵巧的 8 位 CPU 和在系统可编程 Flash , 使得 STC89C52 为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 2.

7、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编 3 程时, P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要 求外接上拉电阻。 P1端口(P1.0P1.7,18 引脚): P1口是一个带内部上拉电阻的8 位双 向 I/

8、O 口。P1的输出缓冲器可驱动(吸收或者输出电流方式)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的输

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

10、制信号。 P3端口(P3.0P3.7,1017引脚): P3是一个带内部上拉电阻的8 位双 向 I/O 端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4 个 TTL输入。对 端口写入 1 时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。 P3 做输入口使用时, 因为有内部的上拉电阻, 那些被外部信号拉低的引脚会输入一 个电流。 在对 Flash ROM编程或程序校验时, P3还接收一些控制信号。 P3口除作为一般 I/O 口外,还有其他一些复用功能。 2.2 晶振 C9 C10 Y 3 X 1X 2 图2-2 晶振 4 单片机系统里都有晶振, 在单片机系统里晶振作用非常大,全称叫

11、晶体振荡 器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟 频率越高,那么单片机运行速度就越快, 单片机的一切指令的执行都是建立在单 片机晶振提供的时钟频率。 通常一个系统共用一个晶振, 便于各部分保持同步。 有些通讯系统的基频和 射频使用不同的晶振,而通过电子调整频率的方法保持同步。STC89C52RC 使用 12MHz 的晶体振荡器作为振荡源。 2.3 行列式键盘的电路介绍 S1S2S3S4 S5S6S7S8 S9S10S11S12 S13S14S15S16 P30 P31 P32 P33 P34 P35 P36 P37 3 2 1 J4 Jumper 图 2-3 行

12、列式键盘 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.4P3.7输出低电平, 读入行线数据,若某一行线为低电平,则该行线上有键闭合。 第二步,列线轮流输出低电平,从行线P3.0P3.3读入数据,若有

13、某一行 为低电平,则对应的列线上有键按下。 当确定了是哪一个按键按下后, 通过软件程序的设计, 返回键盘扫描的键值, 由 PO口输出给数码管显示。 5 2.4 共阳极数码管的介绍 a bf c g d e DPY 11 7 4 2 1 5 3 a b c d e f g 8 dp dp P00 P01 P02 P03 P04 P05 P06 P07 V C C 1 2 DS4 DS1 a bf c g d e DPY a b c d e f g dp dp V C C 9 DS3 a bf c g d e DPY a b c d e f g dp dp V C C 8 DS2 a bf c g

14、 d e DPY a b c d e f g dp dp V C C 6 DS1 in1 1 in2 2 in3 3 in4 4 in5 5 in6 6 in7 7 8 8 9 9 out7 10 out6 11 out5 12 out4 13 out3 14 out2 15 out1 16 U1 ULN2003 123 J6 Header 1 2 3 4 5 J? CON5 JP2/relay JP3/speak LS1 SPEAKER relay K1 VCC P20 P21 P22 P23 P24 P25 P26 VCC DS1 DS2 DS3 DS4 VCC VCC 图 2-4 共阳极

15、数码管及位驱动 这是一个四位八段的共阳极数码管,STC89C52的 P0.0P0.7为段输出 口,P2.0P2.3为位输出口。 使用 ULN2003 的 4 个输出口作为位驱动, 用来驱动 8 段数码管的 DS1DS4。该数码管内部有 8 个发光二极管,公共端由8 个发光二 极管的阳极并接而成,正常显示时公共端接高电平(VCC),各发光二极管是否点 亮取决于 a-dp 各引脚上是否是低电平。 LED数码管的外部有12个引脚,其中 6,8,9,12脚为公共端也称位选端,其 余 8 个引脚称为段选端,当要使某一位数码管显示某一数字(0-9中的一个 ) 必 须在这个数码管的段选端加上与数字显示数字对

16、应的8 位段选码 ( 也称字形码 ) , 在位选端加上高电平即可。 由于系统要显示的内容比较简单,显示量不多, 所以选用数码管既方便又经 济。 6 2.5 发光二极管的介绍 LED1LED2LED3LED4LED5LED6LED7LED8 123456789 J1 1K VCC P 1 0 P 1 1 P 1 2 P 1 3 P 1 4 P 1 5 P 1 6 P 1 7 JP1 Jumper 图 2-5 发光二极管 发光二极管简称 LED灯,是一种将电能转化为光能的特殊二极管。发光二极 管和普通的二极管一样,由一个PN结组成。具有单向导电性。当发光二极管工 作在正向偏置状态下, 且有一定大小

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

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

19、块发热损坏。 电路电源主要通过USB外部供电,输入 +5V 电压。提供单片机电源、数码 管电源和 ULN2003电源。将数字电源通电后测试各个数字芯片的电源电压,即可 进行电路电源的调试。 4.1.2 电路下载调试 正确连接电路,通过USB串口下载相关程序,测试数码管是否能正确显示 数字,行列式键盘能否正确响应。 4.2 软件调试 第一步要根据硬件连接图和各器件的特性选择本次课程所需的电路,然后根 据电路进行软件编程,实现课程的相关要求。 第二步将单片机插入40P的紧缩座,插上 12M的晶振以及 USB数据线。 第三步在电脑上根据相关资料提示找到STC的驱动程序,进行安装。 第四步装下载软件加

20、载程序, 根据相关提示, 选择单片机型号, 找到软件编 程程序,对软件编程程序首先要用KEIL 软件进行编译生成hex 的格式,然后进 行下载。 第五步在程序下载完成后, 对开发板进行软件启动, 程序就正式下载到单片 机中了。第六步测试载入程序后, 单片机系统能不能完成本次课程所需的各个要 求。依次按下 44 行列式键盘,观察数码管的显示结果。结果数码管正确显示 出了各个按键的行与列的位置信息,验证程序完全正确,不需要修改。到此,软 件调试结束。 10 第五章 总结 5.1 课程设计总结 通过本次单片机课程设计, 我不仅加深了对单片机理论知识的理解,学会了 学以致用的重要性; 而且还学会了如何

21、去加强锻炼创新精神,同时也提高了自身 的动手能力,让我深刻的意识到理论与实际结合的重要性。 本次单片机课程设计, 主要分为硬件焊接和软件编写这两个部分。硬件焊接 主要看个人的焊接水平和细心程度。 在焊接之前一定要了解各个元器件在整个电 路系统中所起到的作用,这样才能正确焊接元器件的位置,避免元器件的错焊。 由于固定思维的影响, 很多同学以为排阻没有焊接焊接方向要求导致了错焊,还 好我仔细看了焊接说明书, 这说明焊接前一定要认真了解相关内容,否则可能会 事倍功半。 本次焊接较难的就是贴片的焊接,不仅要正确焊接贴片管脚, 不能使 管脚相连, 还要注意不能使贴片受热时间过长,避免贴片被高温烧坏, 导

22、致器件 不能正常工作。 焊接过程中, 我最小的贴片 CH340管脚焊接没有问题, 但是软件 测试时不能正常烧写程序, 我想可能就是焊接过程中温度过高, 将芯片给烧坏了, 以后一定要注意。 软件编写对我来说确实是个大问题,虽然本次课程设计的题目不是很难,只 要通过数码管显示按键行与列的位置。但是在实际操作过程当中遇到了不少困 难,首先是通过程序判别按键所在的行与列,这个需要一系列的计算, 还好书上 有行列式键盘键值。之后是按键数值在LED数码管上的显示,确实是不会编写, 特别还是要用到位驱动。 之后根据相关问题, 我不断地去查找资料, 参考类似的 程序和询问可能会的同学, 这个过程让我开动了自己

23、的脑子,从而也实现了自我 的超越,让自己的知识能够得到不断地完善;同时更重要的是, 在这一设计过程 当中,让我懂得了在学习的道路上会遇到很多的阻碍,但关键的是能做到坚持不 懈,不轻易放弃,最终达到自己想要的目标。 单片机的学习对于我们专业来说非常的重要,通过本次设计也让我更加清晰 了对专业的了解, 理论知识再丰富, 没有实际的操作经验也是不行的;本次设计 也运用到了 protel软件进行原理图的绘制,虽然不是单片机这门课需要掌握的 内容,但这个软件本学期已经在电子线路CAD 这门课进行了系统的学习, 所以这 让我意识到课与课之间是息息相关的,学好现如今的每一门课可能就是为下面的 学习打好坚实的

24、基础,掌握一些软件的开发与应用更是显得尤为重要。 本次课程设计我发现自己在很多方面都有或多或少的不足,首先是硬件的焊 接,我感觉自己的焊接能力有待提高。焊接过程中,焊接速度不够娴熟,而且焊 点不够圆润美观, 希望自己能在以后多多锻炼自己的动手焊接水平,不断提高自 己的焊接工艺水准,最好能达到眼到手到的境界。 软件编程确实是我的短板, 一做到相关问题确实有点为难, 幸好得到了同学 11 的帮助和老师的提示, 这才将符合设计要求的程序编辑出来。希望我能在寒假里 能多花些时间学习单片机的软件编程,提高自己软件编程的能力。 专业知识一定 要重视,切不可浑浑噩噩的过日子,要时刻铭记自己的目标,我要学好单

25、片机, 我要朝着自己的目标做出切实可行的行动,不做语言上的巨人。 在本次设计过程中, 我确实学习到了很多, 也对本学期自己的学习状况有了 一次深刻而具体点了解和反思, 希望我能在接下来的学习生活中改变自己不好的 状态,认真学习,不断提高和充实自己,让自己过一个充满意义的大学生活。在 设计过程中我也得到了不少同学们的帮助,要是没有同学不厌其烦的帮助, 我想 我一个人也不可能在短时间内完成设计要求;所以在此我非常感谢在设计中给予 我帮助的指导老师和同学们。 12 第六章 附录 附录 A 原理总图 S1S2S3S4 S5S6S7S8 S9S1 0S11S12 S13S1 4S15S16 P30 P3

26、1 P32 P33 P34 P35 P36 P37 LED1LED2LED3LED4LED5LED6LED7LED8 123456789 J1 1K VCC P 1 0 P 1 1 P 1 2 P 1 3 P 1 4 P 1 5 P 1 6 P 1 7 3 2 1 J4 Jumper 1 2 J16 EA 321 JP6Jumper 1 P10 2 P11 3 P12 4 P13 5 P14 6 MOSI P15 7 MO SO P16 8 SCK P17 9 RESET 10 P30 11 P31 12 P32 13 P33 14 P34 15 P35 16 P36 17 P37 18 X1

27、 19 X2 2021 P20 22 P21 23 P22 24 P23 25 P24 26 P25 27 P26 28 P27 29 PSEN 30 ALE 31 EA 32 P07 33 P06 34 P05 35 P04 36 P03 37 P02 38 P01 39 P00 40 AT1 U1 VCC VCC EA R12 10K VCC S19 +C 8 R ESE T VCC +C7 S18 R14 10K C9 C10 Y3 X1X2 JP1 Jumper a bf c g d e D PY 11 7 4 2 1 5 3 a b c d e f g 8 dp dp P00 P01

28、 P02 P03 P04 P05 P06 P07 V C C 1 2 DS4 DS1 a bf c g d e DPY a b c d e f g dp dp V C C 9 DS3 a bf c g d e DPY a b c d e f g dp dp V C C 8 DS2 a bf c g d e DPY a b c d e f g dp dp V C C 6 DS1 in1 1 in2 2 in3 3 in4 4 in5 5 in6 6 in7 7 8 8 9 9 out7 10 out6 11 out5 12 out4 13 out3 14 out2 15 out1 16 U1 U

29、LN2003 123 J6 Header 1 2 3 4 5 J5 CON5 JP2/relay JP3/speak LS1 SPEAKER relay K1 VCC P20 P21 P22 P23 P24 P25 P26 VCC D S1 D S2 D S3 D S4 VCC VCC 图 6-1 原理总图 13 附录 B 程序代码 / 张凯 /* 功能描述:系统上电后,按下矩阵键盘的任意按键,蜂鸣器响 ,同时数码管 3、4 两位分别显示按键的行和列,led 灯显示键值。 */ #include“reg52.h“ #include #define DUAN P0 #define LED P1

30、sbit LED1=P23; sbit LED2=P22; sbit LED3=P21; sbit LED4=P20; int num; /键值 int x,y; /行和列 sbit BUZZER=P25;/ 蜂鸣器引脚 unsigned char code table = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa 1,0x86,0x8e;/共阳数码管显示 0F /* 系统初始化 */ void sys_init() ET0=1; TMOD=0X01; TH0=-10000/256; TL0=-10

31、000%256; TR0=1; EA=1; /* 延时函数 500us */ void delay_s() /500us unsigned char i; 14 _nop_(); i = 247; while (-i); /* 延时函数 500ms */ void delay() /500ms unsigned char i, j, k; _nop_(); i = 4; j = 205; k = 187; do do while (-k); while (-j); while (-i); /* 蜂鸣器发声函数*/ void fmq() int i; for(i=0;i100;i+) BUZZE

32、R=BUZZER; delay_s(); /* 矩阵键盘扫描*/ unsigned char Keycan() unsigned char rcode, ccode; /rcode存临时值, ccode 存计算结果 15 P3 = 0xF0; / 行扫描,列线输入 rcode=P3; if(rcode != 0xF0) / 若有键按下 delay();/ 延时去抖动 rcode=P3; if(rcode != 0xF0) ccode=P3; / 取行值 P3=0xff; / 行列全部置 1,否则会影响列扫描的结果 P3=0x0f; / 列扫描 rcode=P3; ccode = ccode|r

33、code; 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; break; case 0xee: num=3,x=1,y=4; break; case 0x7d: num=4,x=2,y=1; break; case 0xbd: num=5,x=2,y=2; break; case

34、 0xdd: num=6,x=2,y=3; break; case 0xed: num=7,x=2,y=4; break; case 0x7b: num=8,x=3,y=1; break; case 0xbb: num=9,x=3,y=2; break; case 0xdb: num=10,x=3,y=3; break; case 0xeb: num=11,x=3,y=4; break; case 0x77: num=12,x=4,y=1; break; case 0xb7: num=13,x=4,y=2; break; case 0xd7: num=14,x=4,y=3; break; ca

35、se 0xe7: num=15,x=4,y=4; break; 16 default: break; /* 主函数 */ void main() unsigned char m; sys_init(); while(1) m=Keycan(); / 键盘扫描 Keychange(m); / 键值转换 LED=num; /P1 口通过 led 灯显示键值 /* t0 中断处理*/ void t0()interrupt 1 TR0=0; TH0=-10000/256; TL0=-10000%256; TR0=1; DUAN=0x00; / 消隐 LED3=1; DUAN=tablex; / 行显示在第 3 位 delay_s(); DUAN=0; LED3=0; LED4=1; DUAN=tabley; /列显示在第 4 位 delay_s(); DUAN=0; LED4=0; 17 附录 C 实物图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1