单片机的一个简单开关程序

来源:百度知道 编辑:UC知道 时间:2024/05/26 02:46:47
我觉得这个程序没错,但是在仿真的时候不知道为什么总是不能实现开关控制LED的目的,LED就是不变
#include<AT89x51.H>
void delay()
{unsigned int i;
for(i=0;i<20000;i++);
}
void main()

{int k;

while(1)
{ k=P1^0;
if (k==0)
P0=0x02;
else
P0=0x01;
}
}

首先,不需要用到延时函数。其次,你把K定义成int型,那么它的取值就不只是0和1两个值,用if-else语句写的话数据的取值范围就会不对。应该在包含头文件后,把k定义成sbit类型,即sbit k=P1^0,这样k的取值只可能是0或者1.用你写的if-else语句控制P0口就没问题了。

k应该定义为“位”变量;
P1^0应为P1_0。
正常运行的程序如下:

void main()
{ bit k;
while(1) {
k = P1_0;
if (k==0) P0 = 0x02;
else P0 = 0x01;
}
}

按键要有延时去抖,这样:
sbit k=P1^0;
......
.....//中间的我省略了。
while(1)
{
if (k==0)
{delay(10);
if(k==0)
P0=0x02;
else
P0=0x01;
}
}

开头用sbit定义一下P1^0:
sbit p1_0=P1^0;
然后直接用p1_0,仿真过是可以的,按键按下不放,LED变,松开恢复。
不过k定义成"bit"即可,"int" 太浪费了。delay()在这里也没啥用,可以省了。