非编码键盘的扫描程序设计_第1页
非编码键盘的扫描程序设计_第2页
非编码键盘的扫描程序设计_第3页
非编码键盘的扫描程序设计_第4页
非编码键盘的扫描程序设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、摘 要-1 1 设计方案 -2 1.1 设计任务 -2 1.2 设计方案 -2 2 系统硬件设计-3 2.1 最小应用系统 -3 2.2 8155 扩展电路-4 2.3 矩阵键盘接口电路 -6 2.4 LCD1602 接口电路-6 2.5 主电路设计 -8 3 系统软件设计-8 3.1 主程序设计-9 3.2 延时程序设计-9 3.3 键盘扫描子程序设计-10 3.4 显示子程序设计-11 4 系统调试与结果 -13 4.1 调试内容与问题解决 -13 4.2 运行结果与分析-13 小结-15 参考文献 -16 附录-17 摘 要 计算机控制技术是一门以电子技术、自动控制原理、计算机应用技术为

2、基础, 以计算机控制技术为核心,综合可编程控制技术、单片机技术、计算机网络技术, 从而实现生产技术的精密化、生产设备的信息化、生产过程的自动化及机电控制 系统的最佳化的专门学科。企业对具备较强的计算机控制技术应用能力专门人才 需求很大。 本文在 proteus7.5 软件上利用 8155 芯片来扩展 8031 单片机的 I/O 接口, 在 keil 软件下采用 C 语言编程,生成.hex 文件,可以仿真实现 6*6 矩阵键盘的 按键识别和消除按键抖动,将识别到的按键更人性化的在 lcd1602 的液晶显示, 主要由方案设计、硬件电路设计、系统软件设计和系统调试四部分组成。 关键词:8031 单

3、片机 8155 芯片 矩阵键盘 I/O 口扩展 1602 液晶 非编码键盘的扫描程序设计 1 设计方案 1.1 设计任务 通过8155扩展8031微控制器I/O口组成66行列式键盘行列式键盘。设计非 编码键盘的扫描硬件系统,画出电路图;对键盘按键能够正确识别,去抖动;键 盘扫描;撰写设计说明书。 1.2 设计方案 首先,将用 8155 芯片扩展 8031 单片机的 I/O 口,然后需要检测 6*6 的矩阵 键盘的 12 根导线可分别接在 8155 的 PB0-PB6 和 PC 口,LCD1602 的 8 根数据线可 接在 8155 的 PA0 口,控制线接在单片机的 P2.0-P2.3,由于

4、8155 是可编程芯片, 所以将的 PA、PB 和 PC 口依次设为输出、输出和输入,通过编写键盘扫描程序来 识别按键并返回按键值,最后判断将识别到的按键值形象的显示在 LCD1602 液晶 上。主电路结构框图如图 1-1 所示。 图 1-1 系统结构图 8031 单片机 6*6 矩阵键盘 8155 芯片复位电路 晶振 LCD1602 2 系统硬件设计 2.1 最小应用系统 80C31 单片机,它是 8 位高性能单片机。属于标准的 MCS-51 的 HCMOS 产 品。它结合了 HMOS 的高速和高密度技术及 CHMOS 的低功耗特征,标准 MCS- 51 单片机的体系结构和指令系统。 80C

5、31 内置中央处理单元、128 字节内部数 据存储器 RAM、32 个双向输入/输出(I/O)口、2 个 16 位定时/计数器和 5 个两级 中断结构,一个全双工串行通信口,片内时钟振荡电路。但 80C31 片内并无程序 存储器,需外接 ROM。 此外,80C31 还可工作于低功耗模式,可通过两种软件 选择空闲和掉电模式。在空闲模式下冻结 CPU 而 RAM 定时器、串行口和中断系 统维持其功能。掉电模式下,保存 RAM 数据,时钟振荡停止,同时停止芯片内 其它功能。本次设计采用 80C31 的 PDIP(40pin)封装形式,管脚图如图 2-1 所示。 图 2-1 8031 管脚图 80c3

