专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
按键扫描Key_Scan中为什么设2个变量
2019-07-15 16:45
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
13060
2
1780
本帖最后由 playwife_花 于 2015-1-21 09:04 编辑
疑问:把变量 key_check去掉, key_check = KeyPort和 switch (key_check &= 0x0F)中的check改成checkin功能也能实现;;;;;完整代码楼下,求助大神!!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
playwife_花
1楼-- · 2019-07-15 19:33
#include <msp430x14x.h>
#include "Config.h"
uchar key;a
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{
//用于控制按键
P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻
P6DIR = 0xFF; //P6口输出模式
}
//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar Key_Scan(void)
{
uchar key_check;
uchar key_checkin;
key_checkin=KeyPort; //读取IO口状态,判断是否有键按下
key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下
if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KeyPort;
if(key_checkin!=0x1F)
{
key_check = KeyPort;
switch (key_check &= 0x0F)
{
case 0x0E:key=1;break;
case 0x0D:key=2;break;
case 0x0B:key=3;break;
case 0x07:key=4;break;
}
}
}
else
{
key=0xFF;
}
return key;
}
void main(void)
{
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
Port_init(); //系统初始化,设置IO口属性
delay_ms(100); //延时100ms
while(1)
{
Key_Scan(); //键盘扫描,看是否有按键按下
if(key!=0xff) //如果有按键按下,则显示该按键键值1~4
{
{
switch(key)
{
case 1: LED8 = 0xFC;break; //给不同的键赋键值,键值1,亮2个LED灯
case 2: LED8 = 0xF3;break; //给不同的键赋键值,键值2,亮2个LED灯
case 3: LED8 = 0xCF;break; //给不同的键赋键值,键值3,亮2个LED灯
case 4: LED8 = 0x3F;break; //给不同的键赋键值,键值4,亮2个LED灯
}
}
}
else
{
// LED=key; //没有按键的时候显示上次的键值
}
}
}
只改变Key_Scan,其他不变;
uchar Key_Scan(void)
{ uchar key_checkin;
key_checkin=KeyPort; //读取IO口状态,判断是否有键按下
key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下
if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KeyPort;
if(key_checkin!=0x1F)
{
key_checkin = KeyPort;
switch (key_checkin&= 0x0F)
{
case 0x0E:key=1;break;
case 0x0D:key=2;break;
case 0x0B:key=3;break;
case 0x07:key=4;break;
}
}
}
加载中...
playwife_花
2楼-- · 2019-07-15 20:14
终于搞懂了,原来是为了怕弄混淆而设置了两个变量,一个功能是读取IO状态判断是否有按键按下,一个是判断哪个按键按下,心里好明快,结贴
加载中...
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
携手ADI,踏上电子工程师之巅—车辆电气化视频,答题领奖!
1 个回答
如何提升论坛质量,看你了!
20 个回答
【最终名单】二姨家喊你来拿100份新年大礼啦~
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "Config.h"
uchar key;a
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{
//用于控制按键
P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻
P6DIR = 0xFF; //P6口输出模式
}
//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar Key_Scan(void)
{
uchar key_check;
uchar key_checkin;
key_checkin=KeyPort; //读取IO口状态,判断是否有键按下
key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下
if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KeyPort;
if(key_checkin!=0x1F)
{
key_check = KeyPort;
switch (key_check &= 0x0F)
{
case 0x0E:key=1;break;
case 0x0D:key=2;break;
case 0x0B:key=3;break;
case 0x07:key=4;break;
}
}
}
else
{
key=0xFF;
}
return key;
}
void main(void)
{
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
Port_init(); //系统初始化,设置IO口属性
delay_ms(100); //延时100ms
while(1)
{
Key_Scan(); //键盘扫描,看是否有按键按下
if(key!=0xff) //如果有按键按下,则显示该按键键值1~4
{
{
switch(key)
{
case 1: LED8 = 0xFC;break; //给不同的键赋键值,键值1,亮2个LED灯
case 2: LED8 = 0xF3;break; //给不同的键赋键值,键值2,亮2个LED灯
case 3: LED8 = 0xCF;break; //给不同的键赋键值,键值3,亮2个LED灯
case 4: LED8 = 0x3F;break; //给不同的键赋键值,键值4,亮2个LED灯
}
}
}
else
{
// LED=key; //没有按键的时候显示上次的键值
}
}
}
只改变Key_Scan,其他不变;
uchar Key_Scan(void)
{ uchar key_checkin;
key_checkin=KeyPort; //读取IO口状态,判断是否有键按下
key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下
if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KeyPort;
if(key_checkin!=0x1F)
{
key_checkin = KeyPort;
switch (key_checkin&= 0x0F)
{
case 0x0E:key=1;break;
case 0x0D:key=2;break;
case 0x0B:key=3;break;
case 0x07:key=4;break;
}
}
}
一周热门 更多>