51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按就灭掉
5个回答
展开全部
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带形参的演示程序}
这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)
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++);
}
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
你是要在特定时间内计算按键的次数吗?我看你的代码delay是20ms,那样的话就不太可能是一个在特定时间内测量按键次数的软件了。 那么实际上你想要的效果就是按一次灯亮,再按一次灯灭,再按一次灯亮对吗? 如果是的话就写: int flag =...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
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 );
}
}
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 );
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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里面编写的,你要注意电路图的电平
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里面编写的,你要注意电路图的电平
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个中断子程序和闪烁灯主程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只能使用中断了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询