本設(shè)計著重在于分析計算器軟件和開發(fā)過程中的環(huán)節(jié)和步驟,并從實踐經(jīng)驗出發(fā)對計算器設(shè)計做了詳細(xì)的分析和研究。本系統(tǒng)就是充分利用了G2452芯片的I/O引腳。系統(tǒng)以采用MSP430系列單片機(jī)G2452為中心器件來設(shè)計花樣LED流水燈系統(tǒng),通過按鍵實現(xiàn)8個LED燈不同花樣式的閃爍。
目錄
1 項目要求
2 項目分析和系統(tǒng)設(shè)計
3 硬件設(shè)計
3.1單片機(jī)選型模塊
3.2 LED流水燈模塊
3.3功能模式選擇模塊
4 軟件設(shè)計
4.1主程序
4.2子程序
5 系統(tǒng)調(diào)試
5.1硬件調(diào)試
5.2程序調(diào)試
5.3聯(lián)合調(diào)試
6 外延
7 項目演練
8 項目總結(jié)
附錄1電路設(shè)計原理圖(參考)
附錄2 PCB設(shè)計原理圖(參考)
附錄3 關(guān)鍵程序(參考)
基于單片機(jī)的流水燈系統(tǒng)設(shè)計與實現(xiàn) 1 項目要求本項目花樣流水燈采用MSP430單片機(jī)為控制器件,用于各方面的裝飾,此花樣流水燈有8個LED燈,六種花樣燈光效果。 (1)初始化后,執(zhí)行8個LED燈從右至左逐次點亮,每隔0.2s亮一個LED燈,直到8個LED燈全亮,再從左至右依次熄滅直到全滅,以此循環(huán); (2)當(dāng)按下按鍵后,執(zhí)行8個LED燈從右至左每隔0.2s逐一亮滅,直到點亮最左邊一個燈后再從左至右每隔0.2s逐一亮滅,以此循環(huán); 2 項目分析和系統(tǒng)設(shè)計本系統(tǒng)分為硬件和軟件模塊。硬件上我們打算在單片機(jī)的不同的i/o中裝上一個流水燈來進(jìn)行對流水燈進(jìn)行控制。 在程序方面,首先對msp430的i/o口進(jìn)行的定義和設(shè)置,然后在去定義了一個delay進(jìn)行延時功能,在用一個switch循環(huán)來使得流水燈不斷的循環(huán)亮滅。 花樣流水燈采用MSP430單片機(jī)為控制器件,用于各方面的裝飾,此花樣流水燈有8個LED燈,兩種花樣燈光效果。 3 硬件設(shè)計本系統(tǒng)采用MSP430單片機(jī)為控制核心進(jìn)行設(shè)計,該流水燈系統(tǒng)共可分為兩個模塊:單片機(jī)選型模塊和LED流水燈模塊。
圖1系統(tǒng)原理框圖 3.1單片機(jī)選型模塊MSP430單片機(jī)是16位的單片機(jī),采用了精簡指令集(RISC)結(jié)構(gòu),只有簡潔的27條內(nèi)核指令,大量的指令則是模擬指令;眾多的寄存器以及片內(nèi)數(shù)據(jù)存儲器都可參加多種運(yùn)算。這些內(nèi)核指令均為單周期指令,功能強(qiáng),運(yùn)行的速度快。 圖2單片機(jī)選型模塊 3.2 LED流水燈模塊
要實現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1~LED8 依次點亮、熄滅,8只LED燈便會一亮一暗的做流水燈了。在此我們還應(yīng)注意一點,由于人眼的視覺暫留效應(yīng)以及單片機(jī)執(zhí)行每條指令的時間很短,我們在控制二極管亮滅的時候應(yīng)該延時一段時間,否則我們就看不到“流水”效果了。且每一個LED燈于一個電阻串聯(lián)。電阻的作用就是對通過LED燈的電流進(jìn)行一定的限制起到去LED燈進(jìn)行的保護(hù)作用。使得其在高電壓的時候使得LED在電阻的保護(hù)下不會燒壞。
此圖為共陰極接法,因此當(dāng)LED_RED給高電平“1”時LED_RED亮;當(dāng)LED_RED給低電平“0”時,LED_RED滅。 圖3 LED流水燈模塊圖 如圖3可知此原理圖的LED燈為共陰極的接法,因此我們只要給它一個高電平就能點亮此LED燈。 3.3功能模式選擇模塊此設(shè)計有6種功能模式可以選擇: (1)初始化后,執(zhí)行8個LED燈從右至左逐次點亮,每隔0.2s亮一個LED燈,直到8個LED燈全亮,再從左至右依次熄滅直到全滅,以此循環(huán); (2)當(dāng)按下按鍵后,執(zhí)行8個LED燈從右至左每隔0.2s逐一亮滅,直到點亮最左邊一個燈后再從左至右每隔0.2s逐一亮滅,以此循環(huán); 功能(1):
圖4 流水燈的功能示意圖 4 軟件設(shè)計
4.1主程序本系統(tǒng)整體工作主要由單片機(jī)程序控制實現(xiàn),其工作過程為:對端口進(jìn)行初始化,在主程序中用不同的端口定義分別來點亮流水燈。再用switch語句來對不同的LED燈進(jìn)行不同類型的流水燈效果。在用延時程序來實現(xiàn)每一個LED的亮滅。 程序整體框架如下圖5所示。
圖5 程序整體框架圖 4.2子程序一個完整的程序是由一個主程序和若干個子程序組成。在一個加工程序中,如果其中有些加工內(nèi)容完全相同或相似,為了簡化程序,可以把這些重復(fù)的程序段單獨(dú)列出,并按一定的格式編寫成子程序。主程序在執(zhí)行過程中如果需要某一子程序,通過調(diào)用指令來調(diào)用該子程序,子程序執(zhí)行完后又返回到主程序,繼續(xù)執(zhí)行后面的程序段。 本系統(tǒng)中所使用的子程序都是比較簡單的,用for語句實現(xiàn)循環(huán)之后再使用延時函數(shù)進(jìn)行延時。 子函數(shù)的功能流程圖如下:
功能1流程圖: 功能2流程圖:
圖6 功能程序流程框架圖
5 系統(tǒng)調(diào)試本單片機(jī)的流水燈系統(tǒng)的設(shè)計分為硬件電路設(shè)計和軟件設(shè)計兩個部分,因此調(diào)試也分成兩部分進(jìn)行調(diào)試。 5.1硬件調(diào)試主要根據(jù)系統(tǒng)框圖和硬件原理設(shè)計進(jìn)行原理的繪制、各參數(shù)的設(shè)置、電路板的制作,以及元器件的焊接等。具體如下:  5.1.1 各單元電路,確認(rèn)各單元電路鏈接無誤,尤其是關(guān)鍵元器件,一定要接保護(hù)電阻。(1)選擇合適規(guī)格的元器件,在放置期間前一定要檢查規(guī)格; (2)關(guān)鍵器件放置:在器件布置方面與其它邏輯電路一樣,應(yīng)把相互有關(guān)的器件盡量放靠近些,這樣可以減少材料,更加美觀。 5.1.2 PCB設(shè)計原則: 在進(jìn)行PCB設(shè)計時,必須遵守PCB設(shè)計的一般原則,并應(yīng)符合要實現(xiàn)的效果設(shè)計的要求。 (1)盡量采用印制電路板,印制電路板不像萬用板一樣會有一定的接觸不好或者焊盤不穩(wěn)和線路連接有問題的情況,印制電路板的制作可防止產(chǎn)生地電位差和元件之間的耦合。 (2)元件面和焊接面應(yīng)采用相互垂直、斜交、或者彎曲走線,避免相互平 導(dǎo)線盡量短,使用45°或者圓弧折線布線,不要使用90°折線,以減小高頻信號的發(fā)射。 5.2程序調(diào)試在本系統(tǒng)中,主要分為主程序部分、中斷程序、子程序等。在調(diào)試過程中,按照程序功能一項項進(jìn)行調(diào)試,首先確認(rèn)主程序正確,在確認(rèn)其他程序。調(diào)試方法主要跟蹤調(diào)試、斷點調(diào)試等等,可以參考相關(guān)專業(yè)書籍。 5.1.1 CCSV5的打開步驟 - 右鍵Code Composer Studio v5快捷方式,左鍵打開。會出現(xiàn)如圖6所示界面:
圖6 Code Composer Studio v5軟件加載界面
(2)加載完畢之后會有如圖7所示界面出現(xiàn): 圖7 Code Composer Studio v5軟件打開界面 (3)選擇Project->Import Existing CCS Eclipse Project,導(dǎo)入程序文件夾中的工程;具體操作如圖8:
圖8 Code Composer Studio v5程序?qū)氩襟E圖 5.3聯(lián)合調(diào)試整個系統(tǒng)的軟硬件都完成后,需要進(jìn)行聯(lián)合調(diào)試,主要是針對系統(tǒng)設(shè)定的功能能否完成和完善進(jìn)行調(diào)試。 調(diào)試步驟: (1) 將PC和硬件電路通過USB線相連;  (2) 選擇  對該工程進(jìn)行編譯鏈接,生成.out文件。然后選擇  ,將程序下載到實驗板中。程序下載完畢之后,可以選擇 全速運(yùn)行程序,也可以選擇  單步調(diào)試程序,選擇F3查看具體函數(shù)。也可以程序下載之后,按下  ,軟件界面恢復(fù)到原編輯程序的畫面。再按下實驗板的復(fù)位鍵,運(yùn)行程序。(調(diào)試方式下的全速運(yùn)行和直接上電運(yùn)行程序在時序有少許差別,建議上電運(yùn)行程序) 1
圖9聯(lián)合調(diào)試效果圖 6 外延花樣流水燈的流水方式各式各樣,因此我們在以上功能基礎(chǔ)上,還能將程序稍作修改,使之有如下花樣流水效果。 (1)在以上功能下,當(dāng)再次按下此按鍵后,執(zhí)行8個LED燈從中間2個開始每隔0.2s向左右兩邊依次點亮,直到8個LED燈全亮,再由兩邊開始滅,直到全滅以此循環(huán); (2)第三次按下此按鍵之后,執(zhí)行與上次相反的效果,以此循環(huán); (3)第四次按下此按鍵之后,8個LED燈同時閃爍,時間間隔為0.1s; (4)第五次按下按鍵之后,依次執(zhí)行前面五個程序的效果,以此循環(huán)。 以上花樣流水燈的流水功能如圖10,功能(4)是前面幾種功能集中的效果。 功能(1):     ○○○○○○○○ ○○○●●○○○ ○○●●●●○○ ○●●●●●●○ ○  ○○●●○○○ ○○●●●●○○ ○●●●●●●○ ●●●●●●●● 功能(2): ●    ○○○○○○● ●●○○○○●● ●●●○○●●● ●●●●●●●● ○  ○○○○○○○ ●○○○○○○● ●●○○○○●● ●●●○○●●● 功能(3):  ●●●●●●●● ○○○○○○○○ 圖10流水燈的功能示意圖
圖11 功能程序流程框架圖7 項目演練對于本設(shè)計,尚可以進(jìn)一步進(jìn)行如下設(shè)計: (1)設(shè)計一個心形呼吸流水燈 設(shè)計思路如下: 運(yùn)用MSP430g2553單片機(jī)(28PIN、TSSOP封裝)、74HC573鎖存器(20PIN、SOIC封裝)、TLV117穩(wěn)壓組成。主要原理是利用430單片機(jī)產(chǎn)生PWM信號,通過573的使能控制一定數(shù)量的LED產(chǎn)生同節(jié)奏的“呼吸”效果。通過對產(chǎn)生PWM信號的寄存器的設(shè)置,可以得到程度不同的“呼吸”效果。 (2)如今大多數(shù)電子產(chǎn)品都是觸碰式按鍵,可以把流水燈的按鍵設(shè)計成觸摸式,實現(xiàn)商品現(xiàn)代化; 8項目總結(jié)基于單片機(jī)的流水燈系統(tǒng)設(shè)計與實現(xiàn),充分運(yùn)用了LED燈通過MSP430單片機(jī)為控制核心,多個中斷程序控制其亮滅,來實現(xiàn)多樣化的亮滅樣式,從而使單一的LED燈變得多元化。主要利用的知識點有中斷操作、單片機(jī)原理知識等,并利用C語言編程,最后制作出一個完善的作品,該作品再經(jīng)過一定的功能完善和外觀制作,符合現(xiàn)代化商場和各市場的裝飾,更有利于推廣。
附錄1電路設(shè)計原理圖(參考)附錄2 PCB設(shè)計原理圖(參考)
附錄3 關(guān)鍵程序(參考)功能(1)子程序:
void effect1()
{
int i,j;
for(i=0;i<=8;i++)
{
P2OUT |= (1<<i); // 1左移i位
delay_ms(200); //延時200MS
}
for(j=0;j<8;j++)
{ // 0x80右移j位
P2OUT &=~ (0x80>>j);
delay_ms(200); //延時200MS
}
}
功能(2)子程序:
void effect2()
{
int i,j;
for(i=0;i<8;i++)
{
P2OUT = (1<<i); // 1左移i位
delay_ms(200); //延時200MS
}
for(j=0;j<=8;j++)
{
P2OUT = (0x80>>j); // 0x80右移j位
delay_ms(200); //延時200MS
}
}
主程序:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
Clock_init(); //時鐘設(shè)置子程序
IO_init(); //IO口 子程序
//_EINT();
__enable_interrupt(); // 中斷控制開啟
while(1)
{
switch(a)
{
case 1: effect1();break; //a==1 執(zhí)行效果1
case 2: effect2();break; //a==2 執(zhí)行效果2
case 3: effect3();break; //a==3 執(zhí)行效果3
case 4: effect4();break; //a==4 執(zhí)行效果4
case 5: effect5();break; //a==5 執(zhí)行效果5
case 6: effect6();break; //a==6 執(zhí)行效果6
default : P2OUT &=~ 0XFF;break; //a為其他結(jié)果時 P2口清零
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
//判斷P1.3按鍵是否按下
if(!(P1IN&BIT3))
{
delay_ms(100); //延時消抖
if(!(P1IN&BIT3))
{
a++;
}
if(a==7)
{
a=0;
}
}
P1IFG&=~(BIT3); //消除中斷標(biāo)志
}
外延功能(1)子程序:
void effect3()
{
int i,j;
for(i=0;i<=4;i++)
{
P2OUT |= (BIT4<<i)+(BIT3>>i); //BIT4左移i位 BIT3 右移i位
delay_ms(200); //延時200MS
}
for(j=0;j<=4;j++)
{
P2OUT &=~ ((0x01<<j)+(0x80>>j)); //0x01 左移j位 0x50右移j位
delay_ms(200); //延時200MS
}
}
外延功能(2)子程序:
void effect4()
{
int i,j;
for(i=0;i<=4;i++)
{
P2OUT |= (0x01<<i)+(0x80>>i); //0x01 右移i位 0x80 右移 i位
delay_ms(200); //延時200MS
}
for(j=0;j<=4;j++)
{
P2OUT &=~ ((0x10<<j)+(0x08>>j)); //0x10 左移j位 0x08右移j位
delay_ms(200); //延時200MS
}
}
外延功能(3)子程序:
void effect5()
{
int i;
for(i=0;i<8;i++)
{
P2OUT ^= 0XFF; //狀態(tài)反轉(zhuǎn)
delay_ms(100); //延時100MS
}
}
外延功能(4)子程序:
void effect6()
{
effect1();
effect2();
effect3();
effect4();
effect5();
}
int a=0;
0.png (41.25 KB, 下載次數(shù): 96)
下載附件
2018-12-28 17:20 上傳
全部資料51hei下載地址:
|