标题:
一个LED灯持续闪烁的问题
[打印本页]
作者:
bogeys
时间:
2017-7-19 20:02
标题:
一个LED灯持续闪烁的问题
我是初学者,我想用单片机实现这样的功能:
第一步:给 P3_4 一个长时间不断的高电平(必要时会转为低电平),P1_0 接一个LED灯, 在P3_4一直保持高电平的情况下,以500毫秒间隔闪烁3次后停止闪烁。
第二步: P1_1 接一个LED灯,P3_4转为低电平时(一个持续长时间低电平),P1_1的LED灯 以500毫秒间隔闪烁3次后停止闪烁。
第一步我就没有完成。给 P3_4 瞬时高电平时,LED会闪3下停止闪烁,但在持续高电平时,LED会不停的闪烁,只有给 P3_4 一个低电平时才会停止闪烁。
下面是我的程序。希望论坛的大神纪念给予帮助,谢谢大家!
#include <at89x52.h>
void DELAY()
{ unsigned int i,j;
for(i=0;i<500;i++)
{
for(j=0;j<300;j++);
}
}
void main()
{
unsigned char a;
if(P3_4==0)
for(a=0;a<3;a++)
{
P1_0=1;
DELAY();
P1_0=0;
DELAY();
}
}
作者:
wulin
时间:
2017-7-20 06:52
本帖最后由 wulin 于 2017-7-20 09:21 编辑
#include <at89x52.h>
void DELAY()
{
unsigned int i,j;
for(i=0;i<500;i++)
for(j=0;j<300;j++);
}
void main()
{
unsigned char a;
while(1)
{
if(P3_4==0)
{
for(a=0;a<3;a++)
{
P1_0=0;
DELAY();
P1_0=1;
DELAY();
}
while(!P3_4);
}
else
{
for(a=0;a<3;a++)
{
P1_1=0;
DELAY();
P1_1=1;
DELAY();
}
while(P3_4);
}
}
}
作者:
hzlsw1
时间:
2017-7-20 10:09
if(P3_4==0)
for(a=0;a<3;a++)
{
P1_0=1;
DELAY();}
if(P3_4==1)
for(a=0;a<3;a++)
{ P1_0=0;
DELAY();
}
这样分开看行不
作者:
q574500110
时间:
2017-7-20 10:48
#include <reg52.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P3_4 = P3^4;
void DELAY()
{ unsigned int i,j;
for(i=0;i<500;i++)
{
for(j=0;j<300;j++);
}
}
void main()
{
unsigned char a=0,b=0;
while(1)
{
if(P3_4==1)
{
b=0;
while(a<3)
{
a++;
P1_0=1;
DELAY();
P1_0=0;
DELAY();
}
}
else
{
a=0;
while(b<3)
{
b++;
P1_1=1;
DELAY();
P1_1=0;
DELAY();
}
}
}
}
作者:
bogeys
时间:
2017-7-20 23:22
谢谢楼上几位朋友热心的帮助,我感觉需要引入中断可能才能解决。
作者:
278004887
时间:
2017-7-21 12:09
是不是哪里有什么延迟信号了
作者:
213213213
时间:
2017-7-21 13:41
#include <at89x52.h>
void DELAY()
{
unsigned int i,j;
for(i=0;i<500;i++)
for(j=0;j<300;j++);
}
void main()
{
unsigned char a;
while(1)
{
if(P3_4==0)
{
for(a=0;a<3;a++)
{
P1_0=0;
DELAY();
P1_0=1;
DELAY();
}
while(!P3_4);
}
else
{
for(a=0;a<3;a++)
{
P1_1=0;
DELAY();
P1_1=1;
DELAY();
}
while(P3_4);
}
}
}
作者:
bogeys
时间:
2017-7-23 16:51
问题解决了,引入两个外部中断,功能全部实现。
作者:
a89588038
时间:
2019-5-10 10:02
bogeys 发表于 2017-7-23 16:51
问题解决了,引入两个外部中断,功能全部实现。
把改好的程序贴出来分享一下,楼主
作者:
hety
时间:
2019-5-10 10:34
bogeys 发表于 2017-7-23 16:51
问题解决了,引入两个外部中断,功能全部实现。
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制灯的端口
#define LED1 P1_0 //定义 LED1 为 P10 口控制
#define S5 P0_4
#define S6 P0_5
//函数声明
void Delay(uint); //延时函数
void InitIO(void); //初始化 LED 控制 IO 口函数
uint key_scan(void);
uint jey_scan(void);
/****************************
//延时
*****************************/
void Delay(uint n)
{
uint i;
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
}
/****************************
//初始化 IO 口程序
*****************************/
void InitIO(void)
{
P1SEL &=~0x01;
P1DIR |= 0x01;
LED1 = 1;//LED1 init
P0SEL &=~0x30; //key5,6 init
P0DIR &=~0x30;
P0INP &=~0x30;
P2INP &=~0x20; //SET P0 shangla
}
/***************************
//check key
***************************/
uint key_scan(void)
{
uint ret = 0;
if ((0==S5)||(!S6))
{
Delay(10000);
if ((0==S5)||(!S6))
{
ret = 1;
}
}
while((!S5)||(!S6))
return ret;
}
/***************************
//主函数
***************************/
void main(void)
{
uint key;
InitIO(); //初始化 LED 灯控制 IO 口
while(1) //死循环
{
key = key_scan( );
if (1==key)
{
LED1 = !LED1; // LED1 灯闪一次
}
Delay(10000);
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1