|
這是我的實(shí)驗(yàn),
交通燈控制的,
平時(shí)都是東西南北交替20s,
異常60s,
是自己一點(diǎn)一點(diǎn)寫的,
請大家多多指教
實(shí)驗(yàn)一:交通燈控制實(shí)驗(yàn)
實(shí)驗(yàn)學(xué)時(shí):2;實(shí)驗(yàn)類型:驗(yàn)證 ;實(shí)驗(yàn)要求:必做
一、實(shí)驗(yàn)?zāi)康?br />
1. 了解51單片機(jī)芯片的引腳及編程特點(diǎn)。
2. 熟悉匯編及C語言編寫程序的方法。
3. 掌握定時(shí)器和中斷的應(yīng)用,同時(shí)使用定時(shí)中斷和外部中斷。
4. 熟悉Keil軟件的使用方法。
5. 學(xué)會使用各類程序下載器的實(shí)用。
二、實(shí)驗(yàn)內(nèi)容
1.學(xué)習(xí)如何使用程序下載器下載程序至開發(fā)板。
2.設(shè)計(jì)C語言程序。
3.根據(jù)C語言程序結(jié)合所學(xué)知識編譯程序。
三、實(shí)驗(yàn)原理、方法和手段
用單片機(jī)設(shè)計(jì)一個(gè)十字路口交通燈模擬控制系統(tǒng),要求東西、南北兩個(gè)方向都通行20秒,警告3秒,禁止20秒,同時(shí)要考慮到東西、南北兩個(gè)方向出現(xiàn)異常情況,出現(xiàn)異常情況器該方向通行60秒。
51hei.png (16.88 KB, 下載次數(shù): 68)
下載附件
2022-11-27 22:10 上傳
四、實(shí)驗(yàn)條件
1.臺式電腦一臺,且至少要具備一個(gè)usb串行口。
2.單片機(jī)仿真實(shí)驗(yàn)板一塊
3.usb串口連接線一條
4.杜邦線若干
五、實(shí)驗(yàn)步驟
程序內(nèi)容:
主程序中實(shí)現(xiàn)交通燈正常運(yùn)行過程;
兩種異常用外中斷0和外中斷1管理,外接開關(guān)模擬異常發(fā)生;
在中斷服務(wù)程序中實(shí)現(xiàn)異常處理,在主程序中開放外中斷0和外中斷1,設(shè)置為邊沿觸發(fā)方式;
500ms信號由定時(shí)計(jì)數(shù)器0,選擇方式1,定時(shí)50ms,循環(huán)10次產(chǎn)生,定時(shí)計(jì)數(shù)器0采用查詢方式。
1.實(shí)驗(yàn)預(yù)習(xí):在實(shí)驗(yàn)前每位同學(xué)都需要對本次實(shí)驗(yàn)進(jìn)行認(rèn)真的預(yù)習(xí),學(xué)習(xí)仿真系統(tǒng)的過程,編制好相應(yīng)的實(shí)驗(yàn)程序。
2.實(shí)驗(yàn)記錄:學(xué)生記錄實(shí)驗(yàn)過程如何變化。
3.實(shí)驗(yàn)報(bào)告:畫出并分析各程序流程圖,寫出各程序主要功能能,編制各程序的替代程序。實(shí)驗(yàn)報(bào)告要獨(dú)立完成,字跡工整,圖表清晰,分析認(rèn)真全面。
八、其它說明
進(jìn)行硬件實(shí)驗(yàn)室注意連線規(guī)范,防止由于短路引起的器件損壞,所有硬件設(shè)備不可帶電插拔。
程序參考:
while(1)
{
P1=0x21; //狀態(tài)1,東西方向綠燈,南北方向紅燈20s
delay1s(40);
P1=0x41; //狀態(tài)2,東西方向黃燈,南北方向紅燈3s
delay1s(6);
P1=0x12; //狀態(tài)3,南北方向綠燈,東西方向紅燈20s
delay1s(40);
P1=0x14; //狀態(tài)4,南北方向黃燈,東西方向紅燈3s
delay1s(6);
}
}
void int_0(void) interrupt 0
{
unsigned char i1,i2;
i1=P1;
for(i2=0;i2<60;i2++)
{
P1=0x21;
delay1s(1);
P1=0x00;
delay1s(1);
}
P1=i1;
}
void int_1(void) interrupt 2
{
unsigned char j1,j2;
j1=P1;
for(j2=0;j2<60;j2++)
{
P1=0x12;
delay1s(1);
P1=0x00;
delay1s(1);
}
P1=j1;
}
//延時(shí)500ms函數(shù)
void delay1s(unsigned char m)
{
unsigned char k1,k2;
TH0=0x3C;TL0=0xB0;
TR0=1;
for (k1=0;k1<m;k1++)
{
for (k2=0;k2<10;k2++)
{
while(!TF0);
TF0=0;
TH0=0x3C;TL0=0xB0;
}
}
}
|
|