版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)?;疽螅海?)利用單片機(jī)的定時(shí)器定時(shí),令十字路口的紅綠燈交替點(diǎn)亮和熄滅。 (2)可通過按鍵對(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è)定的將要寫入的顯示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 ;開cpu開中斷 ;-w
4、ait: lcall getkey ;讀鍵盤 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 ;讀鍵盤 cjne a,#0ffh,wkey1;無鍵輸入,則再讀 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 ;讀鍵盤 cjne a,#0ffh,wkey2;無鍵輸入則再讀 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 ;通過標(biāo)志位來判斷交通燈當(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 ;置鍵盤掃描速率 movx dptr,a mov a,#ledcls ;清除led 顯示 movx dptr,a pop acc ;恢復(fù)現(xiàn)場(chǎng) pop dpl pop dph ret;-getkey: ;讀取鍵盤子程序 ;輸入: 無; 輸出: 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)志(無鍵輸入) 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國際貨物貿(mào)易傭金支付與信用保險(xiǎn)合同3篇
- 2025年度外語培訓(xùn)機(jī)構(gòu)學(xué)員出國留學(xué)準(zhǔn)備合同3篇
- 2025年度英語夏令營(yíng)英語課程教材研發(fā)合同3篇
- 2024年版企業(yè)核心人員保密義務(wù)協(xié)議版B版
- 物流部工作計(jì)劃
- 2024年中小企業(yè)科技研發(fā)項(xiàng)目合作協(xié)議3篇
- 做好工作計(jì)劃7篇
- 小區(qū)垃圾分類調(diào)查報(bào)告
- 作文教學(xué)計(jì)劃
- 環(huán)保企業(yè)2022年終總結(jié)
- 中央企業(yè)人工智能應(yīng)用場(chǎng)景案例白皮書(2024年版)-中央企業(yè)人工智能協(xié)同創(chuàng)新平臺(tái)
- 江蘇省蘇州市2024-2025學(xué)年第一學(xué)期八年級(jí)歷史期末模擬卷(二)(含答案)
- 杜瓦瓶充裝操作規(guī)程(3篇)
- 安全管理體系與措施
- 中小學(xué)期末家長(zhǎng)會(huì)24
- 2024年學(xué)校意識(shí)形態(tài)工作總結(jié)樣本(5篇)
- 2025版國家開放大學(xué)法學(xué)本科《國際私法》歷年期末紙質(zhì)考試多項(xiàng)選擇題題庫
- 梅花鹿養(yǎng)殖基地建設(shè)項(xiàng)目可行性研究報(bào)告
- 《面向生鮮食品配額優(yōu)化的時(shí)間序列數(shù)據(jù)分析與應(yīng)用》
- 網(wǎng)球俱樂部合伙合同模板
- 基礎(chǔ)化學(xué) 藥用基礎(chǔ)化學(xué)(1) 無機(jī)化學(xué) 分析化學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評(píng)論
0/150
提交評(píng)論