單片機(jī)交通信號(hào)燈模擬系統(tǒng)設(shè)計(jì)_第1頁(yè)
單片機(jī)交通信號(hào)燈模擬系統(tǒng)設(shè)計(jì)_第2頁(yè)
單片機(jī)交通信號(hào)燈模擬系統(tǒng)設(shè)計(jì)_第3頁(yè)
單片機(jī)交通信號(hào)燈模擬系統(tǒng)設(shè)計(jì)_第4頁(yè)
單片機(jī)交通信號(hào)燈模擬系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于單片機(jī)的交通信號(hào)燈模擬系統(tǒng)設(shè)計(jì)主要內(nèi)容:利用單片機(jī)中的定時(shí)器、io接口、中斷系統(tǒng)等資源,設(shè)計(jì)一個(gè)十字路口交通信號(hào)燈的控制模擬系統(tǒng)。基本要求:(1)利用單片機(jī)的定時(shí)器定時(shí),令十字路口的紅綠燈交替點(diǎn)亮和熄滅。 (2)可通過(guò)按鍵對(duì)紅綠燈點(diǎn)亮和熄滅時(shí)間進(jìn)行調(diào)整及設(shè)置。(3)能對(duì)紅綠燈點(diǎn)亮和熄滅時(shí)間進(jìn)行倒計(jì)時(shí)時(shí)間顯示。提高部分:(4)可進(jìn)行緊急或特殊情況的人工處理控制。(5)有內(nèi)部24小時(shí)鐘,可根據(jù)時(shí)間表對(duì)對(duì)紅綠燈點(diǎn)亮和熄滅時(shí)間進(jìn)行自動(dòng)調(diào)整。(如高峰期:7:30-8:30,17:00-18:30或夜間時(shí)段紅綠燈主次干道時(shí)長(zhǎng)比等)。(6)可根據(jù)交通流量自動(dòng)調(diào)整對(duì)紅綠燈點(diǎn)亮和熄滅時(shí)間。程序:z8279

2、equ 0ff82h ;8279 狀態(tài)/命令口地址d8279 equ 0ff80h ;8279 數(shù)據(jù)口地址ledmod equ 00h ;左邊輸入八位字符顯示 ;外部譯碼鍵掃描方式,雙鍵互鎖ledfeq equ 2fh ;掃描速率ledcls equ 0c1h ;清除顯示ramledwr0 equ 80h ;設(shè)定的將要寫(xiě)入的顯示ram地址readkb equ 40h ;讀fifo ram 地址0 的命令字;-org 0000hljmp start org 0003h ljmp emergency org 000bh ;定時(shí)器中斷的入口地址 ljmp counter org 0040hstart

3、: mov sp,#60h lcall init8279 ;初始化 movtmod,#01h movtl0,#056h ;50ms時(shí)間常數(shù) movth0,#4ch movr2,#20 ;設(shè)置循環(huán)次數(shù)20次,定時(shí)1s mov r3,#1 mov 20h,#5mov 21h,#2 mov r6,#06h ;時(shí) mov r1,#59h ;分 mov r0,#45h ;秒 mov r7,#00h ;交通燈狀態(tài)選擇 setb et0 ;允許定時(shí)器中斷, setb tr0 ;啟動(dòng)t0 setb ex0 ;允許外部中斷中斷 setb it0 ;外部中斷為電平觸發(fā)方式 setb ea ;開(kāi)cpu開(kāi)中斷 ;-w

4、ait: lcall getkey ;讀鍵盤(pán) cjne a,#0ffh,cont ;判斷是否有鍵輸入 mov a,b cjne a,#3ch,key_b ;輸入鍵是'c',轉(zhuǎn)clear_t lcall clear_tkey_b: cjne a,#3bh,key_a ;輸入鍵是'b',轉(zhuǎn)set_t lcall set_t key_a: ;輸入鍵是'a',轉(zhuǎn)start_t cjne a,#3ah,key_e lcall start_tkey_e: ;輸入鍵是'e',進(jìn)行高峰處理,調(diào)整時(shí)間 cjne a,#3eh,key_f mov 2

5、0h,#10 ;紅綠燈時(shí)間為10s key_f: cjne a,#3fh,key_d ;輸入是'f',進(jìn)行低峰處理,調(diào)整時(shí)間mov 20h,#3key_d: cjne a,#3dh,cont ;輸入是'd',進(jìn)行常態(tài)處理,調(diào)整時(shí)間mov 20h,#5cont: lcall display ;顯示時(shí)間 sjmp wait ;循環(huán)clear_t: ;時(shí)間清零 clr tr0 mov r3,#0h mov r6,#0h ;時(shí) mov r1,#0h ;分 mov r0,#0h ;秒 lcall display retstart_t: ;電子鐘計(jì)時(shí)子程序 setb tr0

6、 retset_t: ;設(shè)置初值子程序 clr tr0 ;關(guān)計(jì)數(shù)器 mov r4,#1 lcall getword ;讀秒數(shù) cjne a,#0ffh,invalid ;判斷輸入合法性 mov a,b add a,#156 jc invalid ;判斷輸入秒值<100 mov a,b cjne r7,#01h,t1 ;若為狀態(tài)1,保存輸入值 mov 20h,a mov r3,20h lcall display t1: cjne r7,#02h,t2 ;若為狀態(tài)2,保存輸入值 mov 21h,a mov r3,21h lcall displayt2: cjne r7,#03h,t3 ;若為

7、狀態(tài)3,保存輸入值 mov 20h,a mov r3,20h lcall displayt3: cjne r7,#00h,t4 ;若為狀態(tài)4,保存輸入值 mov 21h,a mov r3,21h lcall displayt4: setb tr0retinvalid: lcall clear_t ;時(shí)間清零 ;-getword: ;讀數(shù)子程序 wkey1: lcall getkey ;讀鍵盤(pán) cjne a,#0ffh,wkey1;無(wú)鍵輸入,則再讀 mov a,b add a,#0c6h jc error1 ;判斷輸入是否大于 mov a,b subb a,#30h jc error1 ;判斷輸

8、入是否小于 mov r5,a lcall disled ;顯示輸入的字符 mov b,#10 mul ab push acc ;保存輸入的值 wkey2: lcall getkey ;讀鍵盤(pán) cjne a,#0ffh,wkey2;無(wú)鍵輸入則再讀 mov a,b add a,#0c6h ;判斷輸入是否大于 jc error2 mov a,b subb a,#30h ;判斷輸入是否小于 jc error2 dec r4 mov r5,a lcall disled ;顯示輸入的字符 mov b,a pop acc add a,b mov b,a ;把得到的值存在b mov a,#0ffh ;置合法輸

9、入標(biāo)志 ajmp keyokerror2: pop accerror1: mov a,#0 ;置非法輸入標(biāo)志keyok: ret ;-;定時(shí)器的中斷服務(wù)程序counter: ;int_t0中斷服務(wù)子程序 push acc ;保護(hù)現(xiàn)場(chǎng) push psw clrtr0 movtl0,#056h ;重新設(shè)置初值movth0,#4chlcall display ;1s時(shí)間到,顯示當(dāng)前倒計(jì)時(shí)的時(shí)間djnz r2,return1mov r2,#20hcjne r0,#59h,second;判斷秒=59 mov r0,#99h cjne r1,#59h,minute;判斷分=59 mov r1,#99h c

10、jne r6,#23h,hour ;判斷時(shí)=23 mov r6,#99hhour: mov a,r6 add a,#1 ;時(shí)加1 da a mov r6,aminute: mov a,r1 add a,#1 ;分加1 da a mov r1,asecond: mov a,r0 add a,#1 ;秒加1 da a mov r0,a cjne r6,#5h,turn ljmp turnturn: lcall display1 mov a,r7 ;顯示交通燈的狀態(tài)subb a,#02hjnc l3 cjne r7,#00h,l2 ;通過(guò)標(biāo)志位來(lái)判斷交通燈當(dāng)前的狀態(tài) djnz r3,return c

11、jne r6,#5h,sh mov 20h,#10 mov 21h,#3 sh: jc sh1mov 20h,#10mov 21h,#3cjne r6,#7h,sh1mov 20h,#5mov 21h,#2sh1: jc sh2mov 20h,#5mov 21h,#2sh2: mov r3,20h mov dptr,#8300h ;南北綠燈,東西紅燈 mov a,#96h movx dptr,a mov r7,#01h ;設(shè)置交通燈狀態(tài)標(biāo)志為下一個(gè)狀態(tài) sjmp returnreturn1:ljmp returnl2: djnz r3,return mov r3,21h mov dptr,#8

