第一篇:基于FPGA的交通燈控制電路設(shè)計(jì)
基于FPGA的交通燈控制電路設(shè)計(jì)
關(guān)鍵字: 交通信號(hào)機(jī) FPGA 脈沖發(fā)生器
目前交通燈廣泛應(yīng)用于道路交通建設(shè)中。本文設(shè)計(jì)一個(gè)十字路口交通燈控制電路,要求東西、南北兩條干道的紅、綠、黃交通燈按要求循環(huán)變化,并以倒計(jì)時(shí)方式指示干道通行或禁止的維持時(shí)間。在QuartusⅡ軟件環(huán)境中設(shè)計(jì)、仿真,并在FPGA實(shí)驗(yàn)板上實(shí)現(xiàn)所設(shè)計(jì)電路的功能。
系統(tǒng)概述
1.1 設(shè)計(jì)思想
基于FPGA的交通燈系統(tǒng)控制設(shè)計(jì)包括4大模塊,分別為脈沖發(fā)生、狀態(tài)定時(shí)、交通燈閃爍的控制、閃爍時(shí)間的控制,基本原理如圖1所示。
1.2 總體工作情況
交通燈控制要求如表1所示。
該設(shè)計(jì)的交通燈控制分為6個(gè)狀態(tài)。由于各狀態(tài)持續(xù)時(shí)間不同,所以電路的核心控制部分是狀態(tài)機(jī)和定時(shí)器,狀態(tài)機(jī)在定時(shí)器觸發(fā)下周期性循環(huán),狀態(tài)碼控制6個(gè)燈以一定的規(guī)律變化。變化情況如圖2所示。
系統(tǒng)脈沖由FPGA開發(fā)板晶振經(jīng)過分頻電路實(shí)現(xiàn)。狀態(tài)定時(shí)由74190可逆十進(jìn)制計(jì)數(shù)器和T’觸發(fā)器實(shí)現(xiàn),只要置數(shù)合理,翻轉(zhuǎn)信號(hào)到位,就可以使電路在東西(I)、南北(J)兩個(gè)控制狀態(tài)間翻轉(zhuǎn)。紅、黃、綠燈的閃爍由7485數(shù)字比較器和組合邏輯控制,其中7485數(shù)字比較器用于比較計(jì)數(shù)器當(dāng)前持續(xù)狀態(tài)和所需要的狀態(tài)全部時(shí)間,并做出相應(yīng)的變化。組合邏輯控制由AHDL文件編寫真值表實(shí)現(xiàn)。時(shí)間顯示由AHDL文件編寫真值表實(shí)現(xiàn),輸入正確的邏輯,七段譯碼電路即能得到正確的時(shí)間顯示。
1.3 各功能的組成
整個(gè)電路可以分為4大部分,包括脈沖發(fā)生、狀態(tài)定時(shí)、時(shí)間顯示和數(shù)字比較一組合邏輯控制。
1.3.1 脈沖發(fā)生
脈沖發(fā)生器為整個(gè)系統(tǒng)提供驅(qū)動(dòng),將輸入端分配給FPGA實(shí)驗(yàn)板的PIN55引腳,則會(huì)由實(shí)驗(yàn)板上產(chǎn)生頻率為10 MHz的輸入脈沖,用7片7490,每一級(jí)都構(gòu)成10分頻電路,使頻率從10 MHz降低為1Hz。
1.3.2 狀態(tài)定時(shí)
狀態(tài)定時(shí)可由預(yù)置BCD碼初值的74190級(jí)聯(lián)實(shí)現(xiàn),構(gòu)成減計(jì)數(shù)器。級(jí)聯(lián)原則是:低位計(jì)數(shù)器從全0狀態(tài)變?yōu)樽畲蟠a值狀態(tài)時(shí)可使高位計(jì)數(shù)器減1。級(jí)聯(lián)方式分為異步和同步兩種,本文采取的是異步級(jí)聯(lián)方式,即低位計(jì)數(shù)器溢出信號(hào)控制高位計(jì)數(shù)器的記數(shù)脈沖輸入端。可根據(jù)計(jì)數(shù)器的時(shí)鐘觸發(fā)方式,在低位計(jì)數(shù)器狀態(tài)碼從全“0”變?yōu)樽畲蟠a值的瞬間,為高位計(jì)數(shù)器提供有效的計(jì)數(shù)脈沖邊沿。具體做法是將低片位的溢出信號(hào)RCON端口接到高片位的計(jì)數(shù)脈沖CLK,實(shí)現(xiàn)兩位BCD碼的置數(shù)、翻轉(zhuǎn)和借位,使系統(tǒng)表示的數(shù)字能在22~16之間循環(huán)。
74190功能說明:
(1)GN為計(jì)數(shù)器使能控制端,低電平有效。當(dāng)GN為高電平時(shí),禁止計(jì)數(shù)。
(2)DNUP為計(jì)數(shù)方式控制,接高電平為減計(jì)數(shù),接低電平為加計(jì)數(shù)。
(3)LDN為異步預(yù)置數(shù)控制。當(dāng)LDN為低電平時(shí),計(jì)數(shù)器狀態(tài)QD,QC,QB,QA分別等于D,C,B,A。
(4)計(jì)數(shù)器位序由高至低順序?yàn)镼D,QC,QB,QA。QD為最高位MSB,QA為最低位LSB。
(5)計(jì)數(shù)脈沖CLK上升沿有效。
(6)當(dāng)計(jì)數(shù)器輸出QDQCQBQA為十進(jìn)制加計(jì)數(shù)的最大狀態(tài)碼“1001”或?yàn)闇p計(jì)數(shù)的最小狀態(tài)碼全“0”時(shí),極值狀態(tài)碼指示MAX/MIN輸出為高電平。
(7)當(dāng)極值狀態(tài)碼指示MAX/MIN為高電平且CLK為低電平時(shí),溢出信號(hào)RCON為低電平,即RCON與計(jì)數(shù)脈沖同步。
系統(tǒng)記數(shù)脈沖為1 Hz時(shí),如表2所示,當(dāng)I狀態(tài)(東西控制狀態(tài))的定時(shí)時(shí)間為22 s,計(jì)數(shù)器應(yīng)該先預(yù)置22的BCD碼;同理,J狀態(tài)(南北控制狀態(tài))之前應(yīng)該預(yù)置16的BCD碼。
狀態(tài)計(jì)時(shí)電路由兩片74190級(jí)聯(lián)而成,構(gòu)成22和16自翻轉(zhuǎn)的電路。其要解決的核心問題包括置數(shù),翻轉(zhuǎn)和借位。根據(jù)74190芯片的特點(diǎn),可分析其實(shí)現(xiàn)原理如圖4所示,通過溢出信號(hào)RCON的上升沿實(shí)現(xiàn)借位,使得數(shù)字能夠從20到19,個(gè)位向十位借位,順利過渡。
置數(shù)和翻轉(zhuǎn)之間有先后關(guān)系,即須先置數(shù)后翻轉(zhuǎn)。如表3所示,分析兩個(gè)BCD碼各位特點(diǎn),可知兩者D7D6D3D0位均為1,D1位均為0,而D5D4D2位不同,如圖5,D5D4D2位由狀態(tài)電平S來控制,當(dāng)為I狀態(tài)時(shí),計(jì)數(shù)器的預(yù)置的數(shù)為D5=0,D4=D2=1,而為J狀態(tài)時(shí),計(jì)數(shù)器的預(yù)置的數(shù)為D5=1,D4=D2=0,根據(jù)74190的功能,將2片74190的MAX/MIN引出,通過與非門,分別連在高位和低位的LDN置數(shù)端,通過分析可知,當(dāng)計(jì)數(shù)器從01減到00時(shí)候,高低位的MAX/MIN均為高電平,經(jīng)過與非門以后為低電平,74190被置數(shù),其置數(shù)值由狀態(tài)S來決定,S是由LDN端信號(hào)經(jīng)過一個(gè)T’觸發(fā)器決定的,即LDN信號(hào)每置數(shù)一次,S翻轉(zhuǎn)1次,從而區(qū)分16和22狀態(tài)。按這個(gè)結(jié)構(gòu),可分別置數(shù)16和22,使其實(shí)現(xiàn)自翻轉(zhuǎn)。
圖5為狀態(tài)定時(shí)模塊的實(shí)際連接圖。
1.3.3 時(shí)間顯示
時(shí)間顯示要用到7段顯示譯碼電路,由于是兩位BCD碼,故用二選一數(shù)據(jù)選擇器。選擇端S接一個(gè)頻率很高的方波(如1 kHz);數(shù)據(jù)比較器的輸出和1 Hz脈沖作為AHDL模塊的輸入,即可正確顯示時(shí)間。
為正確顯示時(shí)間,用AHDL文件自編譯碼真值表如下:
1.3.4 數(shù)字比較一組合邏輯控制
該模塊將狀態(tài)定時(shí)模塊輸出的時(shí)間與時(shí)間節(jié)點(diǎn)進(jìn)行比較,從而確定電路處于22 s或者16 s的具體的某個(gè)狀態(tài)。由表1可知,東西(I)或南北(J)的控制狀態(tài)都有3個(gè)階段的控制邏輯,分別對(duì)應(yīng)3個(gè)時(shí)間段:1~3 s,4~6 s和大于6 s,因此,采用數(shù)字比較器進(jìn)行比較,確定定時(shí)值小于4 s或大于6 s,方法如圖7所示,采用4片7485數(shù)字比較器,兩兩級(jí)聯(lián),其中一個(gè)由狀態(tài)定時(shí)模塊的輸出與4即二進(jìn)制0100比較;另一個(gè)由狀態(tài)定時(shí)模塊的輸出與6即二進(jìn)制0110比較。
編寫組合邏輯真值表,將狀態(tài)信號(hào)S,兩個(gè)數(shù)字比較器的輸出Y1,Y2和1 Hz脈沖作為輸入,各個(gè)燈的狀態(tài)作為輸出。從而根據(jù)邏輯關(guān)系得出對(duì)應(yīng)時(shí)間電路的狀態(tài),控制紅、黃、綠燈處于不同的狀態(tài)。S判斷電路處于22 s狀態(tài)還是16 s狀態(tài),Y1,Y2區(qū)分東西、南北六個(gè)階段狀態(tài),1 Hz脈沖實(shí)現(xiàn)綠燈閃爍。電路的組構(gòu)與調(diào)試
來用QuartusⅡ軟件設(shè)計(jì)各個(gè)模塊,并進(jìn)行仿真。確認(rèn)結(jié)果后,下載至FPGA實(shí)驗(yàn)板中,進(jìn)行相應(yīng)的硬件調(diào)試,調(diào)試結(jié)果與仿真結(jié)果相一致。圖8為仿真波形,系統(tǒng)上電需要調(diào)整的過程,因此電路正常工作前重復(fù)了22s的狀態(tài)。
第二篇:基于51單片機(jī)的交通燈控制電路設(shè)計(jì)
交通燈
一、功能要求
要求甲車道和乙車道兩條交叉道路上的車輛交替運(yùn)行,每次通行時(shí)間都設(shè)為25秒,黃燈先亮5秒鐘,才能變換運(yùn)行車道;黃燈亮?xí)r,要求每秒鐘閃亮一次。
二、電路圖
說明:1)每一位數(shù)碼管位選要分開,對(duì)應(yīng)IO口參照程序中紅色部分 2)圖示數(shù)碼管為共陽,沒加驅(qū)動(dòng)數(shù)碼管顯示較暗,建議加驅(qū)動(dòng)
三、程序
//TrafficLight.c #include“reg52.h”
//IO口定義 sbit red_1 =P2^0;//南北方向 sbit red_2 =P2^3;//東西方向 sbit yellow_1 =P2^1;sbit yellow_2 =P2^4;sbit green_1 =P2^2;sbit green_2 =P2^5;sbit com1_1 =P3^6;//十位 南北方向 數(shù)碼管位選 sbit com1_2 =P3^7;//個(gè)位 南北方向 sbit com2_1 =P3^4;//十位 東西方向 sbit com2_2 =P3^5;//個(gè)位 東西方向
//全局變量 char time=30;//倒計(jì)時(shí)
unsigned char num1=0,num2=0;//輔助計(jì)時(shí) unsigned char flag1=0,flag2=0;//黃燈閃標(biāo)志位 unsigned char shi1,shi2,ge1,ge2;//數(shù)碼管十位個(gè)位
const unsigned char ledNum[] =
{// 0 1
A
b
c
d
E
F
不顯示-o(18)H(19)h(20)C(21)0(22)n(23)0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab };//共陽數(shù)碼管
//中斷優(yōu)先級(jí)別T0>T1,數(shù)碼管顯示中斷間隔2ms,計(jì)時(shí)時(shí)間間隔50ms //計(jì)時(shí)要求比較精確,間隔長(zhǎng),不應(yīng)該被打斷,故中斷優(yōu)先級(jí)要高,使用T0 //數(shù)碼管中斷可以被打斷,打斷時(shí)間較短,不會(huì)影響顯示,使用T1 //在交通燈中,計(jì)時(shí)和數(shù)碼管顯示一直進(jìn)行,故定時(shí)器開啟后不用停止 void InitInter(void){ TMOD=0x11;//設(shè)置定時(shí)器工作方式為16位計(jì)時(shí)器
TH0=(65535-45872)/256;//11.0592M晶振,50ms TL0=(65535-45872)%256;TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}
void Display(void){ static unsigned char i=1;
switch(i){ case 1:
com2_2=0;
P0=ledNum[shi1];
com1_1=1;
break;case 2:
com1_1=0;
P0=ledNum[ge1];
com1_2=1;
break;case 3:
com1_2=0;
P0=ledNum[shi2];
com2_1=1;
break;case 4:
com2_1=0;
P0=ledNum[ge2];
com2_2=1;
break;
default:;}
i++;if(i>4)i=1;}
//紅燈可以直接變成綠燈,但綠燈必須先變成黃燈再變紅燈 void main(void){ bit i=0;InitInter();
while(1){
red_1=0;//0為亮
red_2=1;
green_2=0;
time=30;
while(time>5)
{
shi1=time/10;
ge1=time%10;
shi2=(time-5)/10;
ge2=(time-5)%10;
}
green_2=1;
yellow_2=0;
flag2=1;
num2=0;
while(time>0)
{
shi1=time/10;
ge1=time%10;
shi2=time/10;
ge2=time%10;
}
flag2=0;
yellow_2=1;
red_2=0;
red_1=1;
green_1=0;
time=30;
while(time>5)
{
shi2=time/10;
ge2=time%10;
shi1=(time-5)/10;
ge1=(time-5)%10;
}
green_1=1;
yellow_1=0;
flag1=1;
num2=0;
while(time>0)
{
shi2=time/10;
ge2=time%10;
shi1=time/10;
ge1=time%10;
}
flag1=0;
yellow_1=1;
//red_1=0;
//green_2=0;} } void Timer_0(void)interrupt 1//計(jì)時(shí) { TH0=(65535-45872)/256;TL0=(65535-45872)%256;num1++;if(num1>=20){
num1=0;
time--;
//if(time<0)time=30;
//處理time,顯示方式
} if(flag1||flag2){
num2++;
if(num2>=10)
{
num2=0;
if(flag1)yellow_1=~yellow_1;
if(flag2)yellow_2=~yellow_2;
} } }
void Timer_1(void)interrupt 3 { TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;
Display();}
第三篇:課程設(shè)計(jì)任務(wù)書-24交通燈控制電路設(shè)計(jì)
課程設(shè)計(jì)任務(wù)書
題目:交通燈控制電路設(shè)計(jì)
時(shí)間: 年 月 日—— 年 月 日
設(shè)計(jì)的說明:
本設(shè)計(jì)需要用到實(shí)驗(yàn)箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個(gè)。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。交通燈顯示用實(shí)驗(yàn)箱的交通燈模塊和七段碼管中的任意兩個(gè)來顯示。系統(tǒng)時(shí)鐘選擇時(shí)鐘模塊的1KHz時(shí)鐘,黃燈閃爍時(shí)鐘要求為2Hz,七段碼管的時(shí)間顯示為1Hz 脈沖,即每1s 中遞減一次,在顯示時(shí)間小于3 秒的時(shí)候,通車方向的黃燈以2Hz 的頻率閃爍。系統(tǒng)中用S1 按鍵進(jìn)行復(fù)位。
設(shè)計(jì)的任務(wù)和要求:
1、在十字路口的兩個(gè)方向上各設(shè)一組紅、綠、黃燈;初始狀態(tài)是兩個(gè)路口的紅燈全亮之后,東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時(shí)一段時(shí)間后,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次后,東西路口紅燈亮,而同時(shí)南北路口的綠燈亮,南北方向開始通車,延時(shí)一段時(shí)間后,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到東西路口方向,重復(fù)上述過程。
2、設(shè)置數(shù)碼管顯示允許通行或者禁止通行的時(shí)間,東西路和南北路的通車時(shí)間均設(shè)定為20s。數(shù)碼管的時(shí)間總是顯示為19、18、17……2、1、0、19、18……。在顯示時(shí)間小于3 秒的時(shí)候,通車方向的黃燈閃爍。
3、當(dāng)各條路中任意一條上出現(xiàn)特殊情況,如消防車、救護(hù)車或其他需要優(yōu)先放行的車輛時(shí),各方向上均是紅燈亮。倒計(jì)時(shí)停止,且顯示數(shù)字在閃爍。當(dāng)特殊運(yùn)行狀態(tài)結(jié)束后,控制器恢復(fù)原來狀態(tài),繼續(xù)正常運(yùn)行。
4、要求對(duì)整體電路進(jìn)行仿真,提供仿真波形圖,并分析結(jié)果
5、硬件測(cè)試結(jié)果用照片的形式記錄下來。
提高部分:編寫能手動(dòng)控制交通燈通行時(shí)間的交通燈控制器。
指導(dǎo)教師:
學(xué)生:
日期:
第四篇:交通燈控制邏輯電路設(shè)計(jì)與總結(jié)報(bào)告
交通燈控制邏輯電路設(shè)計(jì)與總結(jié)報(bào)告
一、設(shè)計(jì)任務(wù)
用CPLD設(shè)計(jì)路口交通燈控制器
二、設(shè)計(jì)要求
1、滿足一下時(shí)序要求:南北方向紅燈亮,東西方向綠燈亮;南北方向綠燈亮,東西方向紅燈亮;
2、每一方向的紅(綠)黃燈總共維持30秒;
3、十字路口要有時(shí)間顯示,具體為:當(dāng)某一方向綠燈亮?xí)r,置顯示器為30秒,然后以每秒減一技術(shù)方式工作,直至減到數(shù)為4秒時(shí),紅綠燈熄滅,黃燈開始間隙閃耀4秒,減到0時(shí),紅綠燈交換,一次工作循環(huán)結(jié)束,進(jìn)入下一步另一方向的工作循環(huán);
4、紅綠燈均采用發(fā)光二極管;
5、設(shè)計(jì)由晶振電路產(chǎn)生1Hz標(biāo)準(zhǔn)秒信號(hào)的單元電路(實(shí)際秒脈沖由開發(fā)箱提供);
6、要求對(duì)整體電路進(jìn)行仿真,觀察并記錄下仿真波形;
7、選作部分:
a、手動(dòng)調(diào)整和自動(dòng)控制,夜間為黃燈閃耀;
b、白天黃燈亮?xí)r,以2Hz的速度閃爍點(diǎn)亮四秒; c、紅綠燈循環(huán)點(diǎn)亮?xí)r間可以自由修改。
三、設(shè)計(jì)設(shè)備
含有Quartus軟件的電腦一臺(tái),可下載的試驗(yàn)臺(tái);
四、設(shè)計(jì)方法
使用VHDL語言進(jìn)行程序的設(shè)計(jì)運(yùn)行和仿真,以及波形的運(yùn)行仿真,最后進(jìn)行下載仿真;
五、方案論證
方案1:把整個(gè)流程分成幾個(gè)進(jìn)程來做;
方案2:每個(gè)進(jìn)程都使用if和case語句實(shí)現(xiàn)功能的實(shí)現(xiàn); 方案3:使用狀態(tài)機(jī)來實(shí)現(xiàn)狀態(tài)間的轉(zhuǎn)換;
方案論證:
1、要實(shí)現(xiàn)整個(gè)流程,需要做的輸出內(nèi)容類型不同,如果放在一個(gè)進(jìn)程里面就比較容易混淆,產(chǎn)生混亂。而采用分成幾個(gè)進(jìn)程來做的方式就明確了每個(gè)模塊的內(nèi)容和分工,使其調(diào)理清晰,一目了然;
2、if語句是條件語句,是VHDL語言中常用的基本語句。該流程中的變量比較繁多,而使用case語句分情況列出來,簡(jiǎn)潔明了。
3、狀態(tài)機(jī)的使用格式簡(jiǎn)潔,使用簡(jiǎn)單方便,特別是在進(jìn)行狀態(tài)的轉(zhuǎn)換時(shí)候。并行的狀態(tài)轉(zhuǎn)換不易出錯(cuò),可將狀態(tài)轉(zhuǎn)換、賦值、計(jì)數(shù)等多個(gè)功能封裝在某一個(gè)狀態(tài)中,并且更加便于為系統(tǒng)添加新的狀態(tài)功能。
方案選定:
通過以上分析,確定用以上方案為本次設(shè)計(jì)的方案。
六、工作原理
先對(duì)所給時(shí)鐘脈沖進(jìn)行分頻到標(biāo)準(zhǔn)時(shí)鐘脈沖;設(shè)計(jì)兩個(gè)時(shí)鐘控制倒計(jì)時(shí),倒計(jì)時(shí)的時(shí)間可自由修改,由輸入決定;設(shè)計(jì)另一個(gè)時(shí)鐘,用以控制白天與夜間模式的轉(zhuǎn)換;在白天時(shí),根據(jù)倒計(jì)時(shí)的數(shù)字進(jìn)行紅綠燈的狀態(tài)轉(zhuǎn)換;夜間時(shí),紅綠燈狀態(tài)改為夜間模式:黃燈閃爍。
七、程序設(shè)計(jì)
------交通燈控制系統(tǒng)所使用的庫和包
-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
-------------------------------交通燈控制系統(tǒng)的實(shí)體
-------------------------entity jt is
port(clk,reset:in std_logic;
------------------時(shí)鐘脈沖clk由系統(tǒng)直接提供,需要進(jìn)行分
頻;reset是啟動(dòng)鍵,當(dāng)reset為1是,系統(tǒng)啟動(dòng)
t0:integer range 0 to30;
------------------紅綠燈循環(huán)點(diǎn)亮的時(shí)間,根據(jù)輸入的不同
系統(tǒng)運(yùn)行的不同
r1,y1,g1,r2,y2,g2:out std_logic;
------------------r1為東西方向紅燈,y1為東西方
向黃燈,g1為東西方向綠燈;r2為南北方向紅燈,y2為南北方向黃燈,g2為南北方向綠燈
ec0,ec1,nc0,nc1:out std_logic_vector(3 downto 0));
------------------ec0,ec1分別為東西方向的倒計(jì)時(shí)間的個(gè)位和十位;
nc0,nc1分別為南北方向的倒計(jì)時(shí)間的個(gè)位和十位
end jt;-------------------------------交通燈控制系統(tǒng)的結(jié)構(gòu)體(5個(gè)進(jìn)程)
-------------------------architecture one of jt is
type state_type is(s0,s1,s2,s3);
------------------定義狀態(tài)的類型
signal state:state_type;
------------------使用狀態(tài)機(jī)
signal k:std_logic;
------------------分頻后的1Hz的標(biāo)準(zhǔn)時(shí)鐘脈沖
signal c1,c2:integer range 0 to 30;
------------------定義東西、南北方向的兩個(gè)
倒計(jì)時(shí)的計(jì)數(shù)
signal t1:integer range 0 to 3600;
signal t2:integer range 0 to 24;------------------定義一個(gè)時(shí)鐘,用以控制白天與夜間模式 Begin------該進(jìn)程用以分頻
-------------------------q0:process(clk)
variable tt:std_logic_vector(9 downto 0);
------------------中間變量
begin
if clk'event and clk='1' then
if tt=“1111101000” then
----------------------把所給1kHz分頻成1Hz的脈沖
k,10000分頻,仿真值用“ 0000000100”八分頻
tt:=(others=>'0');
k<='1';
else
tt:=tt+1;k<='0';
end if;
end if;end process q0;-------------------------
------該進(jìn)程用以設(shè)計(jì)時(shí)鐘
-------------------------q1:process(k,reset)
begin
if reset='1' then
------------------啟動(dòng)開關(guān)為1時(shí),系統(tǒng)開始運(yùn)行
t1<=0;t2<=0;
------------------從0點(diǎn)開始 elsif k='1' and k'event then if t1=3599 then
------------------一個(gè)t1循環(huán)是一個(gè)秒,仿真值用“35” if t2=23 then
-------------------一個(gè)t1循環(huán)是一個(gè)小時(shí),一天24小時(shí) t2<=0;
else t2<=t2+1;end if;t1<=0;else t1<=t1+1;end if;end if;end process q1;-------------------------------該進(jìn)程用以控制白天黑天模式和紅綠燈狀態(tài)轉(zhuǎn)換
-------------------------q2:process(k,reset,t2)
begin
if t2>=5 and t2<=22 then
-------------------白天模式5:00到22:00之間
if reset='1' then
-------------------啟動(dòng)開關(guān)為1時(shí),系統(tǒng)開始運(yùn)
行,進(jìn)行狀態(tài)轉(zhuǎn)換
r1<='0';y1<='0';g1<='1';-------------------東西方向綠燈亮 r2<='1';y2<='0';g2<='0';-------------------南北方向紅燈亮 state<=s0;-------------------紅綠燈處于初始狀態(tài)s0 c1<=t0;
c2<=t0;-------------------倒計(jì)時(shí)從自由輸入值開始遞減 elsif k='1' and k'event then
case state is
when s0=>-------------------當(dāng)處于第1狀態(tài)時(shí),討論
if c1=5 then
--------------由于進(jìn)程內(nèi)部的并列進(jìn)
行,當(dāng)?shù)褂?jì)時(shí)第4秒時(shí),進(jìn)入到第2狀態(tài)s1
state<=s1;
c1<=c1-1;
c2<=c2-1;
--------------倒計(jì)時(shí)遞減
elsif c2=0 then
------------倒計(jì)時(shí)減到0時(shí),再?gòu)?/p>
初始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續(xù)保持第1狀態(tài)s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
end if;
when s1=>-------------------當(dāng)處于第2狀態(tài)時(shí),討論
if c1=1 then--------------由于進(jìn)程內(nèi)部的并列進(jìn)行,當(dāng)
倒計(jì)時(shí)第t0秒時(shí),進(jìn)入到第3狀態(tài)s2
state<=s2;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續(xù)保持第2狀態(tài)
state<=s1;
c1<=c1-1;
c2<=c2-1;
end if;
when s2=>-------------------當(dāng)處于第3狀態(tài)時(shí),討論
if c2=5 then--------------由于進(jìn)程內(nèi)部的并列進(jìn)行,當(dāng)?shù)褂?jì)時(shí)第4秒時(shí),進(jìn)入到第4狀態(tài)s3
state<=s3;
c1<=c1-1;
c2<=c2-1;
elsif c1=0 then
------------倒計(jì)時(shí)減到0時(shí),再?gòu)某?/p>
始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續(xù)保持第3狀態(tài)
state<=s2;
c1<=c1-1;
c2<=c2-1;
end if;
when s3=>-------------------當(dāng)處于第4狀態(tài)時(shí),討論 if c2=1 then--------------由于進(jìn)程內(nèi)部的并列進(jìn)行,當(dāng)?shù)?/p>
計(jì)時(shí)第t0秒時(shí),進(jìn)入到第1狀態(tài)s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續(xù)保持第4狀態(tài)
state<=s3;
c1<=c1-1;
c2<=c2-1;
end if;
when others=> state<=s0;
end case;if state=s0 then
r1<='0';y1<='0';g1<='1';
r2<='1';y2<='0';g2<='0';elsif state=s1 then
r1<='0';g1<='0';
r2<='1';y2<='0';g2<='0';
if c1=4 or c1=2 then y1<='1';
else y1<='0';
end if;elsif state=s2 then
r1<='1';y1<='0';g1<='0';
r2<='0';y2<='0';g2<='1';elsif state=s3 then
r1<='1';y1<='0';g1<='0';
r2<='0';g2<='0';
if c2=4 or c2=2 then y2<='1';
else y2<='0';
end if;end if;
--各個(gè)狀態(tài)的紅綠燈變量的賦值,‘1’亮‘0’熄 end if;else-------------------夜間模式22:00到次日5:00之間
c2<=0;c1<=0;r1<='0';r2<='0';g1<='0';g2<='0';y1<=k;y2<=k----------------紅綠燈的狀態(tài):脈沖k賦給黃燈變量,黃燈閃爍
end if;end process q2;-------------------------------該進(jìn)程用于東西方向倒計(jì)時(shí)的譯碼顯示
-------------------------q3:process(c1)
begin case c1 is when 0=>ec0<=“0000”;ec1<=“0000”;when 1=>ec0<=“0001”;ec1<=“0000”;when 2=>ec0<=“0010”;ec1<=“0000”;when 3=>ec0<=“0011”;ec1<=“0000”;when 4=>ec0<=“0100”;ec1<=“0000”;when 5=>ec0<=“0101”;ec1<=“0000”;when 6=>ec0<=“0110”;ec1<=“0000”;when 7=>ec0<=“1000”;ec1<=“0000”;when 9=>ec0<=“1001”;ec1<=“0000”;when 10=>ec0<=“0000”;ec1<=“0001”;when 11=>ec0<=“0001”;ec1<=“0001”;when 12=>ec0<=“0010”;ec1<=“0001”;when 13=>ec0<=“0011”;ec1<=“0001”;when 14=>ec0<=“0100”;ec1<=“0001”;when 15=>ec0<=“0101”;ec1<=“0001”;when 16=>ec0<=“0110”;ec1<=“0001”;when 17=>ec0<=“0111”;ec1<=“0001”;when 18=>ec0<=“1000”;ec1<=“0001”;when 19=>ec0<=“1001”;ec1<=“0001”;when 20=>ec0<=“0000”;ec1<=“0010”;when 21=>ec0<=“0001”;ec1<=“0010”;when 22=>ec0<=“0010”;ec1<=“0010”;when 23=>ec0<=“0011”;ec1<=“0010”;when 24=>ec0<=“0100”;ec1<=“0010”;when 25=>ec0<=“0101”;ec1<=“0010”;when 26=>ec0<=“0110”;ec1<=“0010”;when 27=>ec0<=“0111”;ec1<=“0010”;when 28=>ec0<=“1000”;ec1<=“0010”;when 29=>ec0<=“1001”;ec1<=“0010”;when 30=>ec0<=“0000”;ec1<=“0011”;----------------------------當(dāng)在設(shè)定范圍內(nèi)時(shí),分別為個(gè)位十位譯碼并顯示
when others=>ec0<=“0000”;ec1<=“0000”;
-------------------------否則,LED燈顯示0
end case;
end process q3;-------------------------------該進(jìn)程用于南北方向倒計(jì)時(shí)的譯碼顯示
-------------------------q4:process(c2)
begin
case c2 is when 0=>nc0<=“0000”;nc1<=“0000”;when 1=>nc0<=“0001”;nc1<=“0000”;when 2=>nc0<=“0010”;nc1<=“0000”;when 3=>nc0<=“0011”;nc1<=“0000”;when 4=>nc0<=“0100”;nc1<=“0000”;when 5=>nc0<=“0101”;nc1<=“0000”;when 6=>nc0<=“0110”;nc1<=“0000”;when 7=>nc0<=“0111”;nc1<=“0000”;when 8=>nc0<=“1000”;nc1<=“0000”;when 9=>nc0<=“1001”;nc1<=“0000”;when 10=>nc0<=“0000”;nc1<=“0001”;when 11=>nc0<=“0001”;nc1<=“0001”;when 12=>nc0<=“0010”;nc1<=“0001”;when 13=>nc0<=“0011”;nc1<=“0001”;when 14=>nc0<=“0100”;nc1<=“0001”;when 15=>nc0<=“0101”;nc1<=“0001”;when 16=>nc0<=“0110”;nc1<=“0001”;when 17=>nc0<=“0111”;nc1<=“0001”;when 18=>nc0<=“1000”;nc1<=“0001”;when 19=>nc0<=“1001”;nc1<=“0001”;when 20=>nc0<=“0000”;nc1<=“0010”;when 21=>nc0<=“0001”;nc1<=“0010”;when 22=>nc0<=“0010”;nc1<=“0010”;when 23=>nc0<=“0011”;nc1<=“0010”;when 24=>nc0<=“0100”;nc1<=“0010”;when 25=>nc0<=“0101”;nc1<=“0010”;when 26=>nc0<=“0110”;nc1<=“0010”;when 27=>nc0<=“0111”;nc1<=“0010”;when 28=>nc0<=“1000”;nc1<=“0010”;when 29=>nc0<=“1001”;nc1<=“0010”;when 30=>nc0<=“0000”;nc1<=“0011”;---------------------------當(dāng)在設(shè)定范圍內(nèi)時(shí),分別為個(gè)位十位譯碼并顯示
when others=>nc0<=“0000”;nc1<=“0000”;
end process q4;-------------------------end architecture one;
----所有進(jìn)程結(jié)束-------------------------
八、仿真結(jié)果
1、clk為輸入脈沖;開始令reset為’1’,啟動(dòng)系統(tǒng),系統(tǒng)正常工作后值為’0; t0為紅綠燈循環(huán)時(shí)間,可自由修改,如果輸入值為’0010000’,則為16秒倒計(jì)時(shí)。如下圖:系統(tǒng)從0點(diǎn)開始運(yùn)行,處于夜間模式時(shí),倒計(jì)時(shí)都為“00”,兩個(gè)方向都為黃燈閃爍,紅綠燈都熄滅。
---------------------------否則,LED燈顯示0
end case;2、5:00之后,進(jìn)入到白天模式:從第1狀態(tài)(東西方向綠燈亮、南北方向紅燈)開始,倒計(jì)時(shí)從16秒開始遞減。倒計(jì)時(shí)第4秒后進(jìn)入第2 狀態(tài)(東西方向黃燈閃爍,南北方向紅燈亮)。
3、倒計(jì)時(shí)第0秒后進(jìn)入第3 狀態(tài)(東西方向紅燈亮,南北方向綠燈亮),倒計(jì)時(shí)再?gòu)?6秒開始遞減;倒計(jì)時(shí)第4秒后進(jìn)入第4 狀態(tài)(東西方向紅燈亮,南北方向黃燈閃爍);倒計(jì)時(shí)第0秒后進(jìn)入第1 狀態(tài)(東西方向綠燈亮,南北方向紅燈亮),倒計(jì)時(shí)再?gòu)?6秒開始遞減
。如此循環(huán)。
4、當(dāng)計(jì)時(shí)器到22:00時(shí),再次進(jìn)入夜間模式:東西南北方向黃燈閃爍;到次日5:00時(shí)又回到白天模式。如此循環(huán)。
九、討論與改進(jìn)
特點(diǎn):
1、在整個(gè)設(shè)計(jì)過程中,分進(jìn)程實(shí)現(xiàn)整個(gè)功能,簡(jiǎn)單明了;
2、狀態(tài)機(jī)的功能和優(yōu)點(diǎn)得到了較為完整的體現(xiàn);
3、分夜間和白天模式不同,系統(tǒng)自動(dòng)調(diào)節(jié);
4、黃燈以閃爍的形式亮;系統(tǒng)運(yùn)行后紅綠燈循環(huán)點(diǎn)亮的時(shí)間也可自由修改。不足:
1、整個(gè)系統(tǒng)啟動(dòng)后從夜間0點(diǎn)開始運(yùn)行,而不能隨意調(diào)為哪個(gè)時(shí)間的交通燈狀態(tài),只能從程序中改,不能手動(dòng)調(diào)節(jié);
2、整個(gè)功能還是比較簡(jiǎn)單,未能分左右轉(zhuǎn)和直行的情況;
3、緊急情況處理時(shí)也無特殊處理的設(shè)置。
改進(jìn):
1、在進(jìn)程中可增加一個(gè)輸入量,用以控制系統(tǒng)的時(shí)鐘時(shí)間,方便調(diào)節(jié)模式和交通燈狀態(tài);
2、在進(jìn)程中可加入幾個(gè)紅綠燈狀態(tài)來分別控制東西方向和南北方向的左轉(zhuǎn)、右轉(zhuǎn)和直行的紅綠燈狀態(tài);
3、在原有程序的基礎(chǔ)上,可通過增加一個(gè)輸入量來控制一種特殊狀態(tài),用以控制特殊情況的處理,視該特殊情況而定。
二○一○年九月三日
第五篇:交通燈管理電路設(shè)計(jì)
交通燈管理電路設(shè)計(jì).txt懂得放手的人找到輕松,懂得遺忘的人找到自由,懂得關(guān)懷的人找到幸福!女人的聰明在于能欣賞男人的聰明。生活是燈,工作是油,若要燈亮,就要加油!相愛時(shí),飛到天邊都覺得踏實(shí),因?yàn)橛心愕臓繏欤环质趾螅诩依锒加X得失重,因?yàn)闆]有了方向。本文由車牌定位貢獻(xiàn)
doc文檔可能在WAP端瀏覽體驗(yàn)不佳。建議您優(yōu)先選擇TXT,或下載源文件到本機(jī)查看。
東 北 石 油 大 學(xué)
課
課 題 院 程 目 系
程
設(shè)
計(jì)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 交通燈管理電路設(shè)計(jì) 電子科學(xué)學(xué)院 電信 07-5 班 馬深慧 070901140505 專業(yè)班級(jí) 學(xué)生姓名 學(xué)生學(xué)號(hào) 指導(dǎo)教師 2011 年 3 月 18 日
東北石油大學(xué)課程設(shè)計(jì)任務(wù)書
課程 題目 單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 交通燈管理電路設(shè)計(jì) 電信 07-5 姓名 馬深慧 學(xué)號(hào) 070901140505 專業(yè)班級(jí)
一、設(shè)計(jì)目的: 訓(xùn)練學(xué)生綜合運(yùn)用己學(xué)課程的基本知識(shí),獨(dú)立進(jìn)行單片機(jī)應(yīng)用技術(shù)開發(fā)工作,掌握單片機(jī)程序設(shè)計(jì)、調(diào)試,應(yīng)用電路設(shè)計(jì)、分析及調(diào)試檢測(cè)。
二、設(shè)計(jì)要求: 1.應(yīng)用 MCS-51 單片機(jī)設(shè)計(jì)交通燈管理電路; 2.該系統(tǒng)要求顯示 50s 倒計(jì)時(shí)時(shí)間,當(dāng)計(jì)到需交換紅綠燈前 10s,路口均顯示黃燈; 3.硬件設(shè)計(jì)根據(jù)設(shè)計(jì)的任務(wù)選定合適的單片機(jī),根據(jù)控制對(duì)象設(shè)計(jì)接口電路。設(shè)計(jì)的 單元電路必須有工作原理,器件的作用,分析和計(jì)算過程; 4.軟件設(shè)計(jì)根據(jù)電路工作過程,畫出軟件流程圖,根據(jù)流程圖編寫相應(yīng)的程序,進(jìn)行 調(diào)試并打印程序清單; 5.原理圖設(shè)計(jì)根據(jù)所確定的設(shè)計(jì)電路,利用 Protel 等有關(guān)工具軟件繪制電路原理圖、PCB 板圖、提供元器件清單。
三、參考資料: [1] 單片微型計(jì)算機(jī)與接口技術(shù),李群芳、黃建編著,電子工業(yè)出版社; [2] 單片機(jī)原理及應(yīng)用,張毅剛編著,高等教育出版社; [3] 51 系列單片機(jī)及 C51 程序設(shè)計(jì),王建校,楊建國(guó)等編著,科學(xué)出版社; [4] 單片機(jī)原理及接口技術(shù),李朝青編著,北京航空航天大學(xué)出版社;
完成期限 指導(dǎo)教師 專業(yè)負(fù)責(zé)人 2011.3.14—2011.3.18 2011 年 3 月 13 日
目錄
1.系統(tǒng)設(shè)計(jì) 1.系統(tǒng)設(shè)計(jì) ?? 1 1.1 設(shè)計(jì)思路 ?? 1 1.1.1 設(shè)計(jì)目的?? 1 1.1.2 設(shè)計(jì)任務(wù)和內(nèi)容?? 1 1.1.3 方案比較、設(shè)計(jì)與論證?? 1 1.1.3.1 電源提供方案 ?? 1 1.1.3.2 復(fù)位方案 ?? 2 1.1.3.3 輸入方案 ?? 2 1.1.3.4 顯示界面方案 ?? 2 1.1.3.5 交通管理的方案論證 ?? 4 1.1.4 芯片簡(jiǎn)介?? 4 2.硬件電路設(shè)計(jì) 2.硬件電路設(shè)計(jì) ?? 10 2.1 設(shè)計(jì)原理分析 ?? 11 2.1.1 交通燈顯示時(shí)序的理論分析與計(jì)算?? 11 2.1.2 交通燈顯示時(shí)間的理論分析與計(jì)算?? 13 2.1.3LED 數(shù)碼管顯示模塊?? 14 2.1.4 復(fù)位電路?? 15 2.1.5 晶振電路?? 16 3.軟件設(shè)計(jì) 3.軟件設(shè)計(jì) ?? 17 3.1 數(shù)碼管顯示子程序: ?? 17 3.1LED 紅綠燈顯示模塊程序: ?? 18 4.總結(jié) 4.總結(jié) ?? 21 5.參考文獻(xiàn) 5.參考文獻(xiàn) ?? 22 6.附錄 6.附錄 ?? 22 6.1 附錄 1:程序清單 ?? 22 6.2 附錄 2:電路設(shè)計(jì)總圖 ?? 29 1.系統(tǒng)設(shè)計(jì)
1.1 設(shè)計(jì)思路 1.1.1 設(shè)計(jì)目的 訓(xùn)練學(xué)生綜合運(yùn)用己學(xué)課程的基本知識(shí),獨(dú)立進(jìn)行單片機(jī)應(yīng)用技 術(shù)開發(fā)工作,掌握單片機(jī)程序設(shè)計(jì)、調(diào)試,應(yīng)用電路設(shè)計(jì)、分析及調(diào) 試檢測(cè)。1.1.2 設(shè)計(jì)任務(wù)和內(nèi)容 1.應(yīng)用 MCS-51 單片機(jī)設(shè)計(jì)交通燈管理電路; 2.該系統(tǒng)要求顯示 50s 倒計(jì)時(shí)時(shí)間,當(dāng)計(jì)到需交換紅綠燈前 10s,路口均顯示黃燈; 3.硬件設(shè)計(jì)根據(jù)設(shè)計(jì)的任務(wù)選定合適的單片機(jī),根據(jù)控制對(duì)象 設(shè)計(jì)接口電路。設(shè)計(jì)的單元電路必須有工作原理,器件的作用,分析 和計(jì)算過程; 4.軟件設(shè)計(jì)根據(jù)電路工作過程,畫出軟件流程圖,根據(jù)流程圖 編寫相應(yīng)的程序,進(jìn)行調(diào)試并打印程序清單; 5.原理圖設(shè)計(jì)根據(jù)所確定的設(shè)計(jì)電路,利用 Protel 等有關(guān)工具軟 件繪制電路原理圖、PCB 板圖、提供元器件清單。1.1.3 方案比較、設(shè)計(jì)與論證 1.1.3.1 電源提供方案 為使模塊穩(wěn)定工作,須有可靠電源,采用單片機(jī)控制模塊提供電 源。此方案的優(yōu)點(diǎn)是系統(tǒng)簡(jiǎn)明扼要,節(jié)約成本; 缺點(diǎn)是輸出功率不高。1 1.1.3.2 復(fù)位方案 復(fù)位方式有兩種:按鍵復(fù)位與軟件復(fù)位。由考慮到程序的簡(jiǎn)潔,避免冗長(zhǎng),本設(shè)計(jì)采用按鍵復(fù)位,在芯片的復(fù)位端口外接復(fù)位電路,通過按鍵對(duì)單片機(jī)輸入一個(gè)高電平脈沖,達(dá)到復(fù)位的目的。1.1.3.3 輸入方案 方案一: 采用 89S52 擴(kuò)展 I/O 口及鍵盤,顯示等。該方案的優(yōu)點(diǎn)是: 使用靈活可編程,并且有 RAM,及計(jì)數(shù)器。若用該方案,可提供較多 I/O 口,但操作起來稍顯復(fù)雜。
方案二: 直接在 I/O 口線上接上按鍵開關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡(jiǎn)和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用 2 個(gè)按鍵,分別是 K1、K2。由于該系統(tǒng)對(duì)于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的 I/O 口 就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及 RAM 已經(jīng)夠用,故選擇方案二 1.1.3.4 顯示界面方案 該系統(tǒng)要求完成倒計(jì)時(shí)、狀態(tài)燈等功能。基于上述原因,我們考 慮了三種方案: 方案一: 2 完全采用數(shù)碼管顯示。這種方案只顯示有限的符號(hào)和數(shù)碼字符,無法勝任題目要求。方案二: 完全采用點(diǎn)陣式 LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量 的軟件工作; 但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形。方案三: 采用數(shù)碼管與點(diǎn)陣 LED(點(diǎn)陣式和 8 段式 LED)相結(jié)合的方法因 為設(shè)計(jì)既要求倒計(jì)時(shí)數(shù)字輸出,又要求有狀態(tài)燈輸出等,為方便觀看 并考慮到現(xiàn)實(shí)情況,用數(shù)碼管與 LED 燈分別顯示時(shí)間與提示信息。這 種方案既滿足系統(tǒng)功能要求,又減少了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。權(quán)衡利弊,第三種方案可互補(bǔ)一二方案的優(yōu)缺,決定采用方案三以實(shí)現(xiàn)系統(tǒng)的顯 示功能。整個(gè)設(shè)計(jì)以 AT89S52 單片機(jī)為核心,由數(shù)碼管顯示,數(shù)碼管顯示, LED 復(fù)位電路組成。硬件模塊入圖所示: AT89S52 單 片機(jī)
數(shù)碼管顯示 LED 數(shù)碼管 晶振電路 顯示
復(fù)位電路 3 1.1.3.5 交通管理的方案論證 東西、南北兩干道交于一個(gè)十字路口,各干道有一組紅、黃、綠 三色的指示燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮 允許通行。黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換,且黃燈燃 亮?xí)r間為東西、南北兩干道的公共停車時(shí)間。指示燈燃亮的方案如下 表所示: 40S 10S 40S 10S ??
東 西 紅 燈 黃 燈 綠 燈 黃 燈 ?? 道 亮 亮 亮 亮
南 北 綠 燈 黃 燈 紅 燈 黃 燈 ?? 道 亮 亮 亮 亮 上表說明:(1)當(dāng)東西方向?yàn)榧t燈,此道車輛禁止通行,東西道行人可通 過;南北道為綠燈,此道車輛通過,行人禁止通行。時(shí)間 為 40 秒。(2)黃燈 10 秒,警示車輛和行人紅、綠燈的狀態(tài)即將切換。(3)當(dāng)東西方向?yàn)榫G燈,此道車輛通行;南北方向?yàn)榧t燈,南 北道車輛禁止通過,行人通行。時(shí)間為 40 秒。(4)這樣如上表的時(shí)間和紅、綠、黃出現(xiàn)的順序依次出現(xiàn)這樣 行人和車輛就能安全暢通的通行。1.1.4 芯片簡(jiǎn)介 1.AT89S52 單片機(jī)簡(jiǎn)介 4 其引 DIP 封裝的腳圖如下:
主要性能: 與 MCS-51 單片機(jī)產(chǎn)品兼容、8K 字節(jié)在系統(tǒng)可編程 Flash 存 儲(chǔ)器、1000 次擦寫周期、全靜態(tài)操作:0Hz~33Hz、三級(jí)加 密程序存儲(chǔ)器、32 個(gè)可編程 I/O 口線、三個(gè) 16 位定時(shí)器/計(jì) 數(shù)器 八個(gè)中斷源、全雙工 UART 串行通道、低功耗空閑和掉電 模式、掉電后中斷可喚醒、看門狗定時(shí)器、雙數(shù)據(jù)指針、掉 電標(biāo)識(shí)符。功能特性描述: 5 At89s52 是一種低功耗、高性能 CMOS8 位微控制器,具有 8K 在系統(tǒng)可編程 Flash 存儲(chǔ)器。使用 Atmel 公司高密度非 易失性 存儲(chǔ)器技術(shù)制造,與工業(yè) 80C51 產(chǎn)品指令和引腳完 全兼容。片 上 Flash 允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在 單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng) 可編程 Flash,使得 AT89S52 為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決 方案。AT89S52 具有以下標(biāo)準(zhǔn)功能: 8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè) 16 位 定時(shí)器/計(jì)數(shù)器,一個(gè) 6 向量 2 級(jí)中斷結(jié)構(gòu),全雙工串行口,片 內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至 0Hz 靜態(tài)邏 輯操作,支持 2 種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允 許 RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式 下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直 到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可 編程 Flash AT89S52 P0 口:P0 口是一個(gè) 8 位漏極開路的雙向 I/O 口。作為輸出 口,每位能驅(qū)動(dòng) 8 個(gè) TTL 邏輯電平。對(duì) P0 端口寫“1”時(shí),引腳 用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也被作為低 8 位 地址/數(shù)據(jù)復(fù)用。在這種模式下: P0 具有內(nèi)部上拉電阻。6 在 flash 編程時(shí),口也用來接收指令字節(jié); P0 在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。P1 端口寫“1”時(shí),對(duì) 內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入 使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)此外,P1.0 和 P1.2 分別作定時(shí)器/計(jì)數(shù)器 2 的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器 2 的觸發(fā)輸入(P1.1/T2EX),具體如 下表所示。在 flash 編程和校驗(yàn)時(shí),P1 口接收低 8 位地址字節(jié)。引腳號(hào)第二功能 P1.0 T2(定時(shí)器/計(jì)數(shù)器 T2 的外部計(jì)數(shù)輸入),時(shí)鐘輸出 P1.1 T2EX(定時(shí)器/計(jì)數(shù)器 T2 的捕捉/重載觸發(fā)信號(hào)和方向 控制)P1.5 MOSI(在系統(tǒng)編程用)P1.6 MISO(在系統(tǒng)編程用)P1.7 SCK(在系統(tǒng)編程用)P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。P2 端口寫“1”時(shí),對(duì) 內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入 7 使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲(chǔ)器或用 16 位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX @DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng) 用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送 1。在使用 8 位地址(如 MOVX @RI)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),P2 口輸出 P2 鎖存器的內(nèi)容。在 flash 編程和校驗(yàn)時(shí),P2 口也接收高 8 位地址字節(jié)和一些 控制信號(hào)。P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。P3 端口寫“1”時(shí),對(duì) 內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入 使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3 口亦作為 AT89S52 特殊功能(第二功能)使用,如下表所 示。在 flash 編程和校驗(yàn)時(shí),P3 口也接收一些控制信號(hào)。端口引腳 第二功能 P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 INTO(外中斷 0)P3.3 INT1(外中斷 1)P3.4 TO(定時(shí)/計(jì)數(shù)器 0)8 P3.5 T1(定時(shí)/計(jì)數(shù)器 1)P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)此外,P3 口還接收一些用于 FLASH 閃存編程和程序校驗(yàn)的控 制信號(hào)。RST——復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST 引腳出現(xiàn)兩個(gè)機(jī)器 周期以上高電平將是單片機(jī)復(fù)位。ALE/PROG——當(dāng)訪問外部程存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地 址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節(jié)。一般情況下,ALE 仍以時(shí)鐘振蕩頻率的 1/6 輸出固定的脈沖信號(hào),因此它可對(duì) 外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存 儲(chǔ)器時(shí)將跳過一個(gè) ALE 脈沖。對(duì) FLASH 存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對(duì)特殊功能寄存器(SFR)區(qū)中的 8EH 單元 的 D0 位置位,可禁止 ALE 操作。該位置位后,只有一條 MOVX 和 MOVC 指令才能將 ALE 激活。此外,該引腳會(huì)被微弱拉高,單片機(jī) 執(zhí)行外部程序時(shí),應(yīng)設(shè)置 ALE 禁止位無效。PSEN——程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀 選通信號(hào),當(dāng) AT89C52 由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次 PSEN 有效,即輸出兩個(gè)脈沖,在此期間,當(dāng)訪 問外部數(shù)據(jù)存儲(chǔ)器,將跳過兩次 PSEN 信號(hào)。9 EA/VPP——外部訪問允許,欲使 CPU 僅訪問外部程序存儲(chǔ)器(地址為 0000H-FFFFH),EA 端必須保持低電平(接地)。需注 意的是:如果加密位 LB1 被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存 EA 端狀態(tài)。如 EA 端為高電平(接 Vcc 端),CPU 則執(zhí)行內(nèi)部程序存儲(chǔ)器 的指令。FLASH 存儲(chǔ)器編程時(shí),該引腳加上+12V 的編程允許電源 Vpp,當(dāng)然這必須是該器件是使用 12V 編程電壓 Vpp。
2.硬件電路設(shè)計(jì)
復(fù)位
晶振源 AT89S52 各路口紅綠燈 LED 倒計(jì)時(shí)顯示 10 2.1 設(shè)計(jì)原理分析 2.1.1 交通燈顯示時(shí)序的理論分析與計(jì)算 對(duì)于一個(gè)交通路口來說,能在最短的時(shí)間內(nèi)達(dá)到最大的車流量,就 算是達(dá)到了最佳的性能,我們稱在單位時(shí)間內(nèi)多能達(dá)到的最大車流 為車流量,用公式:車流量= 車流 / 時(shí)間 來表示。先設(shè)定一些標(biāo)號(hào)如圖 2-1 所示。
說明: 此圖為直方圖,上邊為北路口燈,右邊為東路口燈,下邊為南路 口燈,左邊為西路口燈。圖 2-2 所示為一種紅綠燈規(guī)則的狀態(tài)圖,分別設(shè)定為 S1、S2、S3、S4,交通燈以這四的狀態(tài)為一個(gè)周期,循環(huán)執(zhí)行(見圖 2-3)。11 圖 2-1 請(qǐng)注意圖 2-1b 和圖 2-1d,它們?cè)谝粋€(gè)時(shí)間段中四個(gè)方向都可以通 車,這種狀態(tài)能在一定的時(shí)間內(nèi)達(dá)到較大的車流量,效率特別高。依據(jù)上述的車輛行駛的狀態(tài)圖,可以列出各個(gè)路口燈的邏輯表,由于 相向的燈的狀態(tài)圖是一樣的,所以只需寫出相鄰路口的燈的邏輯表; 根據(jù)圖 2-3 可以看出,相鄰路口的燈它們的狀態(tài)在相位上相差 180°。因此最終只需寫出一組 S1、S2、S3、S4 的邏輯狀態(tài)表。如表 2-1 所示。12 表 2-1 表中的“×”代表是紅燈亮(也代表邏輯上的 0),“√”是代表綠 燈亮(也代表邏輯上的 1),依上表,就可以向相應(yīng)的端口送邏輯值。
2.1.2 交通燈顯示時(shí)間的理論分析與計(jì)算 東西和南北方向的放行時(shí)間的長(zhǎng)短是依據(jù)路口的各個(gè)方向平時(shí)的車 13 流量來設(shè)定,并且 S1、S2、S3、S4 各個(gè)狀態(tài)保持的時(shí)間之有嚴(yán)格的 對(duì)應(yīng)關(guān)系,其公式如下示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據(jù)上述的標(biāo)準(zhǔn)來改變車輛的放行時(shí)間。按照一般的規(guī)則,一個(gè)十字路口可分為主干道和次干道,主干道的放行時(shí)間大于次干道 的放行時(shí)間,我們?cè)O(shè)定值時(shí)也應(yīng)以此為參考 2.1.3LED 數(shù)碼管顯示模塊(1)靜態(tài)顯示方式:靜態(tài)顯示方式是指當(dāng)顯示器顯示某一字符時(shí),發(fā) 光二極管的位選始終被選中。在這種顯示方式下,每一個(gè) LED 數(shù)碼管 顯示器都需要一個(gè) 8 位的輸出口進(jìn)行控制。由于單片機(jī)本身提供的 I/O 口有限,實(shí)際使用中,通常通過擴(kuò)展 I/O 口的形式解決輸出口數(shù) 量不足的問題。靜態(tài)顯示主要的優(yōu)點(diǎn)是顯示穩(wěn)定,在發(fā)光二極管導(dǎo)通電流一定的情況 下顯示器的亮度大,系統(tǒng)運(yùn)行過程中,在需要更新顯示內(nèi)容時(shí),CPU 才去執(zhí)行顯示更新子程序,這樣既節(jié)約了 CPU 的時(shí)間,又提高了 CPU 的工作效率。其不足之處是占用硬件資源較多,每個(gè) LED 數(shù)碼管需要 獨(dú)占 8 條輸出線。隨著顯示器位數(shù)的增加,需要的 I/O 口線也將增加。(2)動(dòng)態(tài)顯示方式:動(dòng)態(tài)顯示方式是指一位一位地輪流點(diǎn)亮每位顯示 器(稱為掃描),即每個(gè)數(shù)碼管的位選被輪流選中,多個(gè)數(shù)碼管公用 14 一組段選,段選數(shù)據(jù)僅對(duì)位選選中的數(shù)碼管有效。對(duì)于每一位顯示器 來說,每隔一段時(shí)間點(diǎn)亮一次。顯示器的亮度既與導(dǎo)通電流有關(guān),也 與點(diǎn)亮?xí)r間和間隔時(shí)間的比例有關(guān)。通過調(diào)整電流和時(shí)間參數(shù),可以 既保證亮度,又保證顯示。若顯示器的位數(shù)不大于 8 位,則顯示器的 公共端只需一個(gè) 8 位 I/O 口進(jìn)行動(dòng)態(tài)掃描(稱為掃描口),控制每位 顯示器所顯示的字形也需一個(gè) 8 位口(稱為段碼輸出)。15 2.1.4 復(fù)位電路 復(fù)位方式有多種,本設(shè)計(jì)采用按鍵復(fù)位。接線圖如圖程序復(fù)位 電路框圖
在設(shè)定的定時(shí)時(shí)間內(nèi),89S52 必須在 RST 引腳產(chǎn)生一個(gè)由高到低 的電平變化,以清內(nèi)部定時(shí)器.2.1.5 晶振電路 晶振電路原理圖如 3-2: 3-2 晶振模塊原理圖 選取原則:傳統(tǒng)做法,但能夠?qū)崿F(xiàn)所需,即最簡(jiǎn)單也最是實(shí)用。電容選取 30pF,晶振為 30MHz。16 3.軟件設(shè)計(jì)
3.1 數(shù)碼管顯示子程序: void normalPageShow(){ register unsigned char i, j, n;register long lTmp;unsigned char const SEG_CODE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};unsigned char const COMM[2] = {0x01, 0x02, 0x04, 0x08};for(i = 0;i < 2;i ++){ lTmp = gnValue;n = lTmp((lTmp / 10)* 10);P2 = COMM[i];P0 = SEG_CODE[n];P2 = COMM[i + 2];P0 = SEG_CODE[n];lTmp /= 10;} } main(void){ EA = 0;// global interrupt disable 26 giSysStatus = 0;initMCU();EA = 1;while(1){ if(gbFlag_1sPeriod){ gbFlag_1sPeriod = 0;gnValue-= 1;gbFlag_refreshLED = 1;if(gnValue == 10){ dsY1 = 0;dsY2 = 0;} if(gnValue == 0){ if(dsR1 == 0){ dsR1 = 1;dsR2 = 0;dsG1 = 0;dsG2 = 1;dsY1 = 0;dsY2 = 0;} else{ 27 //刷新 LED dsR1 = 0;dsR2 = 1;dsG1 = 1;dsG2 = 0;dsY1 = 0;dsY2 = 0;} } } if(gbFlag_refreshLED){ gbFlag_refreshLED = 0;normalPageShow();} } } 28 6.2 附錄 2:電路設(shè)計(jì)總圖 29 東北石油大學(xué)課程設(shè)計(jì)成績(jī)?cè)u(píng)價(jià)表
課程名稱 題目名稱 學(xué)生姓名 序號(hào) 馬深慧 評(píng)價(jià)項(xiàng)目 工作量、工作態(tài) 1 度和出勤率 學(xué)號(hào)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 交通燈管理電路設(shè)計(jì) 070901140505 指 指導(dǎo)教 師姓名 標(biāo) 職稱 滿分 評(píng)分
按期圓滿的完成了規(guī)定的任務(wù),難易程度和工作 量符合教學(xué)要求,工作努力,遵守紀(jì)律,出勤率 高,工作作風(fēng)嚴(yán)謹(jǐn),善于與他人合作。課程設(shè)計(jì)選題合理,計(jì)算過程簡(jiǎn)練準(zhǔn)確,分析問 20 2 課程設(shè)計(jì)質(zhì)量
題思路清晰,結(jié)構(gòu)嚴(yán)謹(jǐn),文理通順,撰寫規(guī)范,圖表完備正確。45 3 4 總分 評(píng)語:
創(chuàng)新 答辯
工作中有創(chuàng)新意識(shí),對(duì)前人工作有一些改進(jìn)或有 一定應(yīng)用價(jià)值。能正確回答指導(dǎo)教師所提出的問題。5 30 指導(dǎo)教師:
****年**月**日 30 1