标题:
我想让按键按下LED一直循环闪亮,松开就灭,要怎么去修改单片机程序求大神指教
[打印本页]
作者:
风一样的坏蛋
时间:
2019-8-16 13:54
标题:
我想让按键按下LED一直循环闪亮,松开就灭,要怎么去修改单片机程序求大神指教
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1 =P1^0; //定义按键输入端口
sbit led1=P1^4; //定义led输出端口
sbit led2=P1^3;
sbit led3=P1^2;
sbit led4=P1^1;
sbit led5=P0^5;
sbit led6=P0^4;
sbit led7=P2^7;
sbit led8=P2^6;
/*------------------------------------------------
yanshi
------------------------------------------------*/
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=205;c>0;c--)
for(b=116;b>0;b--)
for(a=9;a>0;a--);
}
void keypros()
{
if(k1==0)
{
if(k1==0)
{
led1=0;
led2=0;
delay500ms();
led3=0;
led4=0;
delay500ms();
led5=0;
led6=0;
delay500ms();
led7=0;
led8=0;
}
else
{
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
led6=1;
led7=1;
led8=1;
}
}
}
作者:
hmgqljz111
时间:
2019-8-17 07:24
程序没传完
作者:
wulin
时间:
2019-8-17 08:10
按你的意图改写,但松手后要等一轮循环结束才全熄灭。如果想松手立即全熄灭就要用定时器中断:
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1 =P1^0; //定义按键输入端口
sbit led1=P1^4; //定义led输出端口
sbit led2=P1^3;
sbit led3=P1^2;
sbit led4=P1^1;
sbit led5=P0^5;
sbit led6=P0^4;
sbit led7=P2^7;
sbit led8=P2^6;
/*------------------------------------------------
yanshi
------------------------------------------------*/
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=205;c>0;c--)
for(b=116;b>0;b--)
for(a=9;a>0;a--);
}
void keypros()
{
if(k1==0)
{
led1=0;
led2=0;
led3=1;
led4=1;
led5=1;
led6=1;
led7=1;
led8=1;
delay500ms();
led1=1;
led2=1;
led3=0;
led4=0;
led5=1;
led6=1;
led7=1;
led8=1;
delay500ms();
led1=1;
led2=1;
led3=1;
led4=1;
led5=0;
led6=0;
led7=1;
led8=1;
delay500ms();
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
led6=1;
led7=0;
led8=0;
delay500ms();
}
else
{
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
led6=1;
led7=1;
led8=1;
}
}
void main()
{
while(1)
{
keypros();
}
}
作者:
hantu
时间:
2019-8-17 08:38
你的8颗led不在同一个P口上,不能简单地通过位操作来循环亮灭每颗灯,所以建议用一个函数来封装对它们的操作,只需要传送的参数是第n颗灯以及要它亮或灭就行了。
因为要对按键作出即时的反应,所以,对灯的操作应在中断里进行,而按键的检测轮询和中断都可以。
作者:
yzwzfyz
时间:
2019-8-17 09:18
1、将显示与按键分开编写。
2、按键:做个标记B_KEY,按下时=1,反之为0。
3、编写一个循环闪亮程序,在B_KEY=1时执行它。
4、在B_KEY=0,时灭灯。
作者:
WR111222
时间:
2019-8-19 08:46
没有main函数啊怎么会亮呢
作者:
CZ1
时间:
2019-8-19 15:19
把else的内容放到最外一个if那里就ok
作者:
月之光芒
时间:
2019-8-27 10:14
设定一个标记位,按键按住时一直将其置1,松开后置0,然后在定时器中断里添加一个循环点灯程序,在标记位为1时调用,标记位为0时将所有灯熄灭
作者:
tyrl800
时间:
2019-8-27 22:04
void main()
{while(1)
{if(!key)
{ P1=~P1;
Delayms(500);
}
else P1=0xff;
}
}
作者:
aaaaabangw
时间:
2019-8-28 00:10
循环检测按键状态,分别把一位一位的值置一,其他置零,就能够达到循环闪烁效果,按键状态为松开时,直接全部置零退出就行了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1