STC单片机用键盘控制二极管亮灭的问题

      #include

  sbit key1=P3^4;

  sbit p10=P1^0;

  void main()

  {

  while(1)

  {

  p10=1;

  while(key1!=0);

  p10=0;

  }

  }

  我的目的是用键盘控制一个二极管的发光,按下键盘上的键后二极管发光,放开后二极管熄灭。用 while(key1!=0); 进行判断的话,程序工作正常:开始二极管熄灭,按下键盘上的对应按键后二极管被点亮。可是如果用 if(key1!=0); 进行判断的话,程序就会异常:二极管开始时候就亮了,按键盘上的键也没有任何反应。请问这是怎么回事呢?以前写一些小程序时候也是这样,用if 语句容易出错,但是改为while之后就运行正常了。请大家帮我解释一下这个问题~谢谢!

-------------------------------------------------------------------------  

  while和if的用法楼上还没有理解。

  while()判断括号内的表达式为1时,程序是不停地在执行while内部函数,相当于停在while语句这,不往下执行。当为0时才跳出内部函数,继续向下执行。

  if()判断括号内的表达式为1时,仅执行一次内部函数后就跳出if语句向下执行。当为0时直接跳出内部函数,继续向下执行。

  分析你写的这段程序,

  p10=1;

  while(key1!=0);

  p10=0;

  虽然现象达到了你的预期,但实际上是在你按下按键后,循环执行3条语句。而没有停在P10=0之后,所以实际上led是在不停地快速闪烁,而不是常亮。因为太快你看不出来而已。你可以在P10=0后加个延时函数就能看出来。建议修改一下。

  p10=1;

  while(key1!=0)

  {

  p10=0;

  }

  或者更简单一点,

  p10=1;

  while(key1!=0) //直接去掉分号

  p10=0;

永不止步步 发表于11-16 09:47 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号