编程出错了,这个delay(1)可以省略吗?
时间:10-02
整理:3721RD
点击:
/* 程序目的:使用HJ-C52实验板独立键盘k1键,控制一LED的亮灭
按下后松开,led亮;按下后再松开,led灭。
即使led像家里用的电灯一样受开关控制。
#include<reg52.h>
sbit k1=P3^0;
sbit led=P1^0;
void delay(unsigned char i)//延时
{
unsigned char j;
unsigned char k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
char Ensurekey()//按键消除抖动
{
char f=0;
if(k1==0)
{
delay(10);
if(k1==0)
{
while(!k1);
f++;
}
return f;
}
}
void main()
{
while(1)
{
if(Ensurekey())
led=~led;
delay(1);//问题出在这里,当没有这个延迟时,按钮按下不会取反。请问这个delay(1)有什么用?请求大虾知道
}
}
按下后松开,led亮;按下后再松开,led灭。
即使led像家里用的电灯一样受开关控制。
#include<reg52.h>
sbit k1=P3^0;
sbit led=P1^0;
void delay(unsigned char i)//延时
{
unsigned char j;
unsigned char k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
char Ensurekey()//按键消除抖动
{
char f=0;
if(k1==0)
{
delay(10);
if(k1==0)
{
while(!k1);
f++;
}
return f;
}
}
void main()
{
while(1)
{
if(Ensurekey())
led=~led;
delay(1);//问题出在这里,当没有这个延迟时,按钮按下不会取反。请问这个delay(1)有什么用?请求大虾知道
}
}
你程序程序逻辑本来就有问题。控制一个LED根本不用这么复杂。
如果你只有一个按键,控制一个LED可以这样
#include<reg52.h>
sbit LED=P1^0;
sbit Key=P0^0;
void main(void)
{
while(1)
{
if(!Key)
{
DelayMs(10);
if(!Key)
{
while(!Key)
;
LED=~LED;
}
}
}
}
可能你的延时函数起了一个后消抖的作用,加上以后不会因为你手的抖动产生练需按压开关的效果。你试试你的延时时间有没有问题。还有你的延时程序太烂了,换个简单点的吧。希望能帮到你。
沙发的程序真好学习了!
谢了,不过后消抖是什么意思
小编,我用的也是HJ开发板,是51的。消抖是因为开关电路本身在开上或者合上的时候会有一段时间电平是不稳定的,时间大约为10到20毫秒。用延时函数可以消抖。
谢谢,不过我说的是后消抖,普通的消抖原理我知道