找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2807|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機紅綠燈系統(tǒng)設(shè)計論文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:217382 發(fā)表于 2017-7-5 16:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數(shù)理與信息工程學(xué)院
課 程 設(shè) 計
   
題    目:      路口燈火控制及顯示系統(tǒng)設(shè)計        
專    業(yè):    計算機科學(xué)與技術(shù)  
班    級:             056班                    
姓    名:   ***     學(xué)號:***         
成    績:                                 
目 錄
第1節(jié)   引 言………………………………………………………………………    3
1. 1路口燈火控制及顯示系統(tǒng)概述…………………………………………3
     1.2設(shè)計任……………………………………………3
1. 3  系統(tǒng)主要功能   …………………………………………………………     3
第2節(jié)口燈火控制及顯示系統(tǒng)硬件設(shè)計……………………………………………    4
2.1系統(tǒng)的硬件構(gòu)成及功能 …………………………………4
    2.2  設(shè)計中用到的芯片及其功能…………………………………………………    6
    2.2.1  8279芯片的說明    …………………………………………………    6
    2.2.2  其它器件的說明    …………………………………………………    7
    2.2.3  其它器件的說明    …………………………………………………    7
第3節(jié)   系統(tǒng)軟件設(shè)計        ……………………………………………        9
3.1  系統(tǒng)主程序設(shè)計         …………………………………………………     9
   3.1.1程序框圖及說明      …………………………………………………     9
3.2顯示子程序及說明         ………………………………………………      11   
3. 3延時子程序的計算           ………………………………………………     12
3. 4各鍵的功能                 ………………………………………………     12
第4節(jié) 結(jié)束語            ……………………………………………………      13
   
參考文獻 ………………………………………………………………14
源程序 ………………………………………………………………………………15
路口燈火控制及顯示系統(tǒng)
第1節(jié)  引  言
隨著經(jīng)濟的不斷發(fā)展,越來越多的汽車進入普通老百姓家中,使得人們的生活質(zhì)量不斷提高,但是另一方面也容易引起交通堵塞,因此應(yīng)在車輛通行繁忙的十字交叉路口設(shè)置的燈火控制系統(tǒng)來控制交通。單片機具有體積小、功能強可靠性高、價格低廉等一系列優(yōu)點,不僅已成為工業(yè)測控領(lǐng)域普遍采用的智能化控制工具,而且已滲入到人們工作和和生活的各個角落,有力地推動了各行業(yè)的技術(shù)改造和產(chǎn)品的更新?lián)Q代,應(yīng)用前景廣闊。隨著電子技術(shù)的迅速發(fā)展,特別是隨大規(guī)模集成電路出現(xiàn),給人類生活帶來了根本性的改變。因此利用單片機來控制十字交叉路口設(shè)置的燈火及顯示有關(guān)提醒信息。
1.1  路口燈火控制及顯示系統(tǒng)概述
本系統(tǒng)是車輛通行繁忙的十字交叉路口設(shè)置的燈火控制及顯示系統(tǒng),其特點是:道路較窄而車輛通行較多,支線、干線的車輛通行時間不等,并設(shè)有左右彎道通行時間,允許人工監(jiān)控或修改各線通行時間,同時設(shè)有道路應(yīng)急控制。16X16點陣LED液晶器可隨著按鍵的不同,顯示的內(nèi)容也不相同。
1.2  設(shè)計任務(wù)
(1)干道:左右彎道:占時5秒。顯示如上圖所示的第四位;直道:占時35秒,顯示如上圖所示的高兩為。
(2)支道:左右彎道;占時5秒,顯示如上圖所示的二三位;直道:占時25秒,顯示如上圖所示的第0位。
(3)同時的幾位燈在直道時那位亮,在彎道時那位亮。
(4)在綠燈轉(zhuǎn)紅燈時,閃爍3次,變黃延時五秒變紅燈。
(5)按一個按鍵K1時,顯示為雨天小心。
(6)按一個按鍵K2時,顯示為一路順風(fēng)。
1.3  系統(tǒng)主要功能
其主要功能有:在正常的情況下,干道通行時間為40秒,其中左右彎道占時5秒,直道通行時間為25秒,其中左右彎道占時5秒,直道占時20秒。并且能夠在人工監(jiān)控狀態(tài)下,干道、支道通行時間通過鍵盤修改或通過開關(guān)人為控制。在下雨天,則按“K1”鍵,16X16點陣LED液晶器顯示“雨天小心”。在晴天,則按“K2”鍵,顯示“一路順風(fēng)”。
第二節(jié)
路口燈火控制及顯示系統(tǒng)硬件設(shè)計
燈火控制系統(tǒng)的硬件設(shè)計以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  系統(tǒng)的硬件構(gòu)成及功能
(1)硬件設(shè)計(硬件結(jié)構(gòu)圖如下圖所示)
                                                                       
                                                         
                                                   圖 2
