MSP430程序库(七)按键

MSP430程序库(七)按键

ID:36859418

大小:236.48 KB

页数:9页

时间:2019-05-16

MSP430程序库(七)按键_第1页
MSP430程序库(七)按键_第2页
MSP430程序库(七)按键_第3页
MSP430程序库(七)按键_第4页
MSP430程序库(七)按键_第5页
资源描述:

《MSP430程序库(七)按键》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MSP430程序库<七>按键按键是单片机系统最常用的输入设备之一;几乎是只要需要交互输入,就必须有键盘。这篇博客实现了一个通用的键盘程序,只要提供一个读取键值的函数(底层键值),程序将完成消抖、存入队列等一些列处理。同时本程序提供最常用的4*4矩阵键盘的程序,和4个按键的程序。1.硬件介绍:本文主要实现了一个键盘的通用框架,可以很方便的改为不同的键盘函数,这里实现了两种按键4个单独按键和4*4行列扫描的键盘。4个按键的是这样的:四个按键分别一端接地,另一端接上拉电阻后输入单片机的P1.0-P1.3口;这样,按键按下时,单片机接到低电平,松开时

2、单片机输入信号有上拉电阻固定为高电平。4*4的按键:行输入信号配有桑拉电阻,无按键时默认电平高电平;列扫描信号线直接接到按键列线;读键时,列扫描信号由单片机给出低电平信号(按列逐列扫描),读取行信号,从而判断具体是哪个按键;电路图大概如下:图中,IN是键盘的列扫描线,OUT是键盘的输出的行信号线。扫描是也可以按行扫描,这时IN是行扫描线,OUT的按键输出的列信号线。我的程序是按列扫描的(行列扫描原理一样,只是行列进行了交换)。这里,同时实现了4*4按键的scanf函数的移植,同时,加入了之前实现的液晶的printf函数的移植,搭建了一个可以交

3、互输入输出的完整的一个系统;液晶的printf又加入了函数,实现了退格;可以在输入错误数字的时候退格重新输入。2.程序实现:先说一下程序的结构,程序实现了一个循环队列,用来存放已按下的键值,可以保存最新的四个按键,可以防止按键丢失;程序使用的是中断的方式进行按键,每16ms(用的是看门狗的间隔中断)读一次按键,进行判断键值是否有效,有效则放入队列,等待读取。循环队列的实现:用数组实现,为判断队满,数组的最后一个元素不用于存储键码值:/**********************宏定义***********************/#defin

4、eKeySize4//键码值队列#defineLengthKeySize+1//队列数组元素个数/***************************************************//**********************键值队列*********************///可KeySize(Length-1)个键码循环队列占用一个元素空间charKey[Length];入队函数:入队时,队满则出队一个,以保存最新的四个按键。voidAddKeyCode(charkeyCode){if((rear+1)%Lengt

5、h==front)//队满{front=(front+1)%Length;//出队一个}Key[rear]=keyCode;rear=(rear+1)%Length;}出队函数:出队函数即是读取按键的函数,以供其他需要的地方调用。charReadKey(){chartemp;//if(rear==front)return'';//无按键while(rear==front);temp=Key[front];front=(front+1)%Length;returntemp;}KeyProcess:这个函数即是键盘处理函数,需要被每10ms-

6、20ms的时间调用一次的函数,在这里把它放入了看门狗定时器16ms的中断中;函数流程图和函数内容如下:voidKeyProcess(){staticcharkeyValue=0xff;//按键标识,键值staticcharaddedFlag=0;//加入队列标志charkeyVal=GetKey();if(keyVal==0xff)//无按键{keyValue=0xff;addedFlag=0;return;}if(keyValue==0xff)//之前状态无按键{keyValue=keyVal;return;}if(keyValue!=ke

7、yVal)//和前次按键不同{keyValue=keyVal;//保存新按键值return;}if(addedFlag==1)//已加入队列{return;}addedFlag=1;AddKeyCode(KeyCode[keyVal]);}这个函数完成按键的判断,并和上次的比较,从而判断是否是有效按键,再根据是否已经入队保存,去判断是否要保存,入队列保存按键。这个函数需要每10ms-20ms中断运行一次:#pragmavector=WDT_VECTOR__interruptvoidWDT_ISR(){KeyProcess();}这是430看门

8、狗的间隔定时中断,设置的是每16ms中断一次:WDTCTL=WDT_ADLY_16;//看门狗内部定时器模式16msIE1

9、=WDTIE;//允许看门狗中断KeyP

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。