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