- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MSP430程序库七按键讲述
MSP430程序库七按键
按键是单片机系统最常用的输入设备之一;几乎是只要需要交互输入,就必须有键盘。这篇博客实现了一个通用的键盘程序,只要提供一个读取键值的函数(底层键值),程序将完成消抖、存入队列等一些列处理。同时本程序提供最常用的4*4矩阵键盘的程序,和4个按键的程序。
硬件介绍:
本文主要实现了一个键盘的通用框架,可以很方便的改为不同的键盘函数,这里实现了两种按键4个单独按键和4*4行列扫描的键盘。
4个按键的是这样的:四个按键分别一端接地,另一端接上拉电阻后输入单片机的P1.0-P1.3口;这样,按键按下时,单片机接到低电平,松开时单片机输入信号有上拉电阻固定为高电平。
4*4的按键:行输入信号配有桑拉电阻,无按键时默认电平高电平;列扫描信号线直接接到按键列线;读键时,列扫描信号由单片机给出低电平信号(按列逐列扫描),读取行信号,从而判断具体是哪个按键;电路图大概如下:
?
图中,IN是键盘的列扫描线,OUT是键盘的输出的行信号线。扫描是也可以按行扫描,这时IN是行扫描线,OUT的按键输出的列信号线。我的程序是按列扫描的(行列扫描原理一样,只是行列进行了交换)。
这里,同时实现了4*4按键的scanf函数的移植,同时,加入了之前实现的液晶的printf函数的移植,搭建了一个可以交互输入输出的完整的一个系统;液晶的printf又加入了函数,实现了退格;可以在输入错误数字的时候退格重新输入。
程序实现:
先说一下程序的结构,程序实现了一个循环队列,用来存放已按下的键值,可以保存必威体育精装版的四个按键,可以防止按键丢失;程序使用的是中断的方式进行按键,每16ms(用的是看门狗的间隔中断)读一次按键,进行判断键值是否有效,有效则放入队列,等待读取。
循环队列的实现:用数组实现,为判断队满,数组的最后一个元素不用于存储键码值:
/**********************宏定义***********************/
#define KeySize 4 //键码值队列
#define Length KeySize+1 //队列数组元素个数
/***************************************************/
/**********************键值队列*********************/
//可KeySize(Length-1)个键码循环队列占用一个元素空间
char Key[Length];
入队函数:入队时,队满则出队一个,以保存必威体育精装版的四个按键。
void AddKeyCode(char keyCode)
{
if((rear+1)%Length==front) //队满
{
front=(front+1)%Length; //出队一个
}
Key[rear] = keyCode;
rear=(rear+1)%Length;
}
出队函数:出队函数即是读取按键的函数,以供其他需要的地方调用。
char ReadKey()
{
char temp;
//if(rear==front) return \0; //无按键
while(rear==front);
temp = Key[front];
front=(front+1)%Length;
return temp;
}
KeyProcess:这个函数即是键盘处理函数,需要被每10ms-20ms的时间调用一次的函数,在这里把它放入了看门狗定时器16ms的中断中;函数流程图和函数内容如下:
?
void KeyProcess()
{
static char keyValue = 0xff; //按键标识,键值
static char addedFlag = 0; //加入队列标志
char keyVal = GetKey();
if(keyVal==0xff) //无按键
{
keyValue = 0xff;
addedFlag = 0;
return;
}
if(keyValue==0xff) //之前状态无按键
{
keyValue = keyVal;
return;
}
if(keyValue!=keyVal) //和前次按键不同
{
keyValue = keyVa
您可能关注的文档
最近下载
- 必威体育精装版整理新概念英语第3册单词表含听写版(打印版).pdf
- 完形填空说题课件-2025届高考英语一轮复习.pptx VIP
- 多维阅读第3级—Crazy Cat 疯狂的猫咪 课件.ppt
- 丽声北极星分级绘本第三级下 The Best Time of All 课件.pptx
- [英语]英语ppt美食.ppt VIP
- 会计学原理练习题参及指导作业.pdf VIP
- 小学创意编程校本课程《安全出行——程小奔AI机器人通过传感器进行条件判断与侦测实现颜色识别》说课课件.pptx
- 无蚊社区技术方案.docx
- RDPAC-HKAPI关于在粤港澳大湾区“港澳药械通”下开展与医院、医疗卫生专业人士及患者的互动活动的指导意见.pdf VIP
- 部编版七年级历史上册教案教学设计.docx
文档评论(0)