|
600黑幣
各位大神你們好,
我是一枚新手,現(xiàn)在遇到一個問題。實在是不好意思,確實是時間不多了不夠我來慢慢看自己做。所以才在論壇上咨詢各位大神。確實很羞愧做一個伸手黨。
問題如下:
總電路是車輛系統(tǒng)上的燈光總電路,SC1是閃光燈(Blinker)的電路。使用的是MSP430G2553IPW20。
需要實現(xiàn)如下要求:閃光燈(Blinker)在給了信號后依次閃爍,如奧迪閃光燈一樣,從車頭中間依次向兩邊亮起。閃過的燈光保持不滅,直到最后一個燈亮起。然后所有燈滅。如此循環(huán)。P1.0是閃光燈的信號輸入口,P2.0/2.1/2.2/2.3/2.4/2.5/2.6/2.7則是燈泡串的輸出端。
只需要閃光燈部分的代碼,跪謝各位大佬。
我在網(wǎng)絡(luò)上搜到一個代碼但是不知道如何使用。也放在這里了。
#include <msp430g2553.h>
typedef unsigned int uint;
uint i = 0,j = 0,dir = 0;
uint flag = 0,speed = 0; //flag--燈光流動方式,speed--燈光流動速度
void main(void)
{
/*給IO一個初始的狀態(tài)*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
P6DIR |= BIT2;P6OUT |= BIT2; //關(guān)閉電平轉(zhuǎn)換
P5OUT &= ~BIT7;
CCTL0 = CCIE; //使能CCR0中斷
CCR0 = 50000;
TACTL = TASSEL_2 + ID_3 + MC_1; //定時器A的時鐘源選擇SMCLK,增計數(shù)模式
P2DIR = 0xff; //設(shè)置P2口方向為輸出
P2OUT = 0xff;
_EINT(); //使能全局中斷
LPM0; //CPU進入LPM0模式
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(flag == 0)
{
P2OUT = ~(0x80>>(i++)); //燈的點亮順序D8 -> D1
}
else if(flag == 1)
{
P2OUT = ~(0x01<<(i++)); //燈的點亮順序D1 -> D8
}
else
{
if(dir) //燈的點亮順序D8->D1,D1->D8,循環(huán)繞圈
{
P2OUT = ~(0x80>>(i++));
}
else
{
P2OUT = ~(0x01<<(i++));
}
}
if(i == 8)
{
i = 0;
dir = ~dir;
}
j++;
if(j == 40) //循環(huán)5次就改變flag改變流動方向
{
i = 0;
j = 0;
flag++;
if(flag == 4) flag = 0;
switch(speed)
{
case 0:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_3;
break;
case 1:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_2;
break;
case 2:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_1;
break;
case 3:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_0;
break;
default:
break;
}
if(flag != 3) speed++;
if(speed == 4) speed = 0;
}
}
|
-
msp430.png
(39.04 KB, 下載次數(shù): 89)
下載附件
2020-8-19 06:17 上傳
msp430部分放大圖
-
閃光燈.png
(25.69 KB, 下載次數(shù): 98)
下載附件
2020-8-19 06:07 上傳
閃光燈放大圖
-
總電路.png
(92.92 KB, 下載次數(shù): 84)
下載附件
2020-8-19 06:07 上傳
總電路
|