level 1
朦胧月白风清
楼主
求好心人指点一下,自己做个按键跑马灯,,,P1_2口接按键开关,同时可设置外部中断,P1_0,P1_1,P1_3,P1_4接灯,程序初始化为全灭,按键按下就开始跑马灯循环,一旦按键松开就立即关闭所有灯,再次按下按键,就按上次跑马灯末状态继续执行跑马灯循环,我的思路是这样的:初始化灯全灭,设置P1_2口为开启外部中断并为上升沿触发,在main函数里面就写个检测按键按下的while循环,循环内容为跑马灯程序,,中断子程序为灯全灭,目前遇到这样一个问题,就是上电后灯全灭,按下按键就常亮第一个灯,松开后灯又是全灭,,,不知道是程序逻辑有问题还是寄存器设置错了,求好心人指点啊!!!
程序如下:
#include"ioCC2530.h"
#define LED1 P1_0
#define LED2 P1_1
#define LED3 P1_3
#define LED4 P1_4
#define SW1 P1_2 // P1_2定义为P1.2
void init_led()
{
P1SEL |=0X04;
P1DIR |=0X1B;
P1DIR &=~0X04;
P1=0;
}
void init_key()
{
P1IEN &=~0X10;//1:中断使能,0:中断禁止
P1IEN |=0X04;//1:中断使能,0:中断禁止
PICTL &=~0X04;//上升沿触发外部中断
IEN2 |=0X10;//端口1中断使能
P1IFG=0;
EA=1;
}
void delay_ms(unsigned int i)
{
unsigned int j,k;
for(j=0;j<i;j++)
for(k=0;k<535;k++);
}
void led_play()
{
LED1=1;
LED4=0;
delay_ms(500);
LED2=1;
LED1=0;
delay_ms(500);
LED3=1;
LED2=0;
delay_ms(500);
LED4=1;
LED3=0;
delay_ms(500);
}
#pragma vector=P1INT_VECTOR
__interrupt void Int(void)
{
P1IFG=0;
P1IF=0;
P1 =0;
}
void main()
{
init_led();
init_key();
while(1)
{
while(SW1 == 0)//低电平有效
{
led_play();
}
}
}
2016年02月24日 11点02分
1
程序如下:
#include"ioCC2530.h"
#define LED1 P1_0
#define LED2 P1_1
#define LED3 P1_3
#define LED4 P1_4
#define SW1 P1_2 // P1_2定义为P1.2
void init_led()
{
P1SEL |=0X04;
P1DIR |=0X1B;
P1DIR &=~0X04;
P1=0;
}
void init_key()
{
P1IEN &=~0X10;//1:中断使能,0:中断禁止
P1IEN |=0X04;//1:中断使能,0:中断禁止
PICTL &=~0X04;//上升沿触发外部中断
IEN2 |=0X10;//端口1中断使能
P1IFG=0;
EA=1;
}
void delay_ms(unsigned int i)
{
unsigned int j,k;
for(j=0;j<i;j++)
for(k=0;k<535;k++);
}
void led_play()
{
LED1=1;
LED4=0;
delay_ms(500);
LED2=1;
LED1=0;
delay_ms(500);
LED3=1;
LED2=0;
delay_ms(500);
LED4=1;
LED3=0;
delay_ms(500);
}
#pragma vector=P1INT_VECTOR
__interrupt void Int(void)
{
P1IFG=0;
P1IF=0;
P1 =0;
}
void main()
{
init_led();
init_key();
while(1)
{
while(SW1 == 0)//低电平有效
{
led_play();
}
}
}