OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8511|回复: 7

请同学帮忙把这段代码用白话文特别细致的描述出来 供我们菜鸟入门 谢谢了!

[复制链接]

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
发表于 2013-5-24 16:37:10 | 显示全部楼层 |阅读模式
 请同学帮忙把这段代码用白话文特别细致的描述出来 供我们菜鸟入门 谢谢了

u8 KEY_Scan(u8 mode)fficeffice" />

{

static u8 key_up=1;//按键按松开标志if(mode)key_up=1;  //支持连按

if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))

{

delay_ms(10);//去抖动

key_up=0;

if(KEY0==0)return 1;

else if(KEY1==0)return 2;

else if(KEY2==0)return 3;

else if(KEY3==1)return 4;

}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;

return 0;// 无按键按下

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2013-5-24 21:06:58 | 显示全部楼层
菜鸟应该多联系.
给你2个任务.
1,写一个按键扫描程序.
要求:程序返回值为0,表示没有按键按下,返回值为1,表示按键1按下,返回值为2,表示按键2按下,返回值为3,表示按键3按下.
提高:如果三个按键同时按下,什么效果?如果一个按键按下不松开,什么效果?
2,根据1的提高要求.实现一个高级一点的按键扫描函数.
基本要求同1,提高:按下一次只能返回一次,比如按下按键1,扫描函数第一次调用,返回1,第二次调用,如果按键没有松开,那么则返回0,不返回1,直到按键松开.
说白了,就是按下一次,只返回一次键值.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2013-5-24 21:07:23 | 显示全部楼层
能写出1,2两段代码,那么楼主位的代码,你就可以看懂了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
 楼主| 发表于 2013-5-24 21:21:16 | 显示全部楼层
static u8 key_up=1;
if(mode)key_up=1;  
老师:为啥两个连续的语句都为key_up赋值1呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2013-5-24 21:33:36 | 显示全部楼层
回复【4楼】吴月涛:
---------------------------------
static,你看一下这个关键字,会有什么效果.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
 楼主| 发表于 2013-5-25 22:02:10 | 显示全部楼层
 
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 
//4,KEY3按下 WK_UP
u8 KEY_Scan(u8 mode)
{ 
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1;  //支持连按  
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//去抖动 
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;     
 return 0;// 无按键按下
}
去掉static以后对哪一句语句的执行有影响?
在static u8 key_up=1中不给key_up赋值1对代码有没有影响?万分感谢!!![/mw_shl_code] 
提问者采纳
2013-04-17 18:28
static 就是告诉你 在这个函数里面 只初始化一次。
初始化一次之后,下一次进入函数不会再初始化了。这是static作用之一
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//去抖动 
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}
若执行这个条件
下一次进入 key_up=0了。而不是初始化的1[/mw_shl_code] 
追问
如果把static u8 key_up=1改为static u8 key_up,进入if的时候key_up的值确定吗?主函数里没有定义key_up值[/mw_shl_code]
回答
初始化为0.[/mw_shl_code]
提问者评价
非常感谢[/mw_shl_code]
评论|0

xpston008 |来自团队大家一起C |六级采纳率46%

擅长:C/C++

回复 支持 反对

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
 楼主| 发表于 2013-5-27 17:13:24 | 显示全部楼层
 其实:把这段程序放到主函数里就看懂了
回复 支持 反对

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
 楼主| 发表于 2021-4-28 11:54:10 | 显示全部楼层
stm32f103vet6现在价格多少?你们知道吗?据说要六,七十元了!涨疯了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 18:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表