找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1744|回复: 5
打印 上一主题 下一主题
收起左侧

以下程序请帮忙解惑,执行的逻辑关系不明白啊 不胜感激~拜谢

[复制链接]
跳转到指定楼层
楼主
ID:233997 发表于 2017-11-10 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sbit key4=P3^7;//key4是按键,按下S4键一次,利用定时器TO功能使数码管数值开始自动每秒加1,再次按下S4键,数值停止加1,保持显示原数
那么下面的函数是怎么执行的呢。
if(key4==0)//检测按键
        {
                delayms(10);//按键消抖
                if(key4==0)
                {
                        while(!key4);//不明白while在这个地方的用意,当key4=0时,while(!key4)为真,反之?
                        TR0=~TR0;//启动或停止定时器0  这个地方和key4按键有关系吗?为什么不直接是当按键按下,TR0=1;当松开按键key4 TR0=0;
                }
        }
}
程序执行的逻辑关系不明白啊,请大神解惑,谢谢

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2017-11-11 10:27 | 只看该作者
                while(!key4);//程序在此死循环,等待按键抬起
                TR0=~TR0;//按键抬起后才能执行开/关定时器
回复

使用道具 举报

板凳
ID:170536 发表于 2017-11-11 10:53 | 只看该作者
while(!key4);相当于while(key4==0);也就是按下key4后停在这里直到松开后才执行TR0=~TR0;
回复

使用道具 举报

地板
ID:212797 发表于 2017-11-11 14:55 | 只看该作者
while(!key4);的重点是while后面的“;”(分号),这样意思就明显了,就是说,只要key4=0,就一直在这干耗着什么都不做,而key4=0就刚好是按键按下了。所以这条语句翻译过来就是:只要按键按下去了我就干耗着什么都不做;
接下来一条语句是TR0=~TR0;,在这里要理解程序的顺序执行概念,这种顺序执行可以拿生活中的吃饭为例,这个顺序是:做饭——吃饭——洗碗。回到刚才的程序,在while(!key4);里说了,只要按键不放开程序就一直干耗着,而当按键释放以后,跳出while循环,执行TR0=~TR0;语句把定时器关了。
我们人从直观上看,是先按了按键,然后数码管的数字停住了。这就达到了我么你说的用按键控制数码管的目的。
另外,对于你说的按下和松开执行的问题,可以根据需要设计,比如我们常见的按键短按(按下就很快松开),我们一般设计为松开后执行,而长按(按下过一段时间)就设计为按下执行(只要时间达到长按的时间,就执行)。
回复

使用道具 举报

5#
ID:248915 发表于 2017-11-13 13:41 | 只看该作者
while(!key4);//死循环,等待按键抬起
TR0=~TR0;//按键抬起后才能执行开/关定时器
这样是确保对按键只做一次处理
回复

使用道具 举报

6#
ID:249211 发表于 2017-11-14 10:33 | 只看该作者
当key4仍然为0的时候,会一直执行while;只有当key4
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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