亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: msp430單片機(jī)車(chē)輛閃光燈 流水燈代碼問(wèn)題 [打印本頁(yè)]

作者: Luminita0215    時(shí)間: 2020-8-19 06:30
標(biāo)題: msp430單片機(jī)車(chē)輛閃光燈 流水燈代碼問(wèn)題
各位大神你們好,
我是一枚新手,現(xiàn)在遇到一個(gè)問(wèn)題。實(shí)在是不好意思,確實(shí)是時(shí)間不多了不夠我來(lái)慢慢看自己做。所以才在論壇上咨詢各位大神。確實(shí)很羞愧做一個(gè)伸手黨。
問(wèn)題如下:
總電路是車(chē)輛系統(tǒng)上的燈光總電路,SC1是閃光燈(Blinker)的電路。使用的是MSP430G2553IPW20。
需要實(shí)現(xiàn)如下要求:閃光燈(Blinker)在給了信號(hào)后依次閃爍,如奧迪閃光燈一樣,從車(chē)頭中間依次向兩邊亮起。閃過(guò)的燈光保持不滅,直到最后一個(gè)燈亮起。然后所有燈滅。如此循環(huán)。P1.0是閃光燈的信號(hào)輸入口,P2.0/2.1/2.2/2.3/2.4/2.5/2.6/2.7則是燈泡串的輸出端。
只需要閃光燈部分的代碼,跪謝各位大佬。
我在網(wǎng)絡(luò)上搜到一個(gè)代碼但是不知道如何使用。也放在這里了。
#include <msp430g2553.h>


typedef unsigned int  uint;


uint i = 0,j = 0,dir = 0;
uint flag = 0,speed = 0;  //flag--燈光流動(dòng)方式,speed--燈光流動(dòng)速度

void main(void)
{

    /*給IO一個(gè)初始的狀態(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)閉看門(mén)狗
    P6DIR |= BIT2;P6OUT |= BIT2;    //關(guān)閉電平轉(zhuǎn)換
    P5OUT &= ~BIT7;

    CCTL0 = CCIE;                   //使能CCR0中斷
    CCR0 = 50000;
    TACTL = TASSEL_2 + ID_3 + MC_1; //定時(shí)器A的時(shí)鐘源選擇SMCLK,增計(jì)數(shù)模式
    P2DIR = 0xff;                   //設(shè)置P2口方向?yàn)檩敵?br />     P2OUT = 0xff;

    _EINT();                        //使能全局中斷
    LPM0;                           //CPU進(jìn)入LPM0模式
}


#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{  
    if(flag == 0)
    {
        P2OUT = ~(0x80>>(i++));    //燈的點(diǎn)亮順序D8 -> D1
    }
    else if(flag == 1)
    {
        P2OUT = ~(0x01<<(i++));    //燈的點(diǎn)亮順序D1 -> D8
    }
    else
    {
        if(dir)                  //燈的點(diǎn)亮順序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改變流動(dòng)方向
    {
        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)

msp430部分放大圖

msp430部分放大圖

閃光燈.png (25.69 KB, 下載次數(shù): 98)

閃光燈放大圖

閃光燈放大圖

總電路.png (92.92 KB, 下載次數(shù): 84)

總電路

總電路

作者: 心有浮生    時(shí)間: 2020-8-19 16:32
看你的這個(gè)代碼,寫(xiě)的已經(jīng)很詳細(xì)的閃爍過(guò)程了,看樣子他是在中斷里面實(shí)現(xiàn)的閃爍。如果你需要使用P1.0去控制的話,就把那段代碼從中斷里面弄出來(lái)修改一。我也不是很會(huì),我只能這樣做,具體能不能實(shí)現(xiàn)不好說(shuō),但是思路沒(méi)錯(cuò)。
void led_run (void)
{       char i;
     if(p1out){//就是如果檢測(cè)到有信號(hào)燈就亮
           for(i=0;i<8;i++){
                P2OUT = ~(0x80>>i);    //燈的點(diǎn)亮順序D8 -> D1,順序不對(duì)你就看參考代碼,換一下順序
          }
           if(i == 8)
           {
                i = 0;
                P2OUT=0XFF;//讓所有的燈滅
            }
   }
}


作者: Luminita0215    時(shí)間: 2020-8-19 23:43
這是我寫(xiě)的代碼
#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;
  
}
作者: Luminita0215    時(shí)間: 2020-8-19 23:56
我改進(jìn)了這段代碼
#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;
  
}
現(xiàn)在有個(gè)新問(wèn)題,如果是同一個(gè)板子控制前后左右四個(gè)車(chē)燈。
車(chē)前左右分別有停車(chē)燈(Standlicht),閃光燈(Blinker),轉(zhuǎn)向燈(Rueckwaerts)
車(chē)后左右分別有剎車(chē)燈(Bremslicht),停車(chē)燈(Standlicht),閃光燈(Blinker),轉(zhuǎn)向燈(Rueckwaerts)
P1.3與P1.4都是msp430內(nèi)部pull-up。
當(dāng)R39 open時(shí) 車(chē)左閃光燈依次亮,當(dāng)R39為0Ohm 車(chē)右依次亮。
當(dāng)R1 open時(shí)  代表車(chē)前方閃光燈,當(dāng)R1為0Ohm時(shí) 代表車(chē)后閃光燈。
如何補(bǔ)充這個(gè)代碼呢?拜謝!




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1