16X16點陣LED液晶顯示電路:
硬件系統(tǒng)在該系統(tǒng)中的作用主要是進行數(shù)據(jù)的傳送,有關(guān)邏輯的計算,并且提供顯示,人為的進行數(shù)據(jù)的修改,系統(tǒng)的啟動,停止等等。此外系統(tǒng)運行的安全可靠性要靠硬件系統(tǒng)來實現(xiàn)。
硬件系統(tǒng)的設(shè)計還應(yīng)滿足以下原則:
(1) 滿足系統(tǒng)的設(shè)計要求,易于操作維護。
(2) 系統(tǒng)功能靈活,便于擴展。
(3) 具有自動診斷功能。
硬件系統(tǒng)的設(shè)計主要包括下面的工作:
a:擴展存儲器:本系統(tǒng)設(shè)計中用到的是6264EPROM即可做程序存儲器又可做數(shù)據(jù)存儲器。它跟2個74LS373地址鎖存器相連,用到A0——A14共15根地址線,所以他的尋址范圍0——7FFFH。
b .配置25鍵鍵盤,其中“A”為啟動鍵,B為停止鍵.擴展并行接口8255A.c鍵為修改鍵,e,f鍵人工控制鍵。在該系統(tǒng)中列線用到的是8279的SL經(jīng)過74LS138的8根列線中的3跟Y0,Y1,Y5,行線是8279的RL8根輸出線。
2.2  設(shè)計中用到的芯片及其功能
2.2.1 8251芯片的說明
  8051芯片

MCS-51系列單片機芯片均為40條引腳,HMOS工藝制造的芯片用雙列直插(DIP)方式封裝,其引腳示意及功能分類如圖1.2所示。

各引腳功能說明如下:
1.        主電源引腳
Vcc(40腳):接+5V電源正端。
Vss(20腳):接+5V電源地端。
    2. 外接晶體引腳
XTAL1(19腳):接外部石英晶體的一端。在單片機內(nèi)部,它是一個反相放大器的輸入端,這個放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外部時鐘時,對于HMOS
單片機,該引腳接地;對于CHMOS單片機,該引腳作為外部振蕩信號的輸入端。
XTAL2(18腳):接外部石英晶體的另一端。在單片機內(nèi)部,它是片內(nèi)振蕩器的反相放大器的輸出端。當(dāng)采用外部時鐘時,對于HMOS單片機,該引腳作為外部振蕩信號的輸入端;對于CHMOS單片機,該引腳懸空不接。
2.        輸入/輸出引腳
    (1) P0口(39~32腳):P0.0~P0.7統(tǒng)稱為P0口。在不接片外存儲器與不擴展I/O口時,可作為準(zhǔn)雙向輸入/輸出口。在接有片外存儲器或擴展I/O口時,P0口分時復(fù)用為低8位地址總線和雙向數(shù)據(jù)總線。
    (2) P1口(1~8腳):P1.0~P1.7統(tǒng)稱為P1口,可作為準(zhǔn)雙向I/O口使用。對于52子系列,P1.0與P1.1還有第二功能:P1.0可用作定時器/計數(shù)器2的計數(shù)脈沖輸入端T2,P1.1可用作定時器/計數(shù)器2的外部控制端T2EX。
(3) P2口(21~28腳):P2.0~P2.7統(tǒng)稱為P2口,一般可作為準(zhǔn)雙向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     定時器/計數(shù)器0計數(shù)脈沖輸入端
P3.5        T1     定時器/計數(shù)器1計數(shù)脈沖輸入端
P3.6        WR    外部數(shù)據(jù)存儲器寫選通信號輸入端,低電平有效
P3.7        RD     外部數(shù)據(jù)存儲器讀選通信號輸入端,低電平有效
(4) P3口(10~17腳):P3.0~P3.7統(tǒng)稱為P3口。除作為準(zhǔn)雙向I/O口使用外,還可以將每一位用于第二功能,而且P3口的每一條引腳均可以獨立定義為第一功能的輸入輸出或第三功能。P3口的第二功能如表2.1所示。
4. 控制線
   (1) ALE/PROG(30腳):地址鎖存有效信號輸入端。ALE在每個機器周期內(nèi)輸出兩個脈沖。在訪問片外程序存儲器期間,下降沿用于控制鎖存P0輸出的低8位地址;在不訪問片外程序存儲器期間,可作為對外輸出的時鐘脈沖或用于定時目的。但要注意,在訪問片外數(shù)據(jù)存儲器期間,ALE脈沖會跳空一個,此時作為時鐘輸出就不妥了。
