《2022年非编码键盘的扫描程序设计 .pdf》由会员分享,可在线阅读,更多相关《2022年非编码键盘的扫描程序设计 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、武汉理工大学计算机控制技术课程设计说明书摘要计算机控制技术课程设计是在教学及实验基础上,对课程所学理论知识的深化和提高。本次课程设的内容是利用8031 微控制器,通过 8155 扩展 I/O 口行列式键盘。要求通过8155 扩展 I/O 口组成 4 8 行列式键盘,设计非编码键盘的扫描系统,并且能够对键盘的按键正确识别,去抖动。关键词:8155非编码去抖名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术
2、课程设计说明书目录1 课程设计目的 . 12 非编码键盘. 23 芯片介绍 . 33.1 8031芯片介绍. 33.2 8155芯片介绍 . 44 电路设计 . 65 程序设计 . 76 电路仿真 . 107 心得体会 . 13附录程序清单. 14参考文献 . 17名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 1 页共 17 页非编码键盘的扫描程序设计1 课程设计目的(1)了解并掌
3、握非编码键盘的工作原理;(2)熟悉和掌握 8155 与 8031 的结构及工作原理;(3)通过课程设计,掌握电路设计的基本方法和技术;(4)掌握单片机的接口技术及相关外围芯片的外特性,控制方法,从而加深对计算机控制技术知识的理解;(5)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 2 页共 17 页2 非编码键盘键盘可以
4、分为编码式和非编码式两种。编码式键盘是通过数字电路直接产生对应于按键的 ASC码,这种方式目前很少使用。非编码式键盘将案件排列成矩阵的形势, 由硬件或软件随时对矩阵扫描,一旦某一键被按下, 该键的行列信息即被转换为位置码并送入主机, 再由键盘驱动程序查表, 从而得到按键的 ASC码,最后送入内存中的键盘缓冲区供主机分析执行。非编码式键盘由于结构简单,按键重定义方便而成为目前最常采用的键盘类型。由此,多姿多彩的多媒体键盘便应运而生,这些键盘通常出现在品牌机上,如联想、同方等,品牌机上的“单键上网”也是基于此原理。非编码键盘又分为:独立键盘和行列式(又称为矩阵式)键盘。本次课程设计要求设计的是 4
5、 8 行列式键盘。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 3 页共 17 页3 芯片介绍3.1 8031芯片介绍8031和 8051一样是最常见的MCS51 系列单片机,是 inter 公司早期的成熟的单片机产品,应用范围涉及到各行各业。8031有 40个引脚,采用双列直插封装,其引脚图如图3-1 所示。图 3-1 8031 引脚图XTAL1 :内部振荡电路反相放大器的输入端
6、,是外接晶体的一个引脚。 当采用外部振荡器时,此引脚接地。XTAL2 :内部振荡电路反相放大器的输出端。是外接晶体的另一端。 当采用外部振荡器时,此引脚接外部振荡源。RST:当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变) ,将使单片机复位。PSEN: 程序选通有效信号, 当从外部程序存贮器读取指令时产生低电平时,指令寄存器的内容读到数据总线上。ALE:地址锁存有效信号,其主要作用是提供一个适当的定时信号,在它的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页
7、,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 4 页共 17 页下降沿用于外部程序存储器或外部数据存贮器的低8 位地址锁存,使总线P0输出/输入口分时用作地址总线(低8 位)和数据总线,此信号每个机器出现2 次,只是在访问外部数据存储器期间才不输出ALE 。EA: 当保持 TTL 高电平时,如果指令计数器小于4096, 8031执行内部 ROM的指令;当使 TTL 为低电平时,从外部程序存贮器取出所有指令。P0.0P0.7:通道 0,它是 8 位漏极开路的双向I/O 通道,当扩展外部存贮器时,这也是低八位地址和数据总线, 在编程校验期间, 它输
8、入和输出字节代码,通道 0 吸收/发出二个 TTL 负载。P1.0P1.7:通道 1 是 8 位拟双向 I/O 通道,在编程和校验时,它发出低8位地址。通道 1 吸收/发出一个 TTL 负载。P2.0P2.7:通道 2 是 8 位拟双向 I/O 通道,当访问外部存贮器时,用作高8 位地址总线。通道2 能吸收 /发出一个 TTL 负载。P3.0P3.7:通道 3 准双向 I/O 通道。通道 3 能吸收 /发出一个 TTL 负载。3.2 8155芯片介绍8155是一多功能的可编程外围接口芯片,内部资源有 256B 的 RAM ,2 个 8位、1 个 6 位的 I/O 口和 1 个 14 位的“ 减
9、 1” 计数器。 8155有 40 个引脚,采用双列直插封装,总线型的8155 引脚图如图 3-2 所示。图 3-2 总线型 8155 引脚图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 5 页共 17 页AD0AD7:三态地址 / 数据线,是低 8 位地址与数据复用线。地址可以是8155片内 RAM 单元地址或 I/O 端口地址。 AD0AD7 上的地址由 ALE 的下降沿存到
10、8155 片内地址锁存器。也就是由ALE 信号来区别 AD0AD7 上出现的地址信息还是数据信息。ALE:锁存允许信号。在ALE信号的下降沿把 ADOAD7 上的 8 位地址信息, CS片选信号及 IO/M信号都锁存到 8155 内部存储器中。CS: 片选信号,低电平有效,由 ALE信号的下降沿锁存到8155 内部存储器。RD:读选通信号,低电平有效。当RD=0、 CS=0 时,开启 AD0AD7 的缓冲器,被选中的片内RAM 单元或 IO 口的内容送到 AD0AD7 上。WR :写选通信号。低电平有效,当CS、WR 都有效时, CPU 输出到 AD0 AD7上的信息送到 8155片内 RAM
11、 单元或 I/O 端口。IO/M:IO 口/ RAM 选择。 0:选内 RAM ;1:选内 IO 口。RES:复位信号输入端,高电平有效。复位后,3 个 I/O 口均为输入方式。PA0PA7:A 口的 I/O 线,其输入、输出的流向可由程序控制。PB0PB7:B 口的 I/O 线,其输入、输出的流向可由程序控制。PC0PC5:有两个作用,既可作为通用的I/O 口,也可作为 PA口和 PB 口的控制信号线,这些可通过程序控制。TIN:定时器输入。TOUT :定时器输出。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
12、- - - - - - - 第 7 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 6 页共 17 页4 电路设计总设计电路图如图4-1 所示。图 4-1 总设计电路图如上图,8031 的 P0.0P0.7分别与 8155 的 AD0AD7 相连接,8155 的 PC口与 PB 口分别控制矩阵键盘的行与列,8031 的 P2.0 口及 P2.7 口分别与 8155的 IO/M及 CS相连。按照这种连线方式,8155 的命令状态寄存器地址、A 口地址、B 口地址和 C 口地址分别是 0X7FF0H、0X7FF1H、0X7FF2H 和 0X7FF3
13、H。在扫描键盘时,我们将8155 的 B 口设置为输出口、 C 口设置为输入口,这样 8155 的命令状态寄存器地址赋值为0X02。由图 4-1 可以看出,在矩阵键盘的行下面加了一排下拉电阻,因此我们采用的是将键盘电位拉高的扫描方式。为了验证矩阵键盘扫描的正确性, 我们在 8031 的 P1 口上加了一排发光二极管。将键盘一次从左到右从上到下编号,可以从1 编到 32。我们将发光二极管亮定义为“ 1” ,灭定义为“ 0” 。因此根据发光二极管的亮灭,按照P1口由高位到低位的顺序排列, 可以得到一个八位的二进制数, 再将二进制数转化为十进制数。我们定义:当第一个键盘按下时,发光二极管显示“1”
14、;当第二个键盘按下时,发光二极管显示“ 2” ,以此类推。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 7 页共 17 页5 程序设计在程序设计部分, 我们采用模块化程序设计的方法,即将各功能模块化, 编写成一段一段的子程序, 最后在主程序中调用各子程序完成设计所需功能。采用模块化程序设计的方法降低了程序复杂度,使程序设计、调试和维护等操作简单化。首先,设计主程序,其流程图如图5-
15、1 所示。在主程序一开始,我们要对各芯片初始化,例如:给8031 的 P1 口赋初值,使所有的发光二极管都熄灭;给 8155 的命令状态寄存器地址赋值,设置B 口与 C 口的输入、输出方式等等。接着,判断有无键盘按下,若有键盘按下,执行键盘扫描程序,并将返回值返回赋给8031 的 P1 口;若没有键盘按下,则继续判断。图 5-1主程序流程图键盘扫描时需要去抖动, 键盘去抖动有两种方式, 一种是软件去抖动, 另一种是硬件去抖动, 在这里我们采用软件去抖动的方式。即在检测到有键盘按下时名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
16、名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 8 页共 17 页为了防止是抖动, 需要在延迟一段时间后再检测是否有键盘按下。因此,接下来要设计延时子程序, 延时原理很简单, 只要采用循环体进行即可。 由于程序很简单就不给程序流程图,延时子程序如下所示。void delay(unsigned char t) unsigned char i,j; for(j=t;j0;j-) for(i=110;i0;i-); 然后需要设计检测有无键盘按下子程序,在此程序中,先给8155 的 PB 口赋值 0XF
17、F。由于 PC口上接有下拉电阻, 因此都是低电平。 此时读回 PC 口上的电位值,若 PC 口的电位有变化,说明有键盘按下;若没有变化,说明没有键盘按下,继续检测。此子程序的流程图如图5-2 所示。图 5-2检测有无键盘按下子程序流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 9 页共 17 页最后设计的就是键盘扫描程序。先给 PB 口赋值 0X01,检测 PC 口的值是否为
18、零,若不为零,说明被按下的键盘在此列;若不为零,说明被按下的键盘不在此列,将 PB 左移一位继续检测。知道被按下的键盘在哪一列之后,给PB 口赋值 0XFF, 读回此时 PC口的值,并将这个值与一个初值为0X01 的变量 a 按位与,若此时的值为零,说明被按下的键盘不在这一行,将a 左移一位,即到下一行去检测;若得到的值不为零,说明被按下的键盘就在这一行。用键盘的行数乘以8再加上键盘的列数,则可以得到键盘的编号,将此编号返回。最后是松手检测。此段子程序的流程图如图5-3 所示。图 5-3键盘扫描子程序流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
19、 - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 10 页共 17 页6 电路仿真此次课程设计电路的仿真是基于Proteus 的仿真。 Proteus 软 件是 英 国Labcenter Electronics 公司出版的EDA 工具软件。它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus 是世界上著名的EDA 工具,鉴于其强大的功能及广泛的应用,我们选择了它作为此次课程设计电路的仿真工具。仿真刚
20、启动时,没有发光二极管亮,说明没有键盘按下,此时的仿真图如图 6-1 所示。图 6-1刚启动仿真时的仿真图我们定义最上面的一行键盘是第零行,接下来一行是第一行, 以此类推。 前面已经介绍过键盘的行数乘以8 再加上键盘的列数, 可以得到键盘的编号。 如果按下第零行第三列的键盘,即第三个键盘,发光二极管应该显示“3” ,也就是最后一个和倒数第二个发光二极管亮。此时的仿真图如图6-2 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - -
21、- - 武汉理工大学计算机控制技术课程设计说明书第 11 页共 17 页图 6-2按下第三个键盘时的仿真图如果按下第二行第六列的键盘,即第二十二个键盘,发光二极管应该显示“22” ,也就是第四、第六和第七个发光二极管亮。此时的仿真图如图6-3 所示。图 6-3按下第二十二个键盘时的仿真图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 12 页共 17 页从仿真的结果看来, 仿真的结
22、果完全符合要求, 能够正确识别键盘按键, 完成了对非编码键盘的扫描及显示,并且有效的解决了抖动问题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 13 页共 17 页7 心得体会经过了这些天的课程设计我首先感觉到的是身心非常的疲惫,但我无怨无悔, 因为当我查阅了大量的文献和参考资料后我发觉学到许多在课堂上和书本上所学不到的东西,是这些课外的知识使我更进一步地熟悉了一些芯片的结构以
23、及掌握了各芯片的工作原理及其具体的使用方法,同时也使我也开拓了眼界对电子器件有了更进一步的了解和认识,对电子产品产生了浓厚的兴趣。 通过实践我增强了动手能力和操作能力,这对我以后进入社会参加工作是很有帮助的。同时,经过这几天的努力,我对Proteus这款软件的使用也更加熟练,尤其是掌握了对总线的理解和使用。Proteus是一款强大的软件,在以后的学习过程中,我将更加深入的去学习这款软件的使用方法和技巧。另外通过这次课程设计, 我对文档的编排也有了一定的掌握,这对于以后的毕业设计及工作需要都有很大的帮助,在完成课程设计的同时我也在复习一遍计算机控制技术这门课程, 把以前很多没学懂的问题都学懂学透
24、了。所以课程设计是理论知识的升华。整个课程设计过程中, 由于理论知识的缺乏, 课程设计还有很多不足之处,在以后的课程设计中,希望能有所改善。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 14 页共 17 页附录程序清单#include /头文件#include /XBYTE 宏定义#define COM XBYTE0 x7FF0 /8155 命令状态寄存器地址#define PA
25、 XBYTE0 x7FF1 /8155 的 A 口地址#define PB XBYTE0 x7FF2 /8155 的 B 口地址#define PC XBYTE0 x7FF3 /8155 的 C 口地址int x,y,z,cord_h,cord_l; void delay(unsigned char t) /延时 unsigned char i,j; for(j=t;j0;j-) for(i=110;i0;i-); void key() /检测有无键盘按下 int a=1; cord_h=0 xff; PB=cord_h; cord_l=0; while(!cord_l&a) delay(10
26、); cord_l=PC; if(cord_l) a=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 15 页共 17 页 unsigned char keyscan() /扫描键盘并返回响应的键值 int a; x=0; y=0; cord_h=0 x01; do x+; PB=cord_h; cord_l=PC; cord_h=1; while(!cord_l); a=0
27、 x01; cord_h=0 xff; PB=cord_h; cord_l=PC; while(!(cord_l&a) a=1; y+; cord_l=PC; z=x+y*8; return z; while(PC); delay(5); while(PC); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 16 页共 17 页 void main() COM=0 x02; /81
28、55 的 B 口设置为输出口, C 口设置为输入口P1=0; while(1) key(); P1=keyscan(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - 武汉理工大学计算机控制技术课程设计说明书第 17 页共 17 页参考文献1 于海生. 计算机控制技术 . 机械工业出版社, 2010 2 郑学坚,周斌 . 微型计算机原理与应用 . 清华大学出版社3 沈美明,温冬婵 . IBM-PC汇编语言程序设计 . 清华大学出版社4 何立民. 单片机应用系统设计 . 北京航空航天大学出版社5 姚燕南,薛钧义 . 微型计算机原理 . 西安电子科技大学出版社6 沙占友等 . 新编实用数字化测量技术 . 国防工业出版社7 宋春荣等 . 通用集成电路手册 . 山东科技出版社名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -