您的位置:首頁>正文

案例要求:基於MSP430單片機的交通燈電路設計

功能要求

東西(A)、南北(B)兩幹道交於一個十字路口, 各幹道有一組紅、黃、綠三個指示燈, 指揮車輛和行人安全通行。 紅燈亮禁止通行, 綠燈亮允許通行。 為20秒, 信號燈的狀態規則:每一方向亮綠燈, 而另一方向亮紅燈, 紅燈時間比綠燈長3秒, 當綠燈減到0時,到下一個狀態, 此時綠燈方向的變為黃色, 依次迴圈。 設A道和B道的車流量相同。

設計思路

初始狀態1為東西綠燈通車, 延時17秒, 南北紅燈禁止, 延時20秒。 然後轉狀態2為東西黃燈, 延時3秒, 南北仍然紅燈禁止。 過一段時間轉狀態3, 東西紅燈禁止, 延時30秒, 南北綠燈, 延時27秒。

再轉狀態4, 東西仍然紅燈, 南北黃燈, 延時3秒, 最後迴圈至狀態1。

部分電路圖

顯示電路

LED

延時程式及解析

void delay(long v)

{

while(v!=0)v--;

}

delay(100)究竟延時多久呢?就是這句話執行需要的時間。

時間等於:機器週期×需要的機器週期數

(在模擬環境中可以測試出來)

主程序

#include

#include

volatile unsigned char hcq[4];

volatile unsigned char wei,duan;

volatile unsigned char i,j=2;

void rid(void);

main(void)

{

WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer

TA0CCTL0=CCIE;//使能捕獲比較中斷

TA0CCR0=12000;

TA0CTL=TASSEL_1+TACLR+MC_1;//計時器A時鐘源為ACLK,計數器清零, 增計數模式

P1DIR=0XFF;

P2DIR=0XFF;

_enable_interrupts();

進入四個狀態的迴圈

while(1)

{

hcq[0]=1;//第一個狀態

hcq[1]=7;

hcq[2]=2;

hcq[3]=0;

while(hcq[0]!=0||hcq[1]!=0)

{P2OUT=0xde;

rid();

}

hcq[0]=0;//第二個狀態

hcq[1]=3;

while(hcq[0]!=0||hcq[1]!=0)

{P2OUT=0xdd;

rid();

}

hcq[0]=3;//第三個狀態

hcq[1]=0;

hcq[2]=2;

hcq[3]=7;

while(hcq[2]!=0||hcq[3]!=0)

{P2OUT=0xf3;

rid();

}

hcq[2]=0;//第四個狀態

hcq[3]=3;

while(hcq[2]!=0||hcq[3]!=0)

{ P2OUT=0xeb;

rid();

}

}

}

計時器中斷函數

#pragma vector=TIMER0_A0_VECTOR

__interrupt void Timer_A(void)

{

j--;

while(j==0);

{

j=2;

hcq[1]--;

hcq[3]--;

while(hcq[1]==0xff)

{hcq[0]--;

hcq[1]=9;

}

while(hcq[3]==0xff)

{hcq[2]--;

hcq[3]=9;

}

}

}

調用顯示副程式

void rid()

{

wei=0xe0;

duan=hcq[0];

P1OUT=wei+duan;

__delay_cycles(500);

wei=0xd0;

duan=hcq[1];

P1OUT=wei+duan;

__delay_cycles(500);

wei=0xb0;

duan=hcq[2];

P1OUT=wei+duan;

__delay_cycles(500);

wei=0x70;

duan=hcq[3];

P1OUT=wei+duan;

__delay_cycles(500);

}

本文素材來自電子發燒友論壇

智慧電子產品設計與製作--單片機技術應用項目教程(基於工作過程的單片機課程改革教材高 ¥17.76 購買

MSP430超低功耗單片機原理與應用(第2版TI MSP430大學計畫教材) ¥35.28 購買

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示