6、1 单片机的 40 根管脚,若要单片机正常工作必须满足: 1. 电源线 2 根 Vcc:编程和正常操作时的电源电压,接+5V。 Vss:地电平。 2. 晶振:2 根 XTAL1:振荡器的反相放大器输入。使用外部震荡器是必须接地。 XTAL2:振荡器的反相放大器输出和内部时钟发生器的输入。当使用外部振 荡器时用于输入外部振荡信号。 所以可以得到单片机的最小应用系统如图 2-2 所示。 图 2-2 8031 最小应用系统 2.2 8155 扩展电路 8155 芯片介绍关于 Intel 的 8155/8156:是一多功能的可编程外围接口芯片, 40 脚双列直插封装,有 A 口、B 口、C 口和定时器

7、/计数器低 8 位以及定时器/计 数器高 8 位五个端口,另外 8155 内部还有一个命令/状态寄存器,所以 8155 内 部共有 6 各端口。对它们只需要使用 即可实现编址,如表 1-1 所示。 表 1-1 8155 的端口地址编码 AD 7 AD 6 AD 5 AD 4 AD 3 AD 2 AD 1 AD 0 对应端口 000 命令/状态寄 存器 001 A 口 010 B 口 011 C 口 100 定时器/计数 器低 8 位 101 定时器/计数 器高 8 位 8155 的 A 口有输入和输出两种工作方式,B 口也有输入和输出两种工作方 式,而 C 口有输入方式(ALT1),输出方式(

8、ALT2),A 口控制端口方式 (ALT3)以及 A 口 和 B 口控制端口方式(ALT4)四种工作方式。这些端口的 工作方式是由 8155 内部的命令寄存器(命令字)来控制的。命令字除了规定端 口的工作方式还规定了定时器/计数器的工作方式。命令字只能进行写操作。其 格式如图 2-3 所示。 图 2-3 8155 的命令字 结合 8031 和 8155 的芯片结构和特点,可设计出如图 2-4 所示的扩展电路。 图 2-4 8155 扩展电路 2.3 矩阵键盘接口电路 编码键盘与单片机的接口单片机系统所用的键盘有编码键盘和非编码键盘两 种。 非编码键盘是由一些按键排列成的一个行列矩阵。按键的作用

9、,只是简单地 实现接点的接通和断开,但必须有一套相应的程序与之配合,才能产生出相应的 键码。非编码键盘几乎不需要附加什么硬件电路,目前,在微型计算机控制系统 中使用比较普遍。本次设计有一个 6 行6 列的非编码键盘,按行依次为 1-36, 键盘的行线接 8155C 口的六条线 PB5PB0,键盘的列线则接 8155C 口的 6 条线,而 且在 C 口接下拉电阻。如图 2-5 所示。 图 2-5 矩阵键盘接口电路 2.4 LCD1602 接口电路 LCD1602 字符型液晶显示模块是一种专门用于可以显示 16 列*2 行显示字母、 数字、符号等点阵式 LCD, 16*2 等的模块。其管脚介绍如下

10、: 第 1 脚:VSS 为地电源。 第 2 脚:VDD 接 5V 正电源。 第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对 比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调 整对比度。 第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄 存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。 当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为 高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。 第 6 脚:E 端为使能端,

11、当 E 端由高电平跳变成低电平时,液晶模块执行命 令。 第 714 脚:D0D7 为 8 位双向数据线。 图 2-6 LCD1602 接口电路 第 15 脚:背光源正极。 第 16 脚:背光源负极。 综合可设计液晶与 8031 单片机及 8155 芯片的接口电路如图 2-6 所示。 2.5 主电路设计 综上各子模块电路的设计,可设计出主电路图如图 2-7 所示 图 2-7 主电路图 3 系统软件设计 3.1 主程序设计 主程序主要包括三个部分:初始化程序,调用判断子程序和调用检测子程序, 其中显示子程序被调用在检测子程序中。其流程图如图 3-1 所示。 开始 Y N Y 图 3-1 主程序流程