12、300h ;南北黃燈,東西紅燈 mov a,#06h movx dptr,a mov r7,#02h sjmp return l3: cjne r7,#02h,l4 djnz r3,return mov r3,20h mov dptr,#8300h ;南北紅燈,東西綠燈 mov a,#69h movx dptr,a mov r7,#03h sjmp return l4: djnz r3,return mov r3,21h mov dptr,#8300h ;南北紅燈,東西黃燈 mov a,#09h movx dptr,a mov r7,#00h return: setb tr0 pop psw

13、;恢復(fù)現(xiàn)場(chǎng) pop acc reti;-emergency: push psw ;保護(hù)現(xiàn)場(chǎng) push acc mov dptr,#8300h mov a,#0fh ;南北,東西都亮紅燈 movx dptr,a mov r3,#10 lcall display setb tr0 ;啟動(dòng)定時(shí)器 pop acc ;恢復(fù)現(xiàn)場(chǎng) pop psw reti;-init8279: ;8279初始化子程序 push dph ;保存現(xiàn)場(chǎng) push dpl push acc lcall delay ;延時(shí) mov dptr ,#z8279 mov a,#ledmod ;置工作方式 movx dptr,a mov a

14、,#ledfeq ;置鍵盤(pán)掃描速率 movx dptr,a mov a,#ledcls ;清除led 顯示 movx dptr,a pop acc ;恢復(fù)現(xiàn)場(chǎng) pop dpl pop dph ret;-getkey: ;讀取鍵盤(pán)子程序 ;輸入: 無(wú); 輸出: b: 讀到的鍵碼a: 按鍵的標(biāo)志 push dph ;保存現(xiàn)場(chǎng) push dpl push psw mov dptr,#z8279 movx a,dptr ;讀狀態(tài) anl a,#07h ;屏蔽d7-d3 jnz getval ;判斷是否有鍵輸入 mov a,#0h ;置標(biāo)志(無(wú)鍵輸入) sjmp recovergetval: mov a

15、,#readkb ;讀fifo ram 命令 movx dptr,a mov dptr,#d8279 movx a,dptr ;讀鍵 anl a,#3fh ;屏蔽shift 和ctrl 鍵 mov dptr,#keycode;鍵碼表起始地址 movc a,a+dptr ;查表 mov b,a ;置返回鍵值 mov a,#0ffh ;置標(biāo)志(有鍵輸入)recover: pop psw ;恢復(fù)現(xiàn)場(chǎng) pop dpl pop dph ret;-disled: ;顯示字符子程序 ;輸入: r4,位置r5,值 push dph ;保存現(xiàn)場(chǎng) push dpl push acc mov a,#ledwr0 ;

16、置顯示起始地址 add a,r4 ;加位置偏移量 mov dptr,#z8279 movx dptr,a ;設(shè)定顯示位置 mov dptr,#ledseg ;置顯示常數(shù)表起始位置 mov a,r5 movc a,a+dptr ;查表 mov dptr,#d8279 movx dptr,a ;顯示數(shù)據(jù) pop acc ;恢復(fù)現(xiàn)場(chǎng) pop dpl pop dph ret;-delay: ;延時(shí)子程序 push 0 ;保存現(xiàn)場(chǎng) push 1 mov 0,#0hdelay1: mov 1,#0h djnz 1,$ djnz 0,delay1 pop 1 ;恢復(fù)現(xiàn)場(chǎng) pop 0 ret;-display

17、1: mov a,r6 anl a,#0fh add a,#10h mov r5,a mov r4,#6 lcall disled ;顯示小時(shí)低位 mov a,r6 swap a anl a,#0fh mov r5,a mov r4,#7 lcall disled ;顯示小時(shí)高位 mov a,r1 anl a,#0fh add a,#10h mov r5,a mov r4,#4 lcall disled ;顯示分鐘低位 mov a,r1 swap a anl a,#0fh mov r5,a mov r4,#5 lcall disled ;顯示分鐘高位 mov a,r0 anl a,#0fh a

18、dd a,#10h mov r5,a mov r4,#2 lcall disled ;顯示秒低位 mov a,r0 swap a anl a,#0fh mov r5,a mov r4,#3 lcall disled ;顯示秒高位 retdisplay: mov a,r3 mov b,#10 div ab mov r5,b mov r4,#0 lcall disled ;顯示秒低位 mov r5,a mov r4,#1 lcall disled ;顯示秒高位 ret;- ;led顯示常數(shù)表ledseg: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;'0,1,2,3,4,5,6,7' db 7fh,6fh,77h,7ch,39h,5eh,79h,71h ;'8,9,a,b,c,d,e,f' db 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,087h ;'0.,1.,2.,3.,4.,5

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論