51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按就灭掉

如题所述

bit flash;//闪烁标志位
sbit led=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
void main()

{
P01=P02=0;
flash=0;
led=0;
while(1)
{
scankey();
ledflash();
}
}
void scankey()//键盘扫描
{
P01=1;//行线给1
if(P02)//如果P02也是1则说明接通
{
delay(10);//去抖动10MS
if(P02)//再次确定按键按下
{
while(P02){flash=flash}//按住按键的动作
flash=~flash;//按键按下后执行动作
}
}
}
void ledflash()
{
if(flash)
{
led=1;//点亮
delay(100);//延时100MS
led=0;//熄灭
}
else led=0;
}
void delay(unsigned int i)
{自己根据单片机频率写个1MS带形参的演示程序}

这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)追问

不好意思,我是新手,所以有些还不是看的太懂。我告诉你我单片机的开关端口是p1^4,灯的端口是p0^1。能帮我把这个程序完整的给我么?延时程序不用,只要主程序和开关程序和led闪烁程序。谢谢啊

追答

#include
sbit key=P1^4;

sbit led=P0^1;
bit flash;
void main()
{
key=0;
led=0;
while(1)
{
if(key)
{
delay(10);
if(key)
{
flash=~flash;
}
}
if(flash)
{
led=~led;
}
}
}
void delay(unsign int i)
{
unsign char j;
while(i--)
for(j=0; j<200;j++);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-27
sbit key = P1_0;
sbit led = P1_1;
#define led_on 0
main()

{
while( key )
{
led = ! led_on;

}

while(!key)

{
led = led_on;

delay( 100 );

led = ! led_on;

delay( 100 );

}
}
上面这个是按下闪,松开灭的程序,稍微改一下,就可以做到要求的功能。
main()

{
while( ! key )
{
led = ! led_on;

}

while( key )

{
led = ! led_on;

}

while( ! key )

{
led = led_on;

delay( 100 );

led = ! led_on;

delay( 100 );

}
while( key )

{
led = led_on;

delay( 100 );

led = ! led_on;

delay( 100 );

}
}本回答被网友采纳
第2个回答  2017-07-11
#include<reg51.h>
sbit x=P3^0;//p3.0接按钮
sbit y=P1^0;//p1.0接led
void main()
{
while(1)
{
while(x==0)
{
y=!y;//闪烁
}
y=0;//停止闪烁
}
}
注意我是在keil c里面编写的,你要注意电路图的电平
第3个回答  2013-11-23
用一个中断子程序和闪烁灯主程序。
第4个回答  2013-11-23
只能使用中断了

51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按...
if(P02)\/\/再次确定按键按下 { while(P02){flash=flash}\/\/按住按键的动作 flash=~flash;\/\/按键按下后执行动作 } } } void ledflash(){ if(flash){ led=1;\/\/点亮 delay(100);\/\/延时100MS led=0;\/\/熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参...

单片机用c语言,按钮控制一个LED灯,要求按下松开,LED亮,按下松开,LED...
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include<reg52.h> \/\/定义单片机的头文件sbit led=P2^0; \/\/定义单片机的管脚,void main(void) \/\/主函数{ while(1) \/\/无限循环 {led=0x1f; \/\/点亮前面三个灯。这里...

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?
KEY1) \/\/检测到按键按下 { LED = ~LED; \/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*\/ delay(500); \/*此处延迟,保...

需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半...
如果对时间要求不精确,用软延时即可。include<reg52.h> define uchar unsigned char define uint unsigned int sbit s=P1^0;sbit led=P1^1;void delayms(uint i) \/\/1ms延时程序 { uchar j;for(;i>0;i--){ for(j=0;j<125;j++)\/\/如果延时时间误差较大,可按比例改变125这个数 \/\/取值...

51单片机P1.1口接一个LED灯 外接按键,要求:按键按下LED灯亮,,按键再...
include <reg51.h>sbit P32 = P3^2;sbit LED = P1^1;void main(){ IE = 129; while(1);}void X0_Int() interrupt 0{ while(!P32) LED = 0; LED = 1;}

51单片机c语言编程:编写一段程序,P1.0控制LED,P1.1控制LED的亮和灭...
P1.0、P1.1,都是控制 LED 的?试试下面的程序:include <reg51.h> sbit led = P1^0;sbit key = P1^7;void main(){ while(1) led = key;} P1.1,不知道怎么用。

怎么样用51单片机点亮一个二极管,让它以0.1秒的频率连续闪烁之后停顿1秒...
程序如下仅供参考 闪烁的LED include<reg51.h> define uchar unsigned char define uint unsigned int sbit LED=P1^0;\/\/延时 void DelayMS(uint t){ int x,y;for(x=110;x>0;x--)for(y=z;z>0;z--);} \/\/主程序 void main(){ while(1){ LED=~LED;DelayMS(100);} } ...

51单片机如何用一个按键控制一段程序的运行与停止
1、创建项目文件。2、按键:S1=P3^2,点亮: led=P1^5。3、创建C语言主函数。4、创建循环效果,检测效果。while(1) {}。5、选择输出的效果。6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。

下面51单片机C语言程序怎么改成按钮按一下才执行,再按一下就停止,如此...
IO直接作为循环条件即可,如下:如果用户按下键不放会有问题,最好改为用户按下键再弹起为一次输入。

求51单片机按键点灯汇编程序,按一下按键灯亮(一直亮),再按一下灭
;以下为一个按键控制一个灯的程序!!!ORG 0000H SETB P1.0 START:JB P1.0,NEXT ;设按键为低电平有效。JNB P1.0,CPL P3.0 NEXT:SJMP START END

相似回答