|
單片機(jī)代碼如下,按鍵1按下觸發(fā)中斷,相當(dāng)于總開(kāi)關(guān),可以控制南北信號(hào)燈,此外可以用串口發(fā)送16進(jìn)制數(shù)據(jù),控制信號(hào)燈時(shí)間(只做了南北方向的,東西方向需要另做一個(gè)res接受位)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
protuse仿真
目錄
一、選題一理論部分 2
1.1 課題的要求與內(nèi)容 2
1.1.1 課題內(nèi)容: 十字路口交通燈系統(tǒng)設(shè)計(jì) 2
1.1.2 課題要求: 2
1.2 系統(tǒng)的方案設(shè)計(jì) 2
1.2.1 系統(tǒng)方案: 2
1.2.2系統(tǒng)的構(gòu)成: 2
1.3系統(tǒng)的硬件設(shè)計(jì) 2
1.3.1 系統(tǒng)硬件的設(shè)計(jì)步驟 2
1.3.2 系統(tǒng)硬件電路連接效果 3
1.4 系統(tǒng)的軟件設(shè)計(jì) 4
1.4.1 系統(tǒng)的軟件設(shè)計(jì)步驟 4
二、選題一實(shí)踐部分 4
2.1 系統(tǒng)的硬件原理與說(shuō)明 4
2.1.1 系統(tǒng)的硬件仿真效果圖 4
2.1.2 仿真圖說(shuō)明: 5
2.2系統(tǒng)硬件調(diào)試的過(guò)程中出現(xiàn)的問(wèn)題以及解決的措施 5
2.3系統(tǒng)軟件調(diào)試的過(guò)程中出現(xiàn)的問(wèn)題以及解決的措施 6
一、(選題一)理論部分
1.1 課題的要求與內(nèi)容
1.1.1 課題內(nèi)容: 十字路口交通燈系統(tǒng)設(shè)計(jì)
為了減少交通事故,確保交通順暢,十字路口必須安置信號(hào)燈,以一定的時(shí)間間隔輪流點(diǎn)亮和熄滅。系統(tǒng)要求利用單片機(jī)的定時(shí)器定時(shí)功能,令十字路口的紅黃綠燈交替點(diǎn)亮和熄滅,并且用LED數(shù)碼管顯示時(shí)間。
1.1.2 課題要求:
(1)開(kāi)機(jī)或復(fù)位后,信號(hào)燈全滅,南北和東西各有兩組信號(hào)燈,分別是直行和左轉(zhuǎn)彎,LED數(shù)碼管顯示2位:顯示秒。南北方向直行綠燈時(shí)間為20s,左轉(zhuǎn)綠燈時(shí)間為17s;東西方向直行綠燈時(shí)間為27s,左轉(zhuǎn)方向?yàn)?2s。黃燈時(shí)間為3s。
(2)發(fā)揮部分
a.系統(tǒng)存儲(chǔ)兩套十字路口配時(shí)方案,可以通過(guò)按鍵來(lái)進(jìn)行選擇;
b.利用串口調(diào)試助手或編寫(xiě)上位機(jī)軟件,通過(guò)上位機(jī)來(lái)人工設(shè)定十字路口配時(shí)方案。
1.2 系統(tǒng)的方案設(shè)計(jì)
1.2.1 系統(tǒng)方案:
本次課程設(shè)計(jì)所采用的方案是用單片機(jī)控制十字路口交通燈。單片機(jī)具有結(jié)構(gòu)簡(jiǎn)單、編程方便、經(jīng)濟(jì)、易于連接等優(yōu)點(diǎn),特別是其內(nèi)部定時(shí)器、計(jì)數(shù)器、中斷系統(tǒng)資源豐富可對(duì)交通燈進(jìn)行精確的控制,有應(yīng)用價(jià)值,可擴(kuò)展功能多,靈活性比較強(qiáng)。
1.2.2系統(tǒng)的構(gòu)成:
整個(gè)系統(tǒng)的構(gòu)成以80C51單片機(jī)為核心,由I/O口擴(kuò)展,LED數(shù)碼管顯示,緊急情況中斷電路還有復(fù)位電路等組成。
單片機(jī)作為整個(gè)硬件系統(tǒng)的核心,它既是協(xié)調(diào)整個(gè)工作系統(tǒng)的控制器,又是數(shù)據(jù)處理器。它由單片機(jī)、時(shí)鐘電路、復(fù)位電路等組成。行車(chē)方向指示采用LED發(fā)光二極管,可有紅、綠兩種顏色指示放行與禁止,黃燈作為紅綠轉(zhuǎn)換的提示,形象直觀。
本系統(tǒng)為交通信號(hào)燈設(shè)計(jì)了兩種不同的配時(shí)方案,可以根據(jù)道路實(shí)時(shí)交通量的大小選擇最佳配時(shí)方案。同時(shí)本系統(tǒng)還配有串口調(diào)試助手,可以通過(guò)串口發(fā)送數(shù)據(jù)從而達(dá)到改變配時(shí)時(shí)間的效果。
1.3系統(tǒng)的硬件設(shè)計(jì)
本系統(tǒng)的硬件主要由以下幾部分組成:80C51單片機(jī)、電阻、LED數(shù)碼管、LED發(fā)光二極管、電容、電解電容、晶體振蕩器、開(kāi)關(guān)、標(biāo)準(zhǔn)RS232端口。電路圖是在Proteus中來(lái)連接完成的。
1.3.1 系統(tǒng)硬件的設(shè)計(jì)步驟

圖1 系統(tǒng)硬件設(shè)計(jì)流程圖
1.3.2 系統(tǒng)硬件電路連接效果

圖2 硬件電路連接效果圖
1.4 系統(tǒng)的軟件設(shè)計(jì)
本系統(tǒng)的軟件設(shè)計(jì)部分全部在Keil uvision4中完成,采用的編程語(yǔ)言為Keil C51.
1.4.1 系統(tǒng)的軟件設(shè)計(jì)步驟

圖3 系統(tǒng)軟件設(shè)計(jì)流程圖
二、(選題一)實(shí)踐部分
2.1 系統(tǒng)的硬件原理與說(shuō)明
2.1.1 系統(tǒng)的硬件仿真效果圖


圖4 硬件仿真效果圖
2.1.2 仿真圖說(shuō)明:
當(dāng)開(kāi)關(guān)1按下時(shí),交通信號(hào)燈首先執(zhí)行第一套配時(shí)方案,首先,南北方向的直行是綠燈,東西方向的直行和左轉(zhuǎn)均為紅燈,待南北方向的直行時(shí)間變?yōu)?時(shí),黃燈閃爍3秒,然后南北方向的左轉(zhuǎn)變?yōu)榫G燈,東西方向的直行和左轉(zhuǎn)仍然全部為紅燈;待南北方向的左轉(zhuǎn)時(shí)間變?yōu)?時(shí),黃燈仍然閃爍3秒,然后東西方向的直行變?yōu)榫G燈,以此類(lèi)推,信號(hào)燈亮的順序和南北方向一致。配時(shí)方案2中信號(hào)燈亮的順序和配時(shí)方案一的順序一致,只是亮的時(shí)間不同。
本系統(tǒng)在設(shè)計(jì)的過(guò)程中還使用了串口調(diào)試助手,修改的是南北方向直行的時(shí)間的個(gè)位上的數(shù)值。
2.2系統(tǒng)硬件調(diào)試的過(guò)程中出現(xiàn)的問(wèn)題以及解決的措施
問(wèn)題:
信號(hào)燈點(diǎn)亮的順序不對(duì)。
串口不能正常使用。
措施:
重新計(jì)算信號(hào)燈的字模。
重新連接串口。
2.3系統(tǒng)軟件調(diào)試的過(guò)程中出現(xiàn)的問(wèn)題以及解決的措施
問(wèn)題:
接收不到串口發(fā)來(lái)的數(shù)據(jù)。
措施:
給定義的變量賦初值。
三、(選題一)結(jié)束語(yǔ)
通過(guò)本次課程設(shè)計(jì),使我得到了一次用專(zhuān)業(yè)知識(shí)、專(zhuān)業(yè)技能分析和解決問(wèn)題全面系統(tǒng)的鍛煉。使我在51單片機(jī)的基本原理、單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程,以及在常用編程設(shè)計(jì)思路技巧(特別是C語(yǔ)言)的掌握方面都能向前邁了堅(jiān)實(shí)的一步。
首先,我感觸最深的當(dāng)屬查閱大量的設(shè)計(jì)資料了。為了讓自己的設(shè)計(jì)更加完善,查閱這方面的設(shè)計(jì)資料是十分必要的,在資料中查看與自己的設(shè)計(jì)相似的只是,在此基礎(chǔ)上完善直至符合設(shè)計(jì)要求。
其次,在這次課程設(shè)計(jì)中,我們運(yùn)用到了以前所學(xué)的專(zhuān)業(yè)知識(shí),如:C語(yǔ)言、proteus制圖。編寫(xiě)的程序與仿真電路圖配合使用,發(fā)現(xiàn)問(wèn)題,解決問(wèn)題,在解決問(wèn)題的過(guò)程中,我受益頗多。
最后,要做好一個(gè)課程設(shè)計(jì),就必須要有一個(gè)清晰的思路和一個(gè)完整的的軟件流程圖;在設(shè)計(jì)程序時(shí),一次性就將整個(gè)程序設(shè)計(jì)好的概率很小,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路,一個(gè)完美的代碼通常是要修改很多次的;要養(yǎng)成注釋程序的好習(xí)慣,一個(gè)程序的完美與否不僅僅是實(shí)現(xiàn)功能,而應(yīng)該讓人一目了然地明白設(shè)計(jì)者的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計(jì)過(guò)程中應(yīng)該將每次遇到的問(wèn)題記錄下來(lái),并分析清楚,從中學(xué)到的知識(shí)也會(huì)讓我受益終身。
單片機(jī)源碼:
#include<reg51.h>
sbit LED1=P1^0;
sbit LED2=P1^1;
unsigned char code DIG_CODE[10]={0x6f/*9*/,0x7f/*8*/,0x07/*7*/,0x7d/*6*/,0x6d/*5*/,0x66/*4*/,0x4f/*3*/,0x5b/*2*/,0x06/*1*/,0x3f/*0*/};
unsigned int time;
unsigned int LedNumVal[2];
unsigned int button;
static unsigned char rec;
static unsigned char recs;
static unsigned char recg;
void Delay (unsigned int a )
{
unsigned char i=1;
unsigned int time=0;
if(time==a)
{i++;
}
}
void Display_show( int a , int b )
{
int i=1;
int j;
int k;
LedNumVal[0] = (9 - b) * 1000;
LedNumVal[1] = (9 - a) * 1000;
while(i==1)
{
LED2=0;
P0=DIG_CODE[LedNumVal[0] / 1000];
Delay(5);
if(LedNumVal[0] > 10000) //
{
LedNumVal[1] = LedNumVal[1] + 1000; //
LedNumVal[0] = 0; //b=9
}
j = 10;
while(j--);
P0 = 0x00;
LED2 = 1;
LED1=0;
P0=DIG_CODE[LedNumVal[1] / 1000];
Delay(5);
if(LedNumVal[1] == 9000) //
{
if(LedNumVal[0] > 9500) //
{
i++; //??b<0
}
}
k = 10; //
while(k--);
P0 = 0x00;//
LED1 = 1;
}
}
void main(void)
{
TMOD = 0x21; //
TH0 = 0xFE; //
TL0 = 0x0C ; //
TH1=TL1=0xf4; //
TR1=1; /
ES=1; //
PS=1; //
PT0=0; /
PCON=0; //
SCON=0x50;
IT0=1; //
EA = 1; //
ET0=1; //?
TR0= 1; /
EX0=1; /
EX1=1;
rec=0; //receive初值
while(1)
{
if(button==1)
{
if((button==1)&&(rec==0)) P2=0X7E; Display_show(1,2); //南北方向12s
if((button==1)&&(rec!=0)) P2=0x7e; Display_show(recs,recg);
P2=0X7D;
Display_show(0,3);
//??????3s
P2=0X7B;
Display_show(0,7);
//7s
P2=0X7D;
Display_show(0,3);
//3s
P2=0XE7;
Display_show(0,7);
//7s
P2=0XD7;
Display_show(0,3);
//3s
P2=0XB7;
Display_show(0,7);
//7s
P2=0XD7;;
Display_show(0,3);
//3s
}
if(button==2)
{
P2=0X7E;
Display_show(2,8);
//28s
P2=0X7D;
Display_show(0,3);
//3s
P2=0X7B;
Display_show(1,2);
//12s
P2=0X7D;
Display_show(0,3);
//3s
P2=0XE7;
Display_show(2,3);
//23s
P2=0XD7;
Display_show(0,3);
//3s
P2=0XB7;
Display_show(1,0);
//10s
P2=0XD7;;
Display_show(0,3);
//3s
}
}
}
void T0zd(void) interrupt 1 //T0 (1ms)
{
TH0 = 0xFE;
TL0 = 0x0C ;
LedNumVal[0]++;
time++;
}
void int0(void) interrupt 0 using 0
{
EX0=0;
button = 1;
EX0=1;
}
void int1(void) interrupt 2 using 0
{
EX1=0;
button = 2;
EX1=1;
}
void receiver() interrupt 4
{
if(RI==1)
{
RI=0;
rec=SBUF;
SBUF=rec;
while(TI==0);
TI=0;
recg=rec%16; //個(gè)位
recs=rec/16*10; //十位
}
}
全部資料51hei下載地址:
交通信號(hào)燈.zip
(8.04 MB, 下載次數(shù): 113)
2019-1-15 13:16 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|