AVR学习笔记十九、44矩阵键盘实验

上传人:蓝** 文档编号:229860448 上传时间:2023-08-22 格式:DOCX 页数:6 大小:97.53KB
收藏 版权申诉 举报 下载
AVR学习笔记十九、44矩阵键盘实验_第1页
第1页 / 共6页
AVR学习笔记十九、44矩阵键盘实验_第2页
第2页 / 共6页
AVR学习笔记十九、44矩阵键盘实验_第3页
第3页 / 共6页
资源描述:

《AVR学习笔记十九、44矩阵键盘实验》由会员分享,可在线阅读,更多相关《AVR学习笔记十九、44矩阵键盘实验(6页珍藏版)》请在装配图网上搜索。

1、AVR 学习笔记十九、4X4 矩阵键盘试验19.1 实例功能在前面的实例中我们已经学习了在单片机系统中检测独立式按键的接口电路和程序设 计,独立式按键的每个按键占用 1 位 I/O 口线,其状态是独立的,相互之间没有影响,只要单独测试链接案件的I/O 口线电平的凹凸就能推断键的状态。独立式按键电路简洁、配置灵敏,软件构造也相对简洁。此种接口方式适用于系统需要按键数目较少的场合。在按键数 量较多的状况下,如系统需要 8 个以上按键的键盘时,承受独立式接口方式就会占用太多的I/O 口,这对于I/O 口资源不太丰富的单片机系统来说显得相当铺张,那么当按键数目相对较多的时候,为了削减 I/O 口资源的

2、占用,应当实行什么样的方式才能够既满足多按键识别, 又削减I/O 口的占用呢?固然我们可以承受端口扩展器件比方串并转换芯片实现单片机I/O 口的扩展,但是这种方式既增加了电路的简洁性,又增加了系统的本钱开销。有没有比较经济实惠的方法呢?事实上,在实际引用中我们常常承受矩阵式键盘的方式来节约I/O 口资源和系统本钱。在这个试验中,我们承受 4X4 矩阵键盘来实现使用 8 个 I/O 口识别 16 个按键的试验,本实例分为三个功能模块,分别描述如下: 单片机系统:利用 ATmega16 单片机与矩阵键盘电路实现多按键识别。 外围电路:4X4 矩阵键盘电路、LED 数码管显示电路。 软件程序:编写软

3、件,实现 4X4 矩阵键盘识别 16 个按键的程序。通过本实例的学习,把握以下内容: 4X4 矩阵键盘的电路设计和程序实现。19.2 器件和原理19.2.1 矩阵键盘的工作原理和扫描确认方式当键盘中按键数量较多时,为了削减对 I/O 口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图 1 所示,它由行线和列线组成,按键位于行、列的穿插点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行或列线上的电平变化可以确定哪个按键被按下。图 1 为一个 4 x 4 的行列构造,可以构成 16 个键的键盘。很明显,在按键

4、数量多的场合,矩阵键盘与独立式按键键盘相比可以节约很多的I/O 口线。图 1 4X4 键盘扫描电路矩阵键盘不仅在连接上比单独式按键简洁,它的按键识别方法也比单独式按键简洁。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和线反转法。这两种方法的根本思路是承受循环查循的方法,反复查询按键的状态,因此会大量占用 MCU 的时间,所以较好的方式也是承受中断的方法来设计,尽量削减键盘查询过程对MCU 的占用时间。在本实例中只是简洁演示矩阵键盘的按键识别技术,所以照旧承受查询方法。19.2.2 承受行扫描法对矩阵键盘进展判别的思路下面以图 2 为例,介绍承受行扫描法对矩阵键盘进展判别的思路。图

5、2 中,PA0、PA1、PA2、PA3 为 4 根列线,这 4 根列线通过电阻接正电源,即上拉固然AVR 单片机 I/O 口有内部上拉电阻,可以设置内部上拉电阻使能,从而不用连接 4 个外部上拉电阻,PA4、PA5、 PA6、PA7 为 4 根行线。将行线所接的I/O 口作为输出端,列线所接的I/O 口作为输入端。这样,当没有按键按下时,全部的输入端都是高电平,。设置行线输出低电平,一旦有键按 下,则输入线会被拉低,这样通过读取输入线的状态就可以得知是否有按键按下。行扫描法 按键识别的过程如下。图 2 ATmega16 与 4X4 键盘的连接1) 、推断键盘中是否有按键按下。将全部行线 PA4

6、PA7 置低电平输出,然后读PA0 PA3 四根输入列线的状态。只要有低电平消灭,则说明有键按下实际编程时, 还要考虑按键的消抖。如读到的都是高电平,则表示无键按下。2) 、推断闭合键所在位置。在确认有键按下后,即可进入确定具体哪个键按下的过程 。其思路是:依次将 4 根行线分别置为低电平,即在某根行线置为低电寻常,其余行线为高电平,在确定某根行线置为低电平后,再逐列检查各列线的电平状态,假设某列为低 电平,则该列线与置为低电平的行线穿插处的按键就是闭合的按键。矩阵按键的识别仅仅是确认和定位了行和列的穿插点上的按键,接下来还要考虑键盘的编码,即对各个按键进展编号。在软件中常通过计算的方法或查表

