朦胧月白风清 朦胧月白风清
我,不,帅,不,富,不,高。
关注数: 5 粉丝数: 22 发帖数: 164 关注贴吧数: 5
求好心人指点啊 求好心人指点一下,自己做个按键跑马灯,,,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(); } } }
1 下一页