我改进了这段代码 #include "msp430g2553.h" int i[8] ={0,1,3,7,15,31,63,127}; void main(void) { WDTCTL = WDTPW + WDTHOLD; if (CALBC1_1MHZ==0xFF) while(1); DCOCTL = 0; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P2DIR |= BIT0+BIT7; P2OUT |= BIT0; P2OUT &= ~BIT7; CCTL0 = CCIE; CCR0 = 62500; TACTL = TASSEL_2 + ID_3 + MC_1; P2DIR = 0xff; P2OUT = 0xff; _BIS_SR(LPMO_bits+GIE) ; } #pragma vector = TIMER0_A0_VECTOR //__interrupt void Timer_A (void) int main( void ) { static int j =0; P2OUT=i[j]; j++; if (j>8) j=0; } 现在有个新问题,如果是同一个板子控制前后左右四个车灯。 车前左右分别有停车灯(Standlicht),闪光灯(Blinker),转向灯(Rueckwaerts) 车后左右分别有刹车灯(Bremslicht),停车灯(Standlicht),闪光灯(Blinker),转向灯(Rueckwaerts) P1.3与P1.4都是msp430内部pull-up。 当R39 open时 车左闪光灯依次亮,当R39为0Ohm 车右依次亮。 当R1 open时 代表车前方闪光灯,当R1为0Ohm时 代表车后闪光灯。 如何补充这个代码呢?拜谢! |
这是我写的代码 #include "msp430g2553.h" int i[8] ={0,1,3,7,15,31,63,127}; void main(void) { WDTCTL = WDTPW + WDTHOLD; if (CALBC1_1MHZ==0xFF) while(1); DCOCTL = 0; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P2DIR |= BIT0+BIT7; P2OUT |= BIT0; P2OUT &= ~BIT7; CCTL0 = CCIE; CCR0 = 62500; TACTL = TASSEL_2 + ID_3 + MC_1; P2DIR = 0xff; P2OUT = 0xff; _BIS_SR(LPMO_bits+GIE) ; } #pragma vector = TIMER0_A0_VECTOR //__interrupt void Timer_A (void) int main( void ) { static int j =0; P2OUT=i[j]; j++; if (j>8) j=0; } |
看你的这个代码,写的已经很详细的闪烁过程了,看样子他是在中断里面实现的闪烁。如果你需要使用P1.0去控制的话,就把那段代码从中断里面弄出来修改一。我也不是很会,我只能这样做,具体能不能实现不好说,但是思路没错。 void led_run (void) { char i; if(p1out){//就是如果检测到有信号灯就亮 for(i=0;i<8;i++){ P2OUT = ~(0x80>>i); //灯的点亮顺序D8 -> D1,顺序不对你就看参考代码,换一下顺序 } if(i == 8) { i = 0; P2OUT=0XFF;//让所有的灯灭 } } } |