请高手帮忙,单片机控制一个LED灯闪烁的C语言程序,想加一个弹性按键,实现按一下弹起后,一直闪烁

实现按一下一直闪烁,再按一下就停止,一直重复。下面是我的程序,高手帮我改下,谢谢哦,呵呵。。。。

#include <reg51.h>
sbit P0_0=P0^0;
void delay1s();
unsigned char k;
void main( )
{
TMOD=0X10;
while(1)
{
P0_0=0;
delay1s();
P0_0=1;
delay1s();
}
}
void delay1s()
{
unsigned char i;
for(i=0;i<0x02;i++)
{
TH1=0X3C;
TL1=0XB0;
TR1=1;
while(!TF1);
TF1=0;
}
}

#include <reg51.h>
sbit P0_0=P0^0;
sbit key=P0^1;
void delay1s();
unsigned char k,led;
void main( )
{
TMOD=0X10;
led=1;
while(1)
{
if(key)
{
if (led=1){led=0}else{led=1;}
}
if(led==1)
{
P0_0=0;
delay1s();
P0_0=1;
delay1s();
}
else{P0_0=0;}
}
}
void delay1s()
{
unsigned char i;
for(i=0;i<0x02;i++)
{
TH1=0X3C;
TL1=0XB0;
TR1=1;
while(!TF1);
TF1=0;
}
}
以上只是一种解决方案,很不完善。最好是利用中断来改变led的值来进行状态切换。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-19
#include <reg51.h>
sbit P1_0=P1^0; //接收按键,假设按一下输入低电平
sbit P1_1=P1^1; //控制灯闪烁
void delay1s();
unsigned char k=0;
void main( )
{
while(1)
{
if(p1_0==0)
k=1;
if(k==1)
{P1_1=0;
delay1s();
P1_1=1;
delay1s();}
}
}
void delay1s()
{
unsigned char i;
for(i=0;i<0x02;i++);
}
你这个功能比较简单,上面那样差不多可以实现了,有几点需要说明:1、如果管脚比较充足,就不要P0脚,它做输入还好,要做输出就得加上拉电阻;2、这个实现和硬件接线有一定的关系;3、如果对性能要求不高,可以采用循环来延时已达到输出PWM波的目的,要求高的话可以采用中断来实现。网上单片机方面的参考很多,自学很方便。
第2个回答  2011-07-20
#include <AT89x051.H>
sbit pc0= P1^0;
sbit pd0= P1^1;

void delay(unsigned int t) //延时1ms
{
unsigned char i;
while(t--)
for(i=0;i<120;i++);
}

unsigned char smkey( ) //按键扫描程序
{
unsigned char sm,kk;
sm=pc0;
if(sm==1) //按键防抖
{delay(20);
sm=pc0;
if(sm==1)
{kk=1;

}
}
else

return(kk);
}

void main()
{
unsigned char key;
bit ll=0;
while(1)
{
if(ll==0)
//灯灭
else if(ll==1)
{
pd0=0; //闪烁
delay(500);
pd0=1;
delay(500);
}

key=smkey();
if(key==1)

}

}本回答被提问者采纳
第3个回答  2012-05-11
简单的程序 复杂化
第4个回答  2011-07-19
P0_0 是led灯管脚还是按键管脚?定时器也不是你那样用的追问

P0_0明显是LED灯管脚的,定时器在这里只是起到延时的作用,我这程序没有问题的。

AVR 单片机C语言怎样实现按键按一下led灯闪烁 再按一下led灯灭如此反复...
函数1:LED闪烁 main(){ while(1){ if(KEY)State = ~State;if(State)LED闪烁 else LED熄灭 } }

用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!
函数功能:主函数 (C语言规定必须有也只能有1个主函数)。\/void main(void){ while(1) \/\/无限循环。{ P0=0xfe; \/\/P1=1111 1110B, P0.0输出低电平。delay(); \/\/延时一段时间。P0=0xff; \/\/P1=1111 1111B, P0.0输出高电平。delay(); \/\/延时一段时间。} } 单片机...

汇编语言或C语言编写一个控制灯闪烁的程序
LED1_01 = 1; \/\/打开LED灯点亮 while(1){ if(KEY0_01 == 0) \/\/检测按键是否按下 { Delay_1ms(10); \/\/延时去抖动 if(KEY0_01 == 0) \/\/确定按键按下 { LED1_01 = ~ LED1_01; \/\/取反LED灯 [ 亮 . 灭 ] } while(KEY0_01 == 0); \/\/检测松手 }...

用单片机c语言一个按键控制led的闪烁和熄灭,就是按一下闪烁,再按就熄灭...
首先你的贴出来的程序不完整,最好贴出完整代码!其次,如果你的程序没问题的话,你的LED闪烁是必须在你按住按键且不能弹起情况下才会发生的,你是一直按着吗?而且注意你n的类型,因为你这样一直加,会溢出的

51单片机C程序实验LED灯:[1]单个灯闪烁
void main() { while(1) { \/\/ 点亮LED \/\/ 关闭LED delay(1000); \/\/ 延时1秒 } } 在主程序中,通过循环调用点亮和关闭LED的操作,并在每次操作之间调用延时子程序,从而实现LED灯的间隔闪烁。调整延时子程序中的参数,可以改变LED灯的闪烁频率。以上就是使用51单片机C程序实现单个LED灯闪烁的具体...

51单片机C程序实验LED灯:[1]单个灯闪烁
说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现。proteus电路图 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 (tip:没有给高电平与接地,不在元件列表)电路图 连接方法如图,注意接口 程序清单 说明: 先写...

Keil uVision4实例 51单片机控制LED灯闪烁
Keil uVision4实例 51单片机控制LED灯闪烁,关键看C语言的编程细节。建立项目:LED灯闪烁。新建C文件:LED灯闪烁 引用51头文件。将所有的灯都点亮。让所有的灯全部灭了。添加循环语句。添加一个变量。使用循环语句创造延迟。

单片机LED灯闪烁程序?
sbit key2down=P1^1 ; \/\/ 设开关key2连接此端口 void main(){ P0=0xff; \/\/ 输出低电平LED亮 LED=0xfe;while(1){ P0=LED; delay();if(key1){ LED <<= 1 ; } \/\/ 将LED左移一位;if(key2){ LED >>= 1 ; LED |=0x80; } \/\/ 将LED右移一位;if(key1...

求高手帮忙提供: 单片机程序,开关点亮LED灯,点亮数码管,蜂鸣器叫。 谢 ...
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};\/\/0~F段码 \/\/0:0011_1111 \/ 函 数 名 : main 函数功能 : 主函数 输 入 : 无 输 出 : 无 \/ void main(void){ unsigned char i = 0;while(1){ GPIO_DIG = ~DIG_CODE[i];i++;if(i == 16)...

急需单片机高手帮忙用C语言写一个单片机4个灯轮流闪亮的源程序。 详...
L3=1; \/\/第三盏灯亮 delay(100); \/\/调用延时子程序 L4=1; \/\/第四盏灯亮 delay(100); \/\/调用延时子程序 while(1); \/\/这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉 } 纯手工书写,并仿真调试过,记得加分哟~...

相似回答