12、图 3.2 延时程序设计 延时程序是采用双重 for 语句循环自减的方法,将 i 赋值 t,j 赋值 110 运 用循环重复 t 遍 110 自减到 0。延时时间计算方法: 振荡器的频率为 12MHz,一个振荡器周期为 1/12 微秒,一个机器周期为 12/12=1 微秒 计算机执行每步就需要 1 微秒,延时时间就是执行步数*1 微秒。 子程序流程图如图 3-2 所示。 有键闭合? 结束 调用检测子程序 初始化 调用判断子程序 开 始 j 自减一是 否为零 i 自减一是 否为零 i 赋初值 t j 赋初值 110 图 3-2 延时子程序流程图 3.3 键盘扫描子程序设计 设置 8155 的 P

13、A、PB 和 PC 口依次设为输出、输出和输入,这样在没有任何 键按下时,所有键盘行线成高电平,列线上的信号都是低电平。按键识别有各种 方法,此系统只 “行扫描”法: (1)确定是否有按键按下。PB 口输出到键盘的行线,然后检测键盘的列线 信号。若没有键按下,则为 00000。若有任一个按键按下,则有某一条列线为 0,也就是当 PB5PB0 不为时,就表示有键按下。 (2)通过“行扫描”确定已按键的行、列位置。所谓行扫描就是依次给每 条行线输入 1 信号,而其余各行都输入 0,并检测每次扫描时所对应的列信号。 并检测每次所对应的 C 口输入。只有在某行上有键按下时,在这一行上输入 1, 在列输

14、出上才能检测到 1 信号。若是输入为 1 的这一行上没有按键按下,则收到 的列信号仍然全是 0。因此,只要记下列信号不全为 0 时的 B 口输出及 C 口输入, 就能确定以按键的位置。这样,通过行扫描,就可以确定按键的行、列坐标。 (3)消除键抖动。一般按键在按下的时候有抖动的问题,即键的簧片在按 下时会有轻微的弹跳,需经过一个短暂的时间才会可靠地接触。若在簧片抖动时 进行扫描就可能得出不正确的结果。因此,在程序中要考虑防抖动的问题。最简 单的办法是在检测到有键按下时,等待(延迟)一段时间再进行“行扫描” ,延 结 束 NN Y 迟时间为 1020ms,这可通过调用子程序来消除抖动。扫描子程序

15、流程图如图 3-3 所示。 图 3-3 扫描子程序流程图 3.4 显示子程序设计 1602 液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。 指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。 指令 2:光标复位,光标返回到地址 00H 指令 3:光标和显示位置设置 I/D,光标移动方向,高电平右移,低电平左移, S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。 开 始 是否有按键? 结 束 扫描键盘 消除抖动 是否有按键? 读按键 指令 4:显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平 表示关显示。C:控制光标的开与关,高电平

16、表示有光标,低电平表示无光标 B: 控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令 5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标 指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电 平时为单行显示,高电平时为双行显示,F:低电平时显示 5X7 的点阵字符,高 电平时显示 5X10 的显示字符。 指令 7:字符发生器 RAM 地址设置。 指令 8:DDRAM 地址设置。 指令 9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收 命令或数据,如果为低电平表示不忙。 读写操作时序如图 3-4、3-5 所示 图 3-

17、4 读时序图 图 3-5 读时序图 4 系统调试与结果 4.1 调试内容与问题解决 软件与硬将件连接,仿真运行时,发现液晶的光标移动但是不显示初始化的 字符,经检查发现液晶控制线与单片机的接线出现了错误,改正后可显示初始化 字符。当按下按键时,发现液晶的显示与按键不对应,不能正确显示按键,甚至 有的按键不能按下去没有反应,经检查是扫描子程序的逻辑发生错误,出现死循 环,修改后可正确运行。 4.2 运行结果与分析 仿真运行开始,初始化后液晶显示器上出现预设的字符串“PLEASE ENTER”,如图 4-1 所示 图 4-1 初始化的界面 当按下第一行,第二列的按键时,液晶上出现了行和列的标号,别

