网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月28日漏签0天
c语言吧 关注:801,967贴子:4,376,923
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 9回复贴,共1页
<<返回c语言吧
>0< 加载中...

if条件判断语句,谁能帮我分析一下?

  • 只看楼主
  • 收藏

  • 回复
  • xiao19344859
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试平台是一个stm32f103zet6的ARM芯片,
我这里只是把它当作单片机来用,下面的程序是平台提供的,可以正常使用,有几个地方不能理解!
//mode为0是不支持连续按
//mode为1是支持连续按
//返回0表示无按键按下
//返回值在1~4内,则对应四个按键a,b,c,d
u8 key_a(u8 mode)
{
static u8 key_up=1;//按键按下标志
if(mode) key_up=1;//支持连按
if(key_up&&(a==0||b==0||c==0||d==1))
{
delay_ms(10);//消抖
key_up=0;
if(a==0) return=1;//a键按下
else if(b==0) return=2;//b键按下
rese if(c==0) return=3;//c键按下
rese if(d==1) return=4;//d键按下
if(key_up&&(a==1||b==1||c==1||d==0))
keu_up=1;//无按键按下
}
return 0;//无按键按下返回0
}
这是一个完整的按键判断程序,带返回值带一个参数!
当key_a(1);时支持连按(也就是按住按键不松手数值会一直往上加)
按键a,b,c是低电平触发,d按键是高电平触发!
这里有几个问题无法理解,
第一条语句static u8 key_up=1;中的static有什么用? 后面的u8. 是申明一个8位的无符号数据,同时初始值为1,
接着if(mode) key_up=1; 这里mode是1还是0好像没有什么用,因为key_up在上一条语句已经赋值为1了,
到了按键判断语句
if(key_up&&(a==0||b==0||c==0||d==1))
这里两个括号是不是先判断第二个括号里面的条件,然后再跟key_up判断如果为真就执行if里面的语句,
我不能理解的是怎么通过mode来判断支不支持连续按!


  • xiao19344859
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谁能帮我分析一下?


2026-03-28 01:03:27
广告
不感兴趣
开通SVIP免广告
  • 这个竟然有人用
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
明明就是个MCU 翻翻原子的STM32库函数或者寄存器版的手册 都有详解


  • 企儿儿
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看起来很复杂,但是其实很简单。
static这个关键字的意思是声明一个静态的变量。什么是静态变量?我们在一个函数中定义一个变量,跳出这个函数之后这个变量就不存在了。然而,被static修饰的变量是依旧保留的,并在下次进入该函数的时候再次使用,值不变,与上次函数结束时的值相同。详细去看书。
key_up是一个static修饰的变量,只在第一次初始化的时候赋值为1,第二次及以后的代码中,并不会重新赋值为1,而是保留原来的值。
观察下方的if函数可以发现,key_up为0,则不执行,key_up为1才会执行。
当mode为0,进入函数的时候,key_up为原值。若为1,执行下方判断,变为0,下次再进入函数,key_up为原值,也就是0,就不会再检测按键状态了;若为0不进入检测。也就是只会检测一遍,不支持连续按键。
当mode为1,进入函数的时候,key_up被赋值为1,永远都会执行检测,因此支持连续按键。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示