對于片內(nèi)含有EPROM的機型,在編程期間,該引腳用作編程脈沖PROG的輸入端。
   (2) PSEN(29腳):片外程序存儲器讀選通信號輸出端,低電平有效。當(dāng)從外部程序存儲器讀取指令或常數(shù)期間,每個機器周期該信號兩次有效,以通過數(shù)據(jù)總線P0口讀回指令或常數(shù)。在訪問片外數(shù)據(jù)存儲器期間,PSEN信號將不再出現(xiàn)。
   (3) RST/VPD引腳(9腳):RST即為RESET,VPD為備用電源。該引腳為單片機的上電復(fù)位或掉電保護端。當(dāng)單片機振蕩器工作時,該引腳上出現(xiàn)持續(xù)兩個機器周期的高電平,就可實現(xiàn)復(fù)位操作,使單片機回復(fù)到初始狀態(tài)。上電時,考慮到振蕩器有一定的起振時間,該引腳上高電平必須持續(xù)10ms以上才能保證有效復(fù)位。
當(dāng)Vcc發(fā)生故障,降低到低電平規(guī)定值或掉電時,該引腳可接上備用電源VPD(+5V)為內(nèi)部RAM供電,以保證RAM中的數(shù)據(jù)不丟失。
   (4)EA/Vpp(31腳):EA為片外程序存儲器選用端。該引腳有效(低電平)時,只選用片外程序存儲器,否則單片機上電或復(fù)位后選用片內(nèi)程序存儲器。
對于片內(nèi)含有EPROM的機型,在編程期間,此引腳用作21V編程電源Vpp的輸入端。
綜上所述,MCS-51系列單片機的引腳可歸納為以下兩點:
(1)        單片機功能多,引腳數(shù)少,因而許多引腳都有第二功能。
(2)        單片機對外呈現(xiàn)3總線形式,由P2、P0口組成16位地址總線;由P0
口分時復(fù)用為數(shù)據(jù)總線;由ALE、PSEN、RST、EA與P3口中的INT0、INT1、T0、T1、WR、RD共10個引腳組成控制總線,如圖2.1(b)所示。由于是16位地址線,因此,可使片外存儲器的尋址范圍達到64KB。
2.2.2  8279芯片的說明
該芯片為一種專用的鍵盤顯示器接口芯片,能對顯示器進行自動掃描,能自動識別鍵盤的鍵號,大大減輕了CPU的負(fù)擔(dān)。在這個系統(tǒng)中它主要的作用是形成鍵盤,顯示器。提供人工控制的物理系統(tǒng)。
8279的組成:數(shù)據(jù)緩沖器,I/O控制邏輯,控制和定時寄存器及定時與控制電路,掃描計數(shù)器,回復(fù)
緩沖器,鍵盤去抖動及控制電路,FIFO/傳感器RAM及其狀態(tài)寄存器,顯示RAM及顯示地址寄存器等組成。
8279的結(jié)構(gòu)及引腳功能:
8279的內(nèi)部結(jié)構(gòu)由數(shù)據(jù)緩沖器,I/O控制邏輯,控制和定時器及定時控制電路,掃描計數(shù)器,回復(fù)緩沖器,鍵盤去抖動及控制電路,FIFO/傳感器RAM及其狀態(tài)寄存器,顯示RAM及顯示地址寄存器等部分組成.
(1)數(shù)據(jù)緩沖器及I/O控制邏輯   數(shù)據(jù)緩沖器是一個雙向緩沖器,它連接內(nèi)部總線和外部總線,用于傳送CPU和8279之間的命令,數(shù)據(jù)和狀態(tài).I/O控制邏輯完成對芯片的讀寫控制,芯片選擇以及端口選擇.
(2)控制和定時器及定時用來寄存操作命令字.
(3)掃描計數(shù)器   掃描計數(shù)器有兩種工作方式.一種為外部譯碼方式.計數(shù)器以二進制方式計數(shù),4位計數(shù)狀態(tài)從掃描線SL0-SL3輸出,經(jīng)外部譯碼器譯碼后,形成16位掃描信號;另一種為內(nèi)部譯碼方式.該方式下,掃描計數(shù)器的低二位經(jīng)內(nèi)部譯碼后從SL0-SL3輸出,形成4位掃描信號.
(4)回復(fù)緩沖器,鍵盤去抖動及控制電路   回復(fù)緩沖器緩沖并鎖存來自SL0-SL7八根回復(fù)線的回復(fù)信號.
(5)FIFO/傳感器RAM及其狀態(tài)寄存器   FIFO/傳感器RAM是一個雙重功能的8*8RAM.
(6)顯示RAM及顯示地址寄存器   顯示RAM用來存儲顯示數(shù)據(jù),容量為16*8位.在顯示過程中,存儲的顯示數(shù)據(jù)輪流從顯示寄存器輸出.
在燈火控制實驗中,它的片選信號線接Q0、數(shù)據(jù)選擇輸入線接的是Q1,所以他的控制口地址是FF82H,數(shù)據(jù)口地址是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下降沿進行地址鎖存.當(dāng)三態(tài)門的使能端信號線/E為低電平時.三態(tài)門處于導(dǎo)通狀態(tài),允許Q端輸出;當(dāng)/E端為高電平時,輸出三態(tài)門斷開.輸出端對外部電路呈高阻狀態(tài).
74.LS138譯碼器
74LS138譯碼器有3個輸入端,組成8種輸入狀態(tài),輸出端有8個,每個輸出端對應(yīng)8種輸入狀態(tài)的一種,低電平有效。此外還有3個使能端E3,E2,E1,這3個使能端必須同時輸入有效電平,譯碼器才能工作,既E3=1,E2=0,E1=0。
8255可編程接口芯片
(1) 三個并行I/O口-A口,B口,C口在此設(shè)計中用到了A,B兩個口。
(2) 工作方式控制電路;
(3) 讀寫控制邏輯電路;
(4) 數(shù)據(jù)總線緩沖器;
引腳功能:CS片選信號,RD讀入信號線,WR寫入信號,A1,A0—端口選擇信號;RESET復(fù)位信號線,Vcc,GND等。
74LS240驅(qū)動器
    在該系統(tǒng)中它是作為線驅(qū)動器起驅(qū)動作用的,它的輸入端1A1----1A4,2A1----2A4,與8279的輸出端相連,輸出端與雙色LED燈相連。其引腳圖為附件。
