單片機(jī)交通燈實(shí)訓(xùn)報(bào)告.doc
《單片機(jī)交通燈實(shí)訓(xùn)報(bào)告.doc》由會員分享,可在線閱讀,更多相關(guān)《單片機(jī)交通燈實(shí)訓(xùn)報(bào)告.doc(19頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
機(jī)電工程學(xué)院課程設(shè)計(jì)報(bào)告 課程名稱: 單片機(jī)課程設(shè)計(jì) 專業(yè)班級: 13電本2班 學(xué) 號: 2013041632 學(xué)生姓名: 羅 煒 指導(dǎo)教師: 王清輝、何文豐 完成時(shí)間: 報(bào)告成績: 評閱意見: 評閱教師 日期 交通燈設(shè)計(jì) 一、設(shè)計(jì)任務(wù)與要求 設(shè)計(jì)基本要求: (1)車輛通行繁忙的十字交叉路口,設(shè)計(jì)一交通燈控制器,設(shè)東西方向通行時(shí)間為30秒,當(dāng)剩余3秒時(shí)黃燈亮,南北方向通行時(shí)間為20秒,當(dāng)剩余3秒時(shí)黃燈亮。 (2)東西、南北方向各用三個(gè)(綠、黃、紅)LED表示,并用數(shù)碼管顯示東西、南北方向的剩余時(shí)間。 (3)可利用按鍵修改時(shí)間參數(shù),可以利用按鍵切換東西南北交通燈的當(dāng)前狀態(tài)(即立刻東西由紅變綠,南北有綠變紅,并按設(shè)定的時(shí)間工作)。 2、 方案設(shè)計(jì)與論證 交通燈的工作方式及狀態(tài)設(shè)計(jì): 狀態(tài) 東西 南北 通行時(shí)間 注 紅黃綠 紅黃綠 1、東西綠燈南北紅燈 110 011 27秒(時(shí)間可設(shè)) 交通燈從狀態(tài)1至4不斷循環(huán),通過外設(shè)按鈕實(shí)現(xiàn)狀態(tài)1和3的切換 2、東西黃燈南北紅燈 101 011 3秒(黃燈閃爍) 3、東西紅燈南北綠燈 011 110 17秒(時(shí)間可設(shè)) 4、東西紅燈南北黃燈 011 101 3秒(黃燈閃爍) 表2-1:交通燈的工作狀態(tài)表 根據(jù)表2-1所示可將交通燈的工作狀態(tài)設(shè)為以下幾個(gè)步驟: 1、初始狀態(tài)時(shí)即為東西方向綠燈通行27秒+3秒黃燈,此時(shí)南北紅燈亮。 2、隨后是南北方向綠燈通行17秒+3秒黃燈,此時(shí)東西紅燈亮。 3、通過按模式選擇鍵一次來切換東西南北交通燈的當(dāng)前狀態(tài)。(通過設(shè)置定時(shí)計(jì)時(shí)器T1實(shí)現(xiàn)交通燈的計(jì)時(shí)) 4、通過按模式選擇鍵第二次切換至南北方向紅綠燈的計(jì)時(shí)設(shè)置,通過加減按鍵來確定南北方向紅綠燈的計(jì)時(shí)數(shù)。 5、確定南北方向計(jì)數(shù)值后,通過按模式選擇鍵第三次切換至東西方向紅綠燈的計(jì)時(shí)設(shè)置,通過加減按鍵來確定東西方向紅綠燈的計(jì)時(shí)數(shù)。 6、確定交通燈計(jì)時(shí)數(shù)后再按下模式選擇鍵后,交通燈便進(jìn)入工作狀態(tài)。 時(shí)間計(jì)時(shí)的實(shí)現(xiàn):采用定時(shí)中斷實(shí)現(xiàn)秒的精確計(jì)時(shí)(詳細(xì)方案入下列程序設(shè)計(jì)所示)。 按鍵輸入的實(shí)現(xiàn):通過編寫按鍵讀取函數(shù),來實(shí)現(xiàn)交通燈的狀態(tài)以及時(shí)間值得設(shè)定(詳細(xì)方案入下列程序設(shè)計(jì)所示)。 圖2-1程序設(shè)計(jì)流程框圖 3、 硬件電路設(shè)計(jì) 1、 倒計(jì)時(shí)顯示 該系統(tǒng)要求完成倒計(jì)時(shí)的功能。因只需顯示數(shù)字,基于上述原因,我完全采用數(shù)碼管顯示,四個(gè)路口分別采用一個(gè)二位共陰極數(shù)碼管即可。 2、 狀態(tài)燈顯示 該系統(tǒng)要求完成狀態(tài)燈顯示的功能。采用紅綠黃三種LED燈一個(gè)路口只需三個(gè)個(gè)狀態(tài)燈,綠燈通行,紅燈停止,黃燈閃爍。 3、 輸入方案 該系統(tǒng)要求能手動改變東西與南北的通行時(shí)間、紅綠燈狀態(tài)緊急交換處理。運(yùn)用單片機(jī)中四個(gè)IO口設(shè)置三個(gè)按鍵,三個(gè)按鍵的功能分別為:增加、減少、狀態(tài)切換和暫停。 4、復(fù)位電路與晶振電路 復(fù)位電路:復(fù)位方式有多種,本設(shè)計(jì)采用按鍵復(fù)位。接線圖如圖3-1所示, 當(dāng)按下復(fù)位按鍵時(shí),RST端產(chǎn)生高電平,使單片機(jī)復(fù)位。復(fù)位后,其片內(nèi)各寄存器狀態(tài)改變,片內(nèi)RAM內(nèi)容不變。 晶振電路(如圖3-2所示):結(jié)合單片機(jī)內(nèi)部產(chǎn)生單片機(jī)所需的時(shí)鐘頻率。 圖3-1程序仿真接線圖 圖3-2程序仿真接線圖 5、 AT89S51的簡介 AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,AT89S51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。 圖3-3程序仿真接線圖 4、 軟件設(shè)計(jì) 根據(jù)設(shè)計(jì)要求得完整的交通燈程序源代碼包含有:1.定時(shí)2.數(shù)碼管顯示3.LED狀態(tài)切換.4按鍵讀取。 #include "reg51.h" #define uint unsigned int #define uchar unsigned char uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示數(shù)組 uchar T0_Count=0,East_time=0,North_time=0;//定時(shí)變量,東西倒計(jì)時(shí)變量,南北倒計(jì)時(shí)變量 sbit DXD_Red=P3^0; //東西方向紅燈 sbit DXD_Yellow=P3^1; //東西方向黃燈 sbit DXD_Green=P3^2; //東西方向綠燈 sbit NBD_Red=P3^3; //南北方向紅燈 sbit NBD_Yellow=P3^4; //南北方向黃燈 sbit NBD_Green=P3^6; //南北方向綠燈 sbit DXKZ_GE=P2^4; //東西方向個(gè)位數(shù)碼管公共端 sbit DXKZ_SHI=P2^5; //東西方向十位數(shù)碼管公共端 sbit NBKZ_GE=P2^6; //南北方向個(gè)位數(shù)碼管公共端 sbit NBKZ_SHI=P2^7; //南北方向十位數(shù)碼管公共端 sbit Key_Add=P1^1; //增加按鍵 sbit Key_Dec=P1^2; //減少按鍵 sbit Key_OK=P1^3; //確定按鍵,兼具狀態(tài)切換 sbit LE=P1^0; void delayms(uint i) //毫秒級延時(shí) { uint x,y; for(x=i;x>0;x--) for(y=110;y>0;y--); } void t0_init() { TMOD=0X01; //16位定時(shí)器0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; //定時(shí)50ms ET0=1; //開啟中斷1 EA=1; //開啟總中斷 TR0=1; //開啟定時(shí)器0 } void state1() //東西綠燈亮,南北紅燈亮 { DXD_Red=1; DXD_Yellow=1; DXD_Green=0; NBD_Red=0; NBD_Yellow=1; NBD_Green=1; } void state2() //東西黃燈閃爍 { DXD_Red=1; DXD_Yellow=0; DXD_Green=1; } void state3() //東西紅燈亮,南北綠燈亮 { DXD_Red=0; DXD_Yellow=1; DXD_Green=1; NBD_Red=1; NBD_Yellow=1; NBD_Green=0; } void state4() //南北黃燈閃爍 { NBD_Red=1; NBD_Yellow=0; NBD_Green=1; } void Display(uchar num1,num2) // 功能:數(shù)碼管掃描顯示函數(shù) //參數(shù):num1,東西方向數(shù)碼管顯示值;num2,南北方向數(shù)碼管顯示值 { P0=num[num1%10];//LE=1;LE=0; //寫入個(gè)位數(shù) DXKZ_GE=0;delayms(10); //開啟一個(gè)數(shù)碼管公共端,顯示一段時(shí)間 DXKZ_GE=1; //關(guān)閉公共端 P0=num[num1/10];//LE=1;LE=0; //寫入十位數(shù) DXKZ_SHI=0;delayms(10); DXKZ_SHI=1; P0=num[num2%10];//LE=1;LE=0; //寫入個(gè)位數(shù) NBKZ_GE=0;delayms(10); NBKZ_GE=1; P0=num[num2/10];//LE=1;LE=0; //寫入十位數(shù) NBKZ_SHI=0;delayms(10); NBKZ_SHI=1; } uchar key_read() //功能:按鍵讀取 參數(shù):back,1,按下增加按鍵;2,減少按鍵;3確定鍵 { uchar back=0; if(P1!=0xff) { delayms(10); //按鍵延時(shí)消抖 if(Key_Add==0) back=1; else if(Key_Dec==0) back=2; else if(Key_OK==0) back=3; while(P1!=0xff); } return back; } void Clear_Display() //關(guān)閉所有數(shù)碼管顯示 { P0=0x00;//LE=1;LE=0; DXKZ_GE=1; DXKZ_SHI=1; NBKZ_GE=1; NBKZ_SHI=1; } void main() { uchar Tab=1,key,East_TimeNum=30,North_TimeNum=20; t0_init(); Clear_Display(); //開機(jī)初始化關(guān)閉所有數(shù)碼管 //設(shè)置東西方向倒計(jì)時(shí) while(key!=3) //按下確定鍵,退出while { key=key_read(); //按鍵讀取函數(shù) if(key==1) //按下增加按鍵 East_TimeNum++; else if(key==2) //按下減少按鍵 if(East_TimeNum>3)East_TimeNum--; Display(East_TimeNum,0); //數(shù)碼管同步顯示東西方向設(shè)定的值 } key=0; //設(shè)置南北方向倒計(jì)時(shí) while(key!=3) //按下確定鍵,退出while { key=key_read(); //按鍵讀取函數(shù) if(key==1) //按下增加按鍵 North_TimeNum++; else if(key==2) //按下減少按鍵 if(North_TimeNum>3)North_TimeNum--; Display(0,North_TimeNum); //數(shù)碼管同步顯示南北方向設(shè)定的值 } key=0; while(1) { switch(Tab) { case 1: //紅綠燈狀態(tài)1 { East_time=East_TimeNum; //填充東西倒計(jì)時(shí)值,大小為已設(shè)置好的East_TimeNum Tab=2; //切換至下一紅綠燈狀態(tài) state1(); while((East_time!=3)&&(key!=3)) //倒計(jì)時(shí)至3秒或按下切換按鍵,退出while { Display(East_time,North_time);//數(shù)碼管顯示 key=key_read(); //按鍵讀取 } if(key==3) { key=0;East_time=0; //東西倒計(jì)時(shí)立刻清零 Tab=3; //按下切換按鍵,直接跳到狀態(tài)3 } break; } case 2: //紅綠燈狀態(tài)2 { state2();Tab=3; //切換至下一紅綠燈狀態(tài) while((East_time!=0)&&(key!=3))//倒計(jì)時(shí)至0秒或按下切換按鍵,退出while { Display(East_time,North_time); key=key_read(); DXD_Yellow=~DXD_Yellow; } if(key==3) { key=0;Tab=3; //按下切換按鍵,直接跳到狀態(tài)3 East_time=0; //東西倒計(jì)時(shí)立刻清零 } break; } case 3: //紅綠燈狀態(tài)3 { North_time=North_TimeNum;Tab=4; //切換至下一紅綠燈狀態(tài) state3(); while((North_time!=3)&&(key!=3)) { Display(East_time,North_time); key=key_read(); } if(key==3) { key=0;Tab=1;North_time=0; } break; } case 4: //紅綠燈狀態(tài)4 { state4();Tab=1; //切換至下一紅綠燈狀態(tài) while((North_time!=0)&&(key!=3)) { Display(East_time,North_time); key=key_read(); NBD_Yellow=~NBD_Yellow; } if(key==3) { key=0;Tab=1;North_time=0; } break; } } } } void Timer_0() interrupt 1 { T0_Count++; TH0=(65536-50000)/256; //每50ms進(jìn)入一次中斷函數(shù) TL0=(65536-50000)%256; if(T0_Count==20) //定時(shí)20*50ms=1S { T0_Count=0; //清零重新計(jì)時(shí) if(East_time==0) East_time=0; else East_time--; //東西方向按秒間隔倒計(jì)時(shí) if(North_time==0) North_time=0; else North_time--; //南北方向按秒間隔倒計(jì)時(shí) } } 5、 仿真過程與仿真結(jié)果 運(yùn)用ISIS 7 Professional 仿真軟件進(jìn)行程序仿真,按程序要求設(shè)置好程序仿真圖(圖3-1所示),把Keil uVision4生成交通燈程序的.hex文件捎入仿真圖中,運(yùn)行結(jié)果如下: 圖5-1 東西方向通行時(shí)間設(shè)置 通加減按鍵來控制東西方向通行時(shí)間,時(shí)間設(shè)置好后按下確定鍵切換至下一個(gè)狀態(tài)。 圖5-2 南北方向通行時(shí)間設(shè)置 通加減按鍵來控制南北方向通行時(shí)間,時(shí)間設(shè)置好后按下確定鍵切換至下一個(gè)狀態(tài)。 圖5-3 紅綠燈正常工作狀態(tài) 交通燈進(jìn)入正常工作狀態(tài),按下確定鍵緊急切換紅綠燈狀態(tài) 圖5-4 紅綠燈緊急切換 6、 安裝與調(diào)試 將所設(shè)計(jì)的程序?qū)懭雓eil4的工程中,編寫好程序且檢測無誤后,點(diǎn)擊編譯(project/rebuild all target files)生成.Hex文件。通過PZ-ISP軟件(圖6-1所示)將.hex文件下載到AT89C51單片機(jī)。檢測與調(diào)試交通燈運(yùn)行狀況。由于電路板焊接問題,硬件功能無法實(shí)現(xiàn),切換到開發(fā)板上進(jìn)行功能測試。 圖6-1 PZ-ISP程序下載軟件 操作1:將hex文件捎入單片機(jī)后,交通燈便進(jìn)入東西方向計(jì)時(shí)設(shè)定狀態(tài),通過按鍵的加減來改變東西通行時(shí)間(圖6-2所示),設(shè)定好時(shí)間后按確定鍵,進(jìn)入操作2。 圖6-2 程序的初始狀況以及東西通行時(shí)間的調(diào)試 操作2:交通燈進(jìn)入南北方向計(jì)時(shí)設(shè)定狀態(tài)后,通過按鍵的加減來改變南北通行時(shí)間(圖6-3所示),設(shè)定好時(shí)間后按確定鍵,進(jìn)入操作2。 圖6-3 狀態(tài)切換至南北通行時(shí)間的調(diào)試 操作3:交通燈各個(gè)方向計(jì)時(shí)設(shè)定好后進(jìn)入工作狀態(tài),通過確定按鍵,來緊急切換紅綠燈狀態(tài)。再次按下確定鍵,便進(jìn)入操作1狀態(tài)。 圖6-4 交通燈的工作狀態(tài)以及紅綠燈狀態(tài)的緊急切換 經(jīng)安裝與調(diào)試后得,所設(shè)計(jì)的程序符合交通燈的設(shè)計(jì)要求。 硬件實(shí)物圖 7、 結(jié)論與心得 結(jié)論:雖然所設(shè)計(jì)的交通燈符合本次實(shí)訓(xùn)的所有有要求,但還是有很多不足之處,要把我所設(shè)計(jì)的交通燈與實(shí)際中的交通燈相比還是有很多缺陷的,比如缺少各個(gè)方向左拐通行的指示功能,缺少人行橫道的交通指示功能。針對上述不足之處,在今后的學(xué)習(xí)中會不斷的加以完善。 心得:通過本次實(shí)訓(xùn)使我明白了,單片機(jī)實(shí)訓(xùn)跟單片機(jī)實(shí)驗(yàn)完全不同,自身的不足之處在這次實(shí)訓(xùn)中都一一暴露出來了,對于單片機(jī)的了解還是不夠的,完全只停留在表面,對于單片機(jī)深層次的知識掌握的不夠,無法很靈活的使用單片機(jī)的各個(gè)語句,這些不足之處在實(shí)訓(xùn)的操作下和老師的考察下都顯露無疑。在今后的學(xué)習(xí)中我定會加強(qiáng)對單片機(jī)的理論與實(shí)際操作的學(xué)習(xí),對于自身不足之處定會加以改正。 八、參考文獻(xiàn) [1] 閻石《數(shù)字電子技術(shù)基礎(chǔ)(第三版)》,北京:高等教育出版社,1989。 [2] 蘇家健,曹柏榮,汪志鋒.《單片機(jī)原理及應(yīng)用技術(shù)》.北京:高等教育出社, 2004. [3] 《單片機(jī)原理及應(yīng)用》 張毅剛,高等教育出版社。 [4]《單片機(jī)實(shí)驗(yàn)教程》彭冬明、韋友春,北京理工大學(xué)出版社。- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單片機(jī) 交通燈 報(bào)告
鏈接地址:http://www.hcyjhs8.com/p-6466747.html