久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2624|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

msp430單片機車輛閃光燈 流水燈代碼問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:815102 發(fā)表于 2020-8-19 06:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
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)

msp430部分放大圖

msp430部分放大圖

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

閃光燈放大圖

閃光燈放大圖

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

總電路

總電路
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:654028 發(fā)表于 2020-8-19 16:32 | 只看該作者
看你的這個代碼,寫的已經(jīng)很詳細(xì)的閃爍過程了,看樣子他是在中斷里面實現(xiàn)的閃爍。如果你需要使用P1.0去控制的話,就把那段代碼從中斷里面弄出來修改一。我也不是很會,我只能這樣做,具體能不能實現(xiàn)不好說,但是思路沒錯。
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;//讓所有的燈滅
            }
   }
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:815102 發(fā)表于 2020-8-19 23:43 | 只看該作者
這是我寫的代碼
#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;
  
}
回復(fù)

使用道具 舉報

地板
ID:815102 發(fā)表于 2020-8-19 23:56 | 只看該作者
我改進了這段代碼
#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)在有個新問題,如果是同一個板子控制前后左右四個車燈。
車前左右分別有停車燈(Standlicht),閃光燈(Blinker),轉(zhuǎn)向燈(Rueckwaerts)
車后左右分別有剎車燈(Bremslicht),停車燈(Standlicht),閃光燈(Blinker),轉(zhuǎn)向燈(Rueckwaerts)
P1.3與P1.4都是msp430內(nèi)部pull-up。
當(dāng)R39 open時 車左閃光燈依次亮,當(dāng)R39為0Ohm 車右依次亮。
當(dāng)R1 open時  代表車前方閃光燈,當(dāng)R1為0Ohm時 代表車后閃光燈。
如何補充這個代碼呢?拜謝!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线免费观看 | 天天干天天草 | 2019精品手机国产品在线 | 亚洲欧美激情精品一区二区 | 美女天天操 | 日韩有码一区 | 欧美黑人一级爽快片淫片高清 | 国产1区| 国产一级片在线播放 | 国产亚洲欧美在线 | 成人在线观看免费爱爱 | 9999精品视频 | 久久久一区二区 | 国产在线精品一区二区三区 | 欧美一区二区三区四区在线 | 亚洲欧美日韩国产综合 | 国产欧美精品在线 | 亚洲男女激情 | 亚洲人成网亚洲欧洲无码 | 超碰在线97国产 | 青草福利 | 亚洲国产一区二区视频 | 国产97在线看 | 在线91| 精品久久一区二区三区 | 天天天天操| 亚洲三级视频 | 欧美成年黄网站色视频 | 成人国产在线观看 | 久久成人一区 | 97国产在线视频 | 亚洲欧美激情网 | 国产传媒在线播放 | 国产精品99久久久久久宅男 | av黄色免费在线观看 | 天天澡天天狠天天天做 | 亚洲免费在线观看 | 成年人免费在线视频 | 亚洲色欧美另类 | 少妇精品久久久久久久久久 | 久久精品国产久精国产 |