第3節(jié)   系統(tǒng)的軟件設(shè)計
在該系統(tǒng)的軟件設(shè)計中用到的是模塊程序設(shè)計,主要的模塊程序是鍵盤的模塊程序,它包括顯示的模塊程序,通過軟件的設(shè)計使系統(tǒng)有簡易的監(jiān)控功能,通過鍵盤可以修改通行時間和啟動或停止人工控制的路口燈火控制系統(tǒng).
                                          
3.1  系統(tǒng)主程序設(shè)計
3.1.1程序框圖及說明
在本次設(shè)計中最后對鍵盤程序方案流程圖的確定如下圖所示:
在本次設(shè)計中鍵盤采用查詢方式,故在鍵盤程序的開始必須對現(xiàn)場進行保護,同時在查詢結(jié)束時不能影響相應(yīng)程序段中在上一時刻的計數(shù)值,故在對鍵盤進行查詢完畢之后也必須能夠把正
確的返回值送給斷點,不能在此出現(xiàn)死循環(huán)(在調(diào)試中有此情況發(fā)生)。按照如下圖,所示框圖進行設(shè)計的調(diào)試后發(fā)現(xiàn)程序能夠很好的從死循環(huán)中跳出,繼續(xù)執(zhí)行其后的程序。但也必須考慮到在需要的時候不妨讓它暫時的進入到死循環(huán)狀態(tài)。比如在按下B、E、F,這三個鍵時,就必須讓程序在這里停止,不能讓它返回。圖中是讓它去繼續(xù)查詢有無別的按鍵,也就是說在這幾個鍵被按下的時候,如果沒有別的按鍵,它就一直在此等待,執(zhí)行自己相應(yīng)的功能。
                    
                                       
          圖 1 初始化                            圖 2 8255干通支斷程序
                                    
          圖 3 8255干斷支通程序  
                                       圖 4 88255干通支斷轉(zhuǎn)換狀態(tài)程序
  
                 
圖 5 中斷服務(wù)程序
3.2顯示子程序及說明
主程序在剛上電時對系統(tǒng)進行初始化,然后讀一次鍵開關(guān)狀態(tài),由鍵標(biāo)志位決定顯示的內(nèi)容。
   