7、的方法对按键进展具体的定义和编号。在单片机嵌入式系统中,键盘扫描只是 MCU 的工作内容之一。MCU 除了要检测键盘和处理键盘操作之外,还要进展其他事物的处理,因此,MCU 如何响应键盘的输入需要在实际系统程序设计时认真考虑。通常,完成键盘扫描和处理的程序是系统程序中的一个专用子程序,MCU 调用该键盘扫描子程序对键盘进展扫描和处理的方式有三种:程序把握扫描、定时扫描和中断扫描。 程序把握扫描方式。在主控程序中的适当位置调用键盘扫描程序,对键盘进展读取和处理。 定时扫描方式。在该方式中,要使用MCU 的一个定时器,使其产生一个10ms 的定时中断,MCU 响应定时中断,执行键盘扫描,当在连续两

8、次中断中都读到一样的按键按下间隔 10ms 作为消抖处理,MCU 才执行相应的键处理程序。 中断方式。使用中断方式时,键盘的硬件电路要做确定的改动,增加一个按键产生中断信号的输入线,当键盘有按键按下时,键盘硬件电路产生一个外部的中断信号,MCU 响应外部中断,进展键盘处理。在本实例中我们介绍基于程序把握扫描方式的键盘处理系统的设计方法。19.3 电路和连接本试验主要有两局部电路模块组成:数码管显示电路,4X4 键盘电路。数码管显示电路电路在前面的实例中我们已经做过介绍,在此不再重复。这里我们重点介绍一下 4X4 键盘电路。4X4 键盘电路如图 3 所示图 34X4 键盘电路18.4程序设计1、

9、程序功能在本实例中,我们利用数码管将 4X4 键盘中按下的按键的键码值显示出来。2、函数说明本实例主要有数码管显示程序和4X4 键盘识别程序,数码管显示程序我们前面例子中已经介绍过,本实例的程序中不再具体说明。3、编程说明使用 WINAVR 开发环境,使用的是外部 12M 的晶振,所以需要将makefile 文件中的时钟频率修改为 12M。另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M 晶振留意是晶振,不是外部振荡器,确定不要选择错了,否则会导致单片机不能再烧写程序。4、程序代码关于数码管显示程序,在此不再列出,直接打包到程序文件夹中。下面列出主程序以及 4X4 键盘识别程序。/*A

10、VR使用范例* MCU: ATmega164*4 矩阵键盘检测* maweili* 编译器:usbisp*2023.04.03*/#include /io 端口存放器配置文件,必需包含#include /GCC 中的延时函数头文件unsigned char Disp_Buff16 = 0xaf,0xa0,0xc7,0xe6,0xe8,0x6e,0x6f,0xa2,0xef,0xee,0xeb,0x6d,0x0f,0xe5,0x4f,0x4b;/数码管字型码表显示:0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,Funsigned char KeyNumber;/函数声明void D

11、elayus(unsigned int lus);/us 延时函数void Delayms(unsigned int lms);/ms 延时函数unsigned char Read_Key(void);/ 读取键值int main(void)/GCC 中 main 文件必需为返回整形值的函数,没有参数PORTB = 0X00;/PORTB 口全部输出低电平,使数码管的段位全部为低电平, 不亮DDRB = 0XFF;/配置端口PB 全部为输出口PORTC &= (1 PC6);/配置数码管 0 的位选通口为低电平,不导通数码管DDRC |= (1 PC6);/KeyNumber = 16;/开头

12、没有按键按下,不显示while(1)Read_Key;/读取键值PORTB = Disp_BuffKeyNumber;/键值送数码管显示PORTC |= (1 PC6);/ 数码管的位选通端口输出高电平,使数码管显示/us 级别的延时函数void Delayus(unsigned int lus)while(lus-)_delay_loop_2(3);/_delay_loop_2(1)是延时 4 个时钟周期,参数为 3 则延时12/个时钟周期,本试验用 12M 晶体,则 12 个时钟周期为 12/12=1us/ms 级别的延时函数void Delayms(unsigned int lms)wh

13、ile(lms-)Delayus(1000);/延时 1ms/4*4 矩阵键盘扫描,PD 高四位为行输出口,低四位为列输入口unsigned char Read_Key(void)unsigned char i,j;DDRD = 0xf0;/设置PD 高四位为输出口,低四位为输入口PORTD = 0x00;/ 初始运行输出全为 0if(PIND & 0x0f) = 0x0f) return 0;/ 推断有无按键动作,没有,返回0 elseDelayms(20);/按键消抖if(PIND & 0x0f) = 0x0f) return 0;/再次推断是否有按键动作elsefor(i = 4;i 8;i+)/逐行输出 0PORTD = (1 i) | 0x0f;/第 i 行输出 0 for(j = 0;j 4;j+)return 0;if(PIND & (1 j) = 0)KeyNumber = (i - 4) * 4 + j;/逐列检测/计算键值

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!