18、且计算出 是 2,如图 4-2 所示。 图 4-2 按键 2 显示 当按下第 4 行,第 3 列时,液晶上也正确显示了按键的位置并且计算出为 21,图 4-3 所示。 图 4-3 按键 21 显示 依次按下每个键,并且检查液晶的显示,发现 36 个按键都能正确识别显示, 所以本设计合理、正确。 小结 在现代科学技术的众多领域中,计算机控制技术起着越来越重要的作用,因 此做好微型计算机控制技术这门课程的课程设计是非常有必要的,从中可以 讲课本中知识运用到实际运用中,也让我深刻的体会到了实践的艰巨性和挑战性, 在一周的课程设计中,我不断的改进自己的方法,通过查阅参书和网上的资料, 对于自己在知识上

19、的不足进行了非常好的补充和完善,使得我在短短两个星期对 于这门业课有了有了更切实的理解,更深的掌握,也学会了通过自己的努力挑战 未知的领域! 通过这次课设我才知道我们每个人的潜能是远远超过我们想象的,刚开始拿 到课设题目听说可以设计成几百行的程序都有点恐惧,因为之前写的汇编程序最 多才几十行,用 C 语言写单片机程序最多也才写过几百行,但是通过查阅资料, 一步一步来发现程序越写越长,写完才发现我们的编程水平比我们想象的要高, 但是离社会需求的还远。 这次课设我对程序的差错和调试也有很多新的想法,虽然我的编译器不能单 步运行,但是我可以在程序中添加一些延时程序和输出“*”的语句,这样就可 以知道

20、程序运行的大致步骤,是否运行我们需要的语句了。事实在我调试和查错 时的确起到了很大的作用。 最后,在排版美观方面,也有了较强的意识。在撰写实验报告的时候,格式 的要求非常的严格,字体的大小要求,段距,行距也都有统一的要求,开始时候 没有注意到这一点,后来发现了,需要全部更改,工作量很大。改正后,看着自 己的美观排版,心中还是非常欣慰的。 参考文献 1.李朝清.单片机原理及接口技术北京航天航空大学出版社.1994 年 2.何立民.单片机高级教程北京航天航空大学出版社.2000 年 3.杨光友,朱宏辉等单片机微型计算机原理及接口技术中国水利水电出版社. 2002 年 4. 于海生. 计算机控制技术

21、. 机械工业出版社,2010 5. 郑学坚,周斌. 微型计算机原理与应用. 清华大学出版社 6 何立民. 单片机应用系统设计. 北京航空航天大学出版社 7. 姚燕南,薛钧义. 微型计算机原理. 西安电子科技大学出版社 8. 沙占友等. 新编实用数字化测量技术. 国防工业出版社 9. 宋春荣等. 通用集成电路手册. 山东科技出版社 附录 #include /头文件 #include /XBYTE 宏定义 #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned lo

22、ng #define com XBYTE0 x7FF0 /8155 命令状态寄存器地址 #define pa XBYTE0 x7FF1 /8155 的 A 口地址 #define pb XBYTE0 x7FF2 /8155 的 B 口地址 #define pc XBYTE0 x7FF3 /8155 的 C 口地址 sbit lcdrs=P30; sbit lcden=P32; sbit lcdrw=P31; uchar table1=HANG ; uchar table2= LIE ; uchar table3=WE GET ; uchar table4=PLEASE ENTER ; int

23、x,y,z,hang,lie; void delay(uchar t); void wcom(uint co); void wdate(uchar date); void wdate1(ulong date); void panduan(); void jiance(); void xianshi(); void wcom(uint co)/液晶写控制字子程序 lcdrs=0; pa=co; delay(2); lcden=1; delay(2); lcden=0; void wdate(uchar date)/液晶显示单字符子程序 lcdrs=1; pa=date; delay(2); lcden=1; delay(2); lcden=0; void wdate1(ulong date)/液晶显示多字符子程序 uchar m; wcom(0 x80+0 x40+9); wcom(0 x04); wcom(0 x0C); if(date) while(date) m=date%10; wdate(0 x30+m); date/=10; void xianshi()/

温馨提示

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

评论

0/150

提交评论