圖 6 顯示子程序
3.3延時子程序的計算
采用寄存器R0、R1、R2作為記數(shù)值,R2中暫存1,R1中存0。當(dāng)減1后變?yōu)?55即R1中存數(shù)256。R0中存數(shù)#0B2H即178。
DELAY2延時為:
N=(2+2+2+1+1+2*178)+255*(1+1+2+2*178)=9164。
共計9164個指令周期,而系統(tǒng)晶振為11.0592。所以t=12/11.0592=1.085(微秒)
延時DELAY2為:
T=9164*1.085/1000000=0.09996
約等于0.1(秒)
通過改變R2的值可以改變延時的秒數(shù)。
3.4各鍵的功能
各鍵功能:
在本次設(shè)計中主要定義和調(diào)用了以下幾個鍵及其功能:A、B、C、D、E和F鍵。        各鍵功能如下所示:
A鍵  用于啟動主程序,如果沒有A鍵按下,則一直處于等待狀態(tài),所有的燈在此時為黃色,主程序不被執(zhí)行。
B鍵  用于在工作過程中對程序做急停處理,在鍵B被按下的時候主程序停止不動(在此要
注意對斷點的保護問題)。直到當(dāng)有別的鍵被按下時才轉(zhuǎn)至相應(yīng)鍵的功能支執(zhí)行相應(yīng)的程序。
C鍵 用于做對任意時段時間的修改及其處理并且能夠自動返回到該時段的初始狀態(tài)重新進行計數(shù)(此數(shù)值即修改后的數(shù)值)。
E健 用于人工控制支斷干通狀態(tài)。無別的鍵按下便一直保持該狀態(tài)。
F健 用于人工控制支通干斷狀態(tài)。無別的鍵按下便一直保持該狀態(tài)。
結(jié)束語
這次課程設(shè)計我是把交通燈與16X16 LED液晶顯示器一起聯(lián)合起來寫的,因為對這些項目不太熟悉,只是結(jié)合自已平時來寫,因此有可能不是正確的。但經(jīng)過這次課程設(shè)計,雖說沒做出成品,程序的設(shè)計也是參考網(wǎng)絡(luò)上的資料及書上的資料,因為我是計算機專業(yè)的,本身對電子方面的器件也不太熟悉,電路設(shè)計也不是太清楚。自已從中雖說沒真正了解其真正的設(shè)計過程,但是從參考中得到一些啟示,了解到在處理一些項目時,應(yīng)該從哪幾方面入手,知道哪個問題應(yīng)該從哪方面下手,知道這里所使用的器件是做什么用途,為自已以后去設(shè)計相類似的項目打下基礎(chǔ),增加自已在單片機方面的一些經(jīng)驗。通過這次課程設(shè)計,我從中了解到原來在我們的生活中各個方面都用到了單片機,單片機影響了人們的生活,因此我們作為計算機專業(yè)的學(xué)生,應(yīng)該在這方面多下些功夫,等以后有機會,去設(shè)計真正的成品。
參考文獻
[1] 范風(fēng)強 蘭嬋麗,《單片機語言C51應(yīng)用實戰(zhàn)集錦(修訂版)》,電子工業(yè)出版社 北京
[2] 李光飛  樓苗然, 《51系列單片機        》,北京航空航天大學(xué)出版社         
[3] 潭浩強 ,《MCS-51單片機應(yīng)用教程》,清華大學(xué)出版社                                 
[4] 梁廷貴 , 《現(xiàn)代集成電路手冊》, 科學(xué)技術(shù)文獻出版社
源程序
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幀顯示時間控制
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                        ;延時程序
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
延時程序:
DL1MS:  MOV                R7,#250                ;延時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                              ;保護現(xiàn)場
        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                             ;返回斷點
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)用出錯程序
        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                                      ;等待個位數(shù)據(jù)輸入
        CJNE                 A,                #0FFH,        WAIT2
        MOV                 R5,                B
        MOV                 30H,                B
        MOV                 R4,                #0                          ;把數(shù)據(jù)送第一位顯示
     LCALL        DISLED
        RET
KEYD:      
MOV                 A,                31H                          ;對十位數(shù)據(jù)進行處理
        MOV                 B,                #10
        MUL                 AB
        MOV                 B,                30H
        ADD                 A,                B
        MOV                 16H,                A                            ;把處理后的數(shù)據(jù)送入16H單元
        AJMP                 CIRCLE0                               ;轉(zhuǎn)到干道時間顯示
        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)到干道的延時5S時間顯示
        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)到支道時間顯示
        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)到支道的延時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        ;處理并調(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     ;延時
        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          ;彎道時間
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è)定支道時間
        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:                      ;延時程序
        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         ;處理將要顯示的數(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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表