數理與信息工程學院
課 程 設 計
題 目: 路口燈火控制及顯示系統設計
專 業(yè): 計算機科學與技術
班 級: 056班
姓 名: *** 學號:***
成 績:
目 錄
第1節(jié) 引 言……………………………………………………………………… 3
1. 1路口燈火控制及顯示系統概述…………………………………………3
1.2設計任……………………………………………3
1. 3 系統主要功能 ………………………………………………………… 3
第2節(jié)口燈火控制及顯示系統硬件設計…………………………………………… 4
2.1系統的硬件構成及功能 …………………………………4
2.2 設計中用到的芯片及其功能………………………………………………… 6
2.2.1 8279芯片的說明 ………………………………………………… 6
2.2.2 其它器件的說明 ………………………………………………… 7
2.2.3 其它器件的說明 ………………………………………………… 7
第3節(jié) 系統軟件設計 …………………………………………… 9
3.1 系統主程序設計 ………………………………………………… 9
3.1.1程序框圖及說明 ………………………………………………… 9
3.2顯示子程序及說明 ……………………………………………… 11
3. 3延時子程序的計算 ……………………………………………… 12
3. 4各鍵的功能 ……………………………………………… 12
第4節(jié) 結束語 …………………………………………………… 13
參考文獻 ………………………………………………………………14
源程序 ………………………………………………………………………………15
路口燈火控制及顯示系統
第1節(jié) 引 言
隨著經濟的不斷發(fā)展,越來越多的汽車進入普通老百姓家中,使得人們的生活質量不斷提高,但是另一方面也容易引起交通堵塞,因此應在車輛通行繁忙的十字交叉路口設置的燈火控制系統來控制交通。單片機具有體積小、功能強可靠性高、價格低廉等一系列優(yōu)點,不僅已成為工業(yè)測控領域普遍采用的智能化控制工具,而且已滲入到人們工作和和生活的各個角落,有力地推動了各行業(yè)的技術改造和產品的更新換代,應用前景廣闊。隨著電子技術的迅速發(fā)展,特別是隨大規(guī)模集成電路出現,給人類生活帶來了根本性的改變。因此利用單片機來控制十字交叉路口設置的燈火及顯示有關提醒信息。
1.1 路口燈火控制及顯示系統概述
本系統是車輛通行繁忙的十字交叉路口設置的燈火控制及顯示系統,其特點是:道路較窄而車輛通行較多,支線、干線的車輛通行時間不等,并設有左右彎道通行時間,允許人工監(jiān)控或修改各線通行時間,同時設有道路應急控制。16X16點陣LED液晶器可隨著按鍵的不同,顯示的內容也不相同。
1.2 設計任務
(1)干道:左右彎道:占時5秒。顯示如上圖所示的第四位;直道:占時35秒,顯示如上圖所示的高兩為。
(2)支道:左右彎道;占時5秒,顯示如上圖所示的二三位;直道:占時25秒,顯示如上圖所示的第0位。
(3)同時的幾位燈在直道時那位亮,在彎道時那位亮。
(4)在綠燈轉紅燈時,閃爍3次,變黃延時五秒變紅燈。
(5)按一個按鍵K1時,顯示為雨天小心。
(6)按一個按鍵K2時,顯示為一路順風。
1.3 系統主要功能
其主要功能有:在正常的情況下,干道通行時間為40秒,其中左右彎道占時5秒,直道通行時間為25秒,其中左右彎道占時5秒,直道占時20秒。并且能夠在人工監(jiān)控狀態(tài)下,干道、支道通行時間通過鍵盤修改或通過開關人為控制。在下雨天,則按“K1”鍵,16X16點陣LED液晶器顯示“雨天小心”。在晴天,則按“K2”鍵,顯示“一路順風”。
第二節(jié)
路口燈火控制及顯示系統硬件設計
燈火控制系統的硬件設計以MCS-51單片機為主控器,包括一個擴展存儲器(這里用的是32K的6264型號的EEPROM、 一個25鍵鍵盤、I/O口的擴展(8255)、地址的鎖存(74LS373或74LS273)、還有反向器(7407)、8X8點陣LED液晶器4塊、4~16線譯碼器74LS154一塊、三極管S8050和S8550各16根、4.7KΩ電阻32根、二個8255A芯片、還有十二盞指示燈。
2.1 系統的硬件構成及功能
(1)硬件設計(硬件結構圖如下圖所示)
圖 2
16X16點陣LED液晶顯示電路:
硬件系統在該系統中的作用主要是進行數據的傳送,有關邏輯的計算,并且提供顯示,人為的進行數據的修改,系統的啟動,停止等等。此外系統運行的安全可靠性要靠硬件系統來實現。
硬件系統的設計還應滿足以下原則:
(1) 滿足系統的設計要求,易于操作維護。
(2) 系統功能靈活,便于擴展。
(3) 具有自動診斷功能。
硬件系統的設計主要包括下面的工作:
a:擴展存儲器:本系統設計中用到的是6264EPROM即可做程序存儲器又可做數據存儲器。它跟2個74LS373地址鎖存器相連,用到A0——A14共15根地址線,所以他的尋址范圍0——7FFFH。
b .配置25鍵鍵盤,其中“A”為啟動鍵,B為停止鍵.擴展并行接口8255A.c鍵為修改鍵,e,f鍵人工控制鍵。在該系統中列線用到的是8279的SL經過74LS138的8根列線中的3跟Y0,Y1,Y5,行線是8279的RL8根輸出線。
2.2 設計中用到的芯片及其功能
2.2.1 8251芯片的說明
8051芯片
MCS-51系列單片機芯片均為40條引腳,HMOS工藝制造的芯片用雙列直插(DIP)方式封裝,其引腳示意及功能分類如圖1.2所示。
各引腳功能說明如下:
1. 主電源引腳
Vcc(40腳):接+5V電源正端。
Vss(20腳):接+5V電源地端。
2. 外接晶體引腳
XTAL1(19腳):接外部石英晶體的一端。在單片機內部,它是一個反相放大器的輸入端,這個放大器構成了片內振蕩器。當采用外部時鐘時,對于HMOS
單片機,該引腳接地;對于CHMOS單片機,該引腳作為外部振蕩信號的輸入端。
XTAL2(18腳):接外部石英晶體的另一端。在單片機內部,它是片內振蕩器的反相放大器的輸出端。當采用外部時鐘時,對于HMOS單片機,該引腳作為外部振蕩信號的輸入端;對于CHMOS單片機,該引腳懸空不接。
2. 輸入/輸出引腳
(1) P0口(39~32腳):P0.0~P0.7統稱為P0口。在不接片外存儲器與不擴展I/O口時,可作為準雙向輸入/輸出口。在接有片外存儲器或擴展I/O口時,P0口分時復用為低8位地址總線和雙向數據總線。
(2) P1口(1~8腳):P1.0~P1.7統稱為P1口,可作為準雙向I/O口使用。對于52子系列,P1.0與P1.1還有第二功能:P1.0可用作定時器/計數器2的計數脈沖輸入端T2,P1.1可用作定時器/計數器2的外部控制端T2EX。
(3) P2口(21~28腳):P2.0~P2.7統稱為P2口,一般可作為準雙向I/O口使用;在接有片外存儲器或擴展I/O口且尋址范圍超過256字節(jié)時,P2口用作高8位地址總線。
表2.1 P3口第二功能
引 腳 第二功能
P3.0 RXD 串行口輸入
P3.1 TXD 串行口輸出端
P3.2 INT0 外部中斷0請求輸入端,低電平有效
P3.3 INT1外部中斷1請求輸入端,低電平有效
P3.4 T0 定時器/計數器0計數脈沖輸入端
P3.5 T1 定時器/計數器1計數脈沖輸入端
P3.6 WR 外部數據存儲器寫選通信號輸入端,低電平有效
P3.7 RD 外部數據存儲器讀選通信號輸入端,低電平有效
(4) P3口(10~17腳):P3.0~P3.7統稱為P3口。除作為準雙向I/O口使用外,還可以將每一位用于第二功能,而且P3口的每一條引腳均可以獨立定義為第一功能的輸入輸出或第三功能。P3口的第二功能如表2.1所示。
4. 控制線
(1) ALE/PROG(30腳):地址鎖存有效信號輸入端。ALE在每個機器周期內輸出兩個脈沖。在訪問片外程序存儲器期間,下降沿用于控制鎖存P0輸出的低8位地址;在不訪問片外程序存儲器期間,可作為對外輸出的時鐘脈沖或用于定時目的。但要注意,在訪問片外數據存儲器期間,ALE脈沖會跳空一個,此時作為時鐘輸出就不妥了。
對于片內含有EPROM的機型,在編程期間,該引腳用作編程脈沖PROG的輸入端。
(2) PSEN(29腳):片外程序存儲器讀選通信號輸出端,低電平有效。當從外部程序存儲器讀取指令或常數期間,每個機器周期該信號兩次有效,以通過數據總線P0口讀回指令或常數。在訪問片外數據存儲器期間,PSEN信號將不再出現。
(3) RST/VPD引腳(9腳):RST即為RESET,VPD為備用電源。該引腳為單片機的上電復位或掉電保護端。當單片機振蕩器工作時,該引腳上出現持續(xù)兩個機器周期的高電平,就可實現復位操作,使單片機回復到初始狀態(tài)。上電時,考慮到振蕩器有一定的起振時間,該引腳上高電平必須持續(xù)10ms以上才能保證有效復位。
當Vcc發(fā)生故障,降低到低電平規(guī)定值或掉電時,該引腳可接上備用電源VPD(+5V)為內部RAM供電,以保證RAM中的數據不丟失。
(4)EA/Vpp(31腳):EA為片外程序存儲器選用端。該引腳有效(低電平)時,只選用片外程序存儲器,否則單片機上電或復位后選用片內程序存儲器。
對于片內含有EPROM的機型,在編程期間,此引腳用作21V編程電源Vpp的輸入端。
綜上所述,MCS-51系列單片機的引腳可歸納為以下兩點:
(1) 單片機功能多,引腳數少,因而許多引腳都有第二功能。
(2) 單片機對外呈現3總線形式,由P2、P0口組成16位地址總線;由P0
口分時復用為數據總線;由ALE、PSEN、RST、EA與P3口中的INT0、INT1、T0、T1、WR、RD共10個引腳組成控制總線,如圖2.1(b)所示。由于是16位地址線,因此,可使片外存儲器的尋址范圍達到64KB。
2.2.2 8279芯片的說明
該芯片為一種專用的鍵盤顯示器接口芯片,能對顯示器進行自動掃描,能自動識別鍵盤的鍵號,大大減輕了CPU的負擔。在這個系統中它主要的作用是形成鍵盤,顯示器。提供人工控制的物理系統。
8279的組成:數據緩沖器,I/O控制邏輯,控制和定時寄存器及定時與控制電路,掃描計數器,回復
緩沖器,鍵盤去抖動及控制電路,FIFO/傳感器RAM及其狀態(tài)寄存器,顯示RAM及顯示地址寄存器等組成。
8279的結構及引腳功能:
8279的內部結構由數據緩沖器,I/O控制邏輯,控制和定時器及定時控制電路,掃描計數器,回復緩沖器,鍵盤去抖動及控制電路,FIFO/傳感器RAM及其狀態(tài)寄存器,顯示RAM及顯示地址寄存器等部分組成.
(1)數據緩沖器及I/O控制邏輯 數據緩沖器是一個雙向緩沖器,它連接內部總線和外部總線,用于傳送CPU和8279之間的命令,數據和狀態(tài).I/O控制邏輯完成對芯片的讀寫控制,芯片選擇以及端口選擇.
(2)控制和定時器及定時用來寄存操作命令字.
(3)掃描計數器 掃描計數器有兩種工作方式.一種為外部譯碼方式.計數器以二進制方式計數,4位計數狀態(tài)從掃描線SL0-SL3輸出,經外部譯碼器譯碼后,形成16位掃描信號;另一種為內部譯碼方式.該方式下,掃描計數器的低二位經內部譯碼后從SL0-SL3輸出,形成4位掃描信號.
(4)回復緩沖器,鍵盤去抖動及控制電路 回復緩沖器緩沖并鎖存來自SL0-SL7八根回復線的回復信號.
(5)FIFO/傳感器RAM及其狀態(tài)寄存器 FIFO/傳感器RAM是一個雙重功能的8*8RAM.
(6)顯示RAM及顯示地址寄存器 顯示RAM用來存儲顯示數據,容量為16*8位.在顯示過程中,存儲的顯示數據輪流從顯示寄存器輸出.
在燈火控制實驗中,它的片選信號線接Q0、數據選擇輸入線接的是Q1,所以他的控制口地址是FF82H,數據口地址是FF80H,中斷是懸空的,因為鍵盤不是中斷方式是查詢方式。
2.2.3 其它器件的說明
6264靜態(tài)RAM擴展
6264是8k的8位靜態(tài)隨機存儲器芯片.CMOS工藝制作,單一+5V供電,28腳雙列直插式封裝.額定功耗為200MW.典型存取時間為200ns.地址線為A0-A14.
74LS373地址鎖存器
74LS373地址鎖存器是透明的帶有三態(tài)門的八D鎖存器.它的鎖存控制端可直接與單片機的鎖存控制信號端ALE相連,在ALE下降沿進行地址鎖存.當三態(tài)門的使能端信號線/E為低電平時.三態(tài)門處于導通狀態(tài),允許Q端輸出;當/E端為高電平時,輸出三態(tài)門斷開.輸出端對外部電路呈高阻狀態(tài).
74.LS138譯碼器
74LS138譯碼器有3個輸入端,組成8種輸入狀態(tài),輸出端有8個,每個輸出端對應8種輸入狀態(tài)的一種,低電平有效。此外還有3個使能端E3,E2,E1,這3個使能端必須同時輸入有效電平,譯碼器才能工作,既E3=1,E2=0,E1=0。
8255可編程接口芯片
(1) 三個并行I/O口-A口,B口,C口在此設計中用到了A,B兩個口。
(2) 工作方式控制電路;
(3) 讀寫控制邏輯電路;
(4) 數據總線緩沖器;
引腳功能:CS片選信號,RD讀入信號線,WR寫入信號,A1,A0—端口選擇信號;RESET復位信號線,Vcc,GND等。
74LS240驅動器
在該系統中它是作為線驅動器起驅動作用的,它的輸入端1A1----1A4,2A1----2A4,與8279的輸出端相連,輸出端與雙色LED燈相連。其引腳圖為附件。
第3節(jié) 系統的軟件設計
在該系統的軟件設計中用到的是模塊程序設計,主要的模塊程序是鍵盤的模塊程序,它包括顯示的模塊程序,通過軟件的設計使系統有簡易的監(jiān)控功能,通過鍵盤可以修改通行時間和啟動或停止人工控制的路口燈火控制系統.
3.1 系統主程序設計
3.1.1程序框圖及說明
在本次設計中最后對鍵盤程序方案流程圖的確定如下圖所示:
在本次設計中鍵盤采用查詢方式,故在鍵盤程序的開始必須對現場進行保護,同時在查詢結束時不能影響相應程序段中在上一時刻的計數值,故在對鍵盤進行查詢完畢之后也必須能夠把正
確的返回值送給斷點,不能在此出現死循環(huán)(在調試中有此情況發(fā)生)。按照如下圖,所示框圖進行設計的調試后發(fā)現程序能夠很好的從死循環(huán)中跳出,繼續(xù)執(zhí)行其后的程序。但也必須考慮到在需要的時候不妨讓它暫時的進入到死循環(huán)狀態(tài)。比如在按下B、E、F,這三個鍵時,就必須讓程序在這里停止,不能讓它返回。圖中是讓它去繼續(xù)查詢有無別的按鍵,也就是說在這幾個鍵被按下的時候,如果沒有別的按鍵,它就一直在此等待,執(zhí)行自己相應的功能。
圖 1 初始化 圖 2 8255干通支斷程序
圖 3 8255干斷支通程序
圖 4 88255干通支斷轉換狀態(tài)程序
圖 5 中斷服務程序
3.2顯示子程序及說明
主程序在剛上電時對系統進行初始化,然后讀一次鍵開關狀態(tài),由鍵標志位決定顯示的內容。
圖 6 顯示子程序
3.3延時子程序的計算
采用寄存器R0、R1、R2作為記數值,R2中暫存1,R1中存0。當減1后變?yōu)?55即R1中存數256。R0中存數#0B2H即178。
DELAY2延時為:
N=(2+2+2+1+1+2*178)+255*(1+1+2+2*178)=9164。
共計9164個指令周期,而系統晶振為11.0592。所以t=12/11.0592=1.085(微秒)
延時DELAY2為:
T=9164*1.085/1000000=0.09996
約等于0.1(秒)
通過改變R2的值可以改變延時的秒數。
3.4各鍵的功能
各鍵功能:
在本次設計中主要定義和調用了以下幾個鍵及其功能:A、B、C、D、E和F鍵。 各鍵功能如下所示:
A鍵 用于啟動主程序,如果沒有A鍵按下,則一直處于等待狀態(tài),所有的燈在此時為黃色,主程序不被執(zhí)行。
B鍵 用于在工作過程中對程序做急停處理,在鍵B被按下的時候主程序停止不動(在此要
注意對斷點的保護問題)。直到當有別的鍵被按下時才轉至相應鍵的功能支執(zhí)行相應的程序。
C鍵 用于做對任意時段時間的修改及其處理并且能夠自動返回到該時段的初始狀態(tài)重新進行計數(此數值即修改后的數值)。
E健 用于人工控制支斷干通狀態(tài)。無別的鍵按下便一直保持該狀態(tài)。
F健 用于人工控制支通干斷狀態(tài)。無別的鍵按下便一直保持該狀態(tài)。
結束語
這次課程設計我是把交通燈與16X16 LED液晶顯示器一起聯合起來寫的,因為對這些項目不太熟悉,只是結合自已平時來寫,因此有可能不是正確的。但經過這次課程設計,雖說沒做出成品,程序的設計也是參考網絡上的資料及書上的資料,因為我是計算機專業(yè)的,本身對電子方面的器件也不太熟悉,電路設計也不是太清楚。自已從中雖說沒真正了解其真正的設計過程,但是從參考中得到一些啟示,了解到在處理一些項目時,應該從哪幾方面入手,知道哪個問題應該從哪方面下手,知道這里所使用的器件是做什么用途,為自已以后去設計相類似的項目打下基礎,增加自已在單片機方面的一些經驗。通過這次課程設計,我從中了解到原來在我們的生活中各個方面都用到了單片機,單片機影響了人們的生活,因此我們作為計算機專業(yè)的學生,應該在這方面多下些功夫,等以后有機會,去設計真正的成品。
參考文獻
[1] 范風強 蘭嬋麗,《單片機語言C51應用實戰(zhàn)集錦(修訂版)》,電子工業(yè)出版社 北京
[2] 李光飛 樓苗然, 《51系列單片機 》,北京航空航天大學出版社
[3] 潭浩強 ,《MCS-51單片機應用教程》,清華大學出版社
[4] 梁廷貴 , 《現代集成電路手冊》, 科學技術文獻出版社
源程序
Z8279 EQU 0FF82H ;8279狀態(tài)/命令口地址
D8279 EQU 0FF80H ;8279數據口地址
LEDMOD EQU 00H ;左邊輸入八位字符顯示
;外部譯碼鍵掃描方式,雙鍵互鎖
LEDFEQ EQU 2FH ;掃描速率
LEDCLS EQU 0C1H ;清除顯示RAM
LEDWR0 EQU 80H ;設定的將要寫入的顯示RAM地址
READKB EQU 40H ;讀FIFO RAM地址0的命令字
ORG 0000H
LJMP START ;主程序入口
ORG 0003H
LIMP STARTA ;開外部中斷
ORG 000BH
RETI
ORG 0013H
LIMP STARTB ;開外部中斷
顯示程序:
ORG 0000H
MOV DPTR,#8406H ;8255控制口地址
MOV A, #80H ;命令字傳入控制口
MOVX @DPTR,A
LJMP START ;開始程序
ORG 0040H
START: MOV 16H,#35 ;設定顯示秒數
MOV SP,#30H
LCALL STATUS0 ;調用初始狀態(tài)全紅燈
STARTA: MOV DPTR,#TAB1
PUSH DPH
PUSH DPL
LJMP START1
STARTB: MOV DPTR,#TAB2
PUSH DPH
PUSH DPL
LJMP START1
START: JZ P3.2,STARTA
JZ P3.3,STARTB
MOV DPTR,#TAB
LJMP START1
START1: LACALL CLEARMEN
MOV R4,#O3H ;相臨字符串之間的間隔距離
MOV R5,#40H ;1幀顯示時間控制
LJMP FUZHI
初始化程序:
CLEARMEN:MOV A,#0FFH
MOV R2,#50H
MOV DPTR, #1FFFH
MOV A, #80H
MOVX @DPTR, A
ZERO: MOV R2,A ;50H~6FH內存單元清零
INC R2
CJNE R2,#6FH,ZERO
RET
掃描子程序:
DISPLAY: MOV A,#0FFH
MOV DPTR,#1FFCH
MOVX @DPTR, A
MOV DPTR,#1FFDH
MOVX @DPTR, A ;關掃描
MOV DPTR, #1FFEH
MOVX @DPTR,A
MOV R6,#OFH ;關顯示數據
MOV R2,#6FH
DISLOOP:
MOV DPTR,#1FFDH
MOV A, R2
MOVX @DPTR,A
DEC R2
MOV A,R2
MOV DPTR,#1FFCH
MOV A, R2
MOVX @DPTR,A
MOV DPTR,#1FFEH
MOV A, R6
MOVX @DPTR,A
LCALL DL1MS ;延時程序
JZ R6,PAND ;判斷結束跳轉程序
DEC R2
DEC R6
CIRCLE:
LCALL STATUS1 ;南北綠燈東西紅燈
LCALL STATUS2 ;南北綠燈閃轉黃燈東西紅燈
LCALL STATUS3 ;南北紅燈東西綠燈
LCALL STATUS4 ;南北紅燈東西綠燈閃轉黃燈
LJMP DISLOOP
賦值程序:
FUZHI: POP DPL
POP DPH
MOV A,#00H
MOV R0,#00H
DAT1: MOV A,@A+DPTR
MOV 6FH,A
LCALL DISPLAY
判斷程序:
PAND: DJNZ R5,DISPLAY
CJNE R0,#5FH,PAND2
LJMP FUZHI2
PAND2: ACALL LEFT1
MOV A,R0
INC A
MOV R0,A
LJMP DAT1
FUZHI2: INC R4
JZ R4,START
ACALL LEFT1
LCALL DISPLAY
左移程序:
LEFT1: MOV R2,#50H
MOV A,#51H
MOV R2,A
INC R2
INC A
CJNE R2,#6FH,LEFT1
RET
延時程序:
DL1MS: MOV R7,#250 ;延時1 mS
L1: DJNZ R7,L1
RET
顯示數據表:
TAB1:DB 00H,00H,00H,00H,00H,10H,10H,0F0H ;雨
DB 10H,10H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,7FH,01H,06H,09H,7FH
DB 06H,09H,11H,21H,7FH,00H,00H,00H
DB 00H,00H,00H,00H,00H,10H,10H,0F0H ;天
DB 10H,10H,00H,00H,00H,00H,00H,00H
DB 00H,40H,20H,10H,08H,04H,02H,01H
DB 01H,02H,04H,08H,10H,20H,40H,00H
DB 00H,00H,00H,00H,80H,40H,00H,0F0H ;小
DB 00H,40H,80H,00H,00H,00H,00H,00H
DB 00H,00H,02H,01H,00H,10H,20H,3FH
DB 00H,00H,00H,02H,01H,00H,00H,00H
DB 00H,00H,80H,80H,00H,00H,00H,80H ;心
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 02H,01H,00H,00H,01H,02H,04H,06H
DB 09H,0AH,08H,08H,0AH,0DH,0AH,04H
TAB2:DB 00H,00H,00H,00H,00H,00H,00H,00H ;一
DB 00H,00H,00H,00H,00H,04H,0FFH,0FEH
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,40H,7CH,40H,44H,0FCH,45H,88H ;路
DB 46H,50H,44H,20H,7CH,50H,50H,88H
DB 13H,06H,5CH,04H,50H,0F8H,50H,88H
DB 50H,88H,5CH,88H,0E0H,0F8H,00H,88H
DB 00H,04H,47H,0FEH,54H,20H,54H,40H ;順
DB 55H,0FCH,55H,04H,55H,24H,55H,24H
DB 55H,24H,55H,24H,55H,24H,55H,24H
DB 54H,50H,44H,48H,84H,86H,01H,02H
DB 00H,10H,3FH,0F8H,20H,10H,28H,50H ;風
DB 24H,50H,22H,90H,22H,90H,21H,10H
DB 21H,10H,22H,90H,22H,90H,24H,50H
DB 28H,50H,30H,12H,40H,0AH,80H,06H
鍵盤服務程序:
FUWU00:
PUSH 11H ;保護現場
PUSH PSW
LCALL GETKEY ;判斷是否有鍵輸入
CJNE A, #0FFH, JAP0
MOV 50H, B
MOV A, 50H
CJNE A, #0BH, PADJ ;是否為B鍵
LCALL KEYB ;調用B鍵服務功能
WAIT0:
LCALL GETKEY ;等待有鍵輸入
CJNE A, #0FFH, WAIT0
MOV 50H, B
MOV A, 50H
CJNE A, #0AH, PADJ ;是否為A鍵
LCALL INIT8279 ;清屏
SJMP JAP0 ;返回斷點
PADJ:
MOV A, 50H
CJNE A, #0CH, PDJE0 ;判斷是否為C鍵
LCALL KEYC ;調用C鍵功能
LCALL KEYD ;調用D鍵功能
PDJE0:
MOV A, 50H
CJNE A, #0EH, PDJF0 ;判斷是否為E鍵
LCALL KEYE ;調用E鍵功能
PDJF0:
MOV A, 50H
CJNE A, #0FH, WAIT0 ;是否為F鍵
LCALL KEYF ;調用F鍵功能
LJMP WAIT0 ;繼續(xù)等待按鍵
JAP0:
POP PSW ;彈出堆棧
POP 11H
RET ;返回
FUWU01:
PUSH 11H
PUSH PSW
LCALL GETKEY
CJNE A, #0FFH, JAP01
MOV 50H, B
MOV A, 50H
CJNE A, #0BH, PADJ1
LCALL KEYB
WAIT01:
LCALL GETKEY
CJNE A, #0FFH, WAIT01
MOV 50H, B
MOV A, 50H
CJNE A, #0AH, PADJ1
LCALL INIT8279
MOV DPTR, #8400H
MOV A, #96H
MOVX @DPTR, A
SJMP JAP01
PADJ1:
MOV A, 50H
CJNE A, #0CH, PDJE01
LCALL KEYC
LCALL KEYD1
PDJE01:
MOV A, 50H
CJNE A, #0EH, PDJF01
LCALL KEYE
PDJF01:
MOV A, 50H
CJNE A, #0FH, WAIT01
LCALL KEYF
LJMP WAIT0
JAP01:
POP PSW
POP 11H
RET
FUWU02:
PUSH 11H
PUSH PSW
LCALL GETKEY
CJNE A, #0FFH, JAP02
MOV 50H, B
MOV A, 50H
CJNE A, #0BH, PADJ2
LCALL KEYB
WAIT02:
LCALL GETKEY
CJNE A, #0FFH, WAIT02
MOV 50H, B
MOV A, 50H
CJNE A, #0AH, PADJ2
LCALL INIT8279
SJMP JAP02
PADJ2:
MOV A, 50H
CJNE A, #0CH, PDJE02
LCALL KEYC
LCALL KEYD2
PDJE02:
MOV A, 50H
CJNE A, #0EH, PDJF02
LCALL KEYE
PDJF02:
MOV A, 50H
CJNE A, #0FH, WAIT02
LCALL KEYF
LJMP WAIT0
JAP02:
POP PSW
POP 11H
RET
FUWU03:
PUSH 11H
PUSH PSW
LCALL GETKEY
CJNE A, #0FFH, JAP03
MOV 50H, B
MOV A, 50H
CJNE A, #0BH, PADJ3
LCALL KEYB
WAIT03:
LCALL GETKEY
CJNE A, #0FFH, WAIT03
MOV 50H, B
MOV A, 50H
CJNE A, #0AH, PADJ3
LCALL INIT8279
SJMP JAP03
PADJ3:
MOV A, 50H
CJNE A, #0CH, PDJE03
LCALL KEYC
LCALL KEYD3
PDJE03:
MOV A, 50H
CJNE A, #0EH, PDJF03
LCALL KEYE
PDJF03:
MOV A, 50H
CJNE A, #0FH, WAIT01
LCALL KEYF
LJMP WAIT0
JAP03:
POP PSW
POP 11H
RET
鍵盤子程序:
KEYB:
MOV R5, #0BH ;在第七位顯示字符B
MOV R4, #06H
LCALL ERROR ;調用出錯程序
RET
KEYC:
LCALL INIT8279
MOV R5, #0CH ;在第七位顯示字符C
MOV R4, #06H
LCALL DISLED ;調用顯示
WAIT1:
LCALL GETKEY ;等待十位數據輸入
CJNE A, #0FFH, WAIT1
MOV R5, B
MOV 31H, B
MOV R4, #01H ;把數據送第二位顯示
LCALL DISLED
WAIT2:
LCALL GETKEY ;等待個位數據輸入
CJNE A, #0FFH, WAIT2
MOV R5, B
MOV 30H, B
MOV R4, #0 ;把數據送第一位顯示
LCALL DISLED
RET
KEYD:
MOV A, 31H ;對十位數據進行處理
MOV B, #10
MUL AB
MOV B, 30H
ADD A, B
MOV 16H, A ;把處理后的數據送入16H單元
AJMP CIRCLE0 ;轉到干道時間顯示
RET
KEYD1:
MOV A, 31H
MOV B, #10
MUL AB
MOV B, 30H
ADD A, B
MOV 17H, A ;處理后的數據送入17H單元
AJMP CIRCLE1 ;轉到干道的延時5S時間顯示
RET
KEYD2:
MOV A, 31H
MOV B, #10
MUL AB
MOV B, 30H
ADD A, B
MOV 18H, A ;處理后的數據送入18H單元
AJMP CIRCLE2 ;轉到支道時間顯示
RET
KEYD3:
MOV A, 31H
MOV B, #10
MUL AB
MOV B, 30H
ADD A, B
MOV 19H, A ;處理后的數據送入19H單元
AJMP CIRCLE3 ;轉到支道的延時5S時間顯示
RET
KEYE:
MOV R5, #0EH ;把字符E送到第七位顯示
MOV R4, #06H
LCALL DISLED
MOV DPTR, #8400H ;控制交通燈為南北綠,東西紅
MOV A, #96H
MOVX @DPTR, A
RET
KEYF:
MOV R5, #0FH ;把字符F送到第七位顯示
MOV R4, #06H
LCALL DISLED
MOV DPTR, #8400H ;控制交通燈為南北紅,東西綠
MOV A, #69H
MOVX @DPTR, A
RET
STATUS0:
MOV DPTR , #8400H
MOV A,#0FH
MOVX @DPTR, A
MOV R2,#10 ;延時一秒
LCALL DELAY
RET
STATUS1: ;南北綠燈東西紅燈
MOV DPTR , #8400H
MOV A,#96H
MOVX @DPTR, A
MOV 11H,16H
LCALL INIT8279 ;初始化清屏
STA1: LCALL LC ;處理并調用顯示的數據
MOV 15H,#07H ;設定顯示位數
MOV 14H,#06H
MOV R5,12H
LCALL DISPLAY ;調用顯示
MOV R5, 13H
MOV R2,#10
LCALL DELAY ;延時
LCALL FUWU ;調用鍵盤服務程序
DJNZ 11H,STA1
RET
STATUS2: ;南北綠燈閃轉黃燈東西紅燈
MOV DPTR , #8400H
MOV R3,#03H ;閃爍三次
FLASH:
MOV A,#9FH
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
MOV A,#96H
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
DJNZ R3,FLASH
MOV A,#06H
MOVX @DPTR,A
LCALL INIT8279
MOV 11H,#5 ;彎道時間
STA2: LCALL LC
MOV 14H,#4
LCALL DISPLAY
DJNZ 11H,STA2
RET
STATUS3: ;南北紅燈東西綠燈
MOV DPTR , #8400H
MOV A,#69H
MOVX @DPTR, A
MOV 11H,#25 ;設定支道時間
LCALL INIT8279
STA3: LCALL LC
MOV 15H,#03H
MOV 14H, #02H
LCALL DISPLAY
DJNZ 11H,STA3
RET
STATUS4: ;南北紅燈東西綠燈閃轉黃燈
MOV DPTR , #8400H
MOV R3,#03H
FLASH1:
MOV A,#6FH
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
MOV A,#69H
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
DJNZ R3,FLASH1
MOV A,#09H
MOVX @DPTR,A
MOV 11H,#05H
LCALL INIT8279
STA4: LCALL LC
MOV 14H,#00H ;讓該位顯示0
LCALL DISPLAY
DJNZ 11H,STA4
RET
INIT8279: ;初始化
MOV DPTR,#Z8279
MOV A,#LEDMOD
MOVX @DPTR,A
MOV A,#LEDFEQ
MOVX @DPTR,A
MOV A,#LEDCLS
MOVX @DPTR,A
LCALL DELAY
RET
DISLED: ;顯示字符子程序
PUSH DPH
PUSH DPL
PUSH ACC
MOV A,#LEDWR0
ADD A,R4
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV DPTR,#LEDSEG
MOV A,R5
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
DELAY: ;延時程序
PUSH 0 ;延時100ms
PUSH 1
PUSH 2
DELAY1: MOV 1,#0H
DELAY2:MOV 0,#0B2H
DJNZ 0,$
DJNZ 1,DELAY2
DJNZ 2,DELAY1
POP 2
POP 1
POP 0
RET
DISPLAY: ;顯示字符程序
MOV R5,12H ;存高位
MOV R4,15H ;顯高位
LCALL DISLED
MOV R5,13H
MOV R4,14H
LCALL DISLED
; MOV R2,#10
; LCALL DELAY
;MOV R5,#00H
;MOV R4,14H
;LCALL DISLED
RET
LC: MOV A, 11H ;處理將要顯示的數據
MOV B,#0AH
DIV AB
MOV 12H,A
MOV 13H,B
RET
ERROR: LCALL STATUS0 ;顯示急停子程序
MOV R5,#10H
MOV R4,#05H
LCALL DISLED
MOV R5,#11H
MOV R4,#04H
LCALL DISLED
MOV R5,#12H
MOV R4,#03H
LCALL DISLED
MOV R5,#13H
MOV R4,#02H
LCALL DISLED
RET
|