电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • 扫码下载手机洽洽

    随时找料

    即刻洽谈

    点击下载PC版
  • 公众号

    电子元器件

    采购信息平台

  • 移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

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

来源:-- 作者:-- 浏览:423

标签:

摘要:#include sbit key1=P3^4; sbit p10=P1^0; void main() { while(1) { &n

#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;

型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67
Baidu
map