光強(qiáng)計微機(jī)設(shè)計報告_第1頁
光強(qiáng)計微機(jī)設(shè)計報告_第2頁
光強(qiáng)計微機(jī)設(shè)計報告_第3頁
光強(qiáng)計微機(jī)設(shè)計報告_第4頁
光強(qiáng)計微機(jī)設(shè)計報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《微機(jī)原理與接口技術(shù)》課程設(shè)計報告題 目學(xué) 院專 業(yè)2015 年12 月22 日電子學(xué)院通信工程目 錄1. 311.1 31.2 31.3 `` 342.18255A42.2LED72.382.4ADC080992.510123.1 123.2 143.3 15284.1 284.2 284.3 284.4 2829291.設(shè)計一個簡易的光照強(qiáng)度測量儀, 由光照強(qiáng)度產(chǎn)生的模擬電壓信號轉(zhuǎn)換為數(shù)字信號, 然后轉(zhuǎn)換為照度(單位是勒克斯)顯示在 LED上;校準(zhǔn)照度測量器:在一定的光強(qiáng)度下,產(chǎn)生 200數(shù)字量的電壓,以此對應(yīng)關(guān)系(照度—電壓)將其它光強(qiáng)度轉(zhuǎn)換為勒克斯值,顯示在 LED上。21.1題義需求分析光照強(qiáng)度測量儀主要根據(jù)光敏電阻的特性制作的。 光敏電阻值隨受到的光照強(qiáng)度的變化而變化(光照強(qiáng)度越大,電阻值越?。?。將光敏電阻接入電路中,不同光照強(qiáng)度導(dǎo)致光敏電阻值變化,于是光敏電阻上的電壓發(fā)生變化,導(dǎo)致電路的輸出電壓也相應(yīng)變化。根據(jù)電壓 -光照度函數(shù)關(guān)系,由電壓計算得到光照強(qiáng)度值,然后以可視化界面形式輸出(即PC機(jī)和LED數(shù)碼管顯示),以供用戶查看結(jié)果。其中光敏電阻的特性是光敏電阻隨受到的光照強(qiáng)度的變化電阻值發(fā)生變化, 光照強(qiáng)度越強(qiáng)電阻越小,在分壓電路中獲得電壓越低。 根據(jù)這一特性,結(jié)合光照強(qiáng)度和輸出的模擬電壓之間的關(guān)系,可以得到某一光強(qiáng)度下的對應(yīng)的模擬電壓。將模擬電壓通過 AD轉(zhuǎn)化器轉(zhuǎn)換為數(shù)字電壓,以便于計算機(jī)處理。然后再將數(shù)字電壓轉(zhuǎn)換成光照度。1.2.解決問題方法及思路1.2.1 硬件部分程序設(shè)計中用到的硬件是光敏電阻、 ADC0809、8255A和七段LED數(shù)碼管。提出問題:1)為什么接口使用8255A而不是8279?2)為什么顯示裝置使用LED七段數(shù)碼管而不是LCD?3)為什么選用光敏電阻?解決問題:1.2.1.1 接口芯片選用 8255A而不是8279是由于8255A在本程序中使用軟件控制很容易實現(xiàn)且不需要用到小鍵盤,具體如表 1—1所示。器件名稱特點8255A芯片8255芯片是可編程的并行接口芯片,不需要附加外部電路便可和大多數(shù)并行傳輸數(shù)據(jù)的外部設(shè)備相連,數(shù)據(jù)的各位同時傳送,使用十分方便。8279A芯片8279芯片可以實現(xiàn)對鍵盤/顯示器的自動掃描,以減輕CPU負(fù)擔(dān),具有顯示穩(wěn)定,程序簡單,不會出現(xiàn)誤動作等。表1—1 8255A 與8279A性能比較表1.2.1.2 本實驗選擇的顯示設(shè)備是七段 LED數(shù)碼管,沒有選擇 LCD的原因如表 1—2所示。與LCD相比,LED在亮度,功耗可視角度和刷新速率等方面更具有優(yōu)勢,其最顯LED著的特點是使用壽命長光電轉(zhuǎn)換效能高,綠色環(huán)保。LCD占用空間小,功耗低,低輻射,能降低視覺疲勞,但會出現(xiàn)閃爍現(xiàn)象。LCD表1—2LCD與LED性能比較表1.2.1.3本實驗選用的是光敏電阻,因為光敏電阻上的光照強(qiáng)度與輸出電壓成線性關(guān)系,得到的模擬電壓也成線性關(guān)系。1.2.2 軟件部分根據(jù)硬件需求采用 8255A芯片,采用匯編語言, 8255A芯片的 PA、PB、PC三口的工作方式為方式0,將8255的PA口接發(fā)光二極管,PB口作為段選碼,PC口作位選碼,用軟件編程實現(xiàn)從C口讀入信息,通過8個LED數(shù)碼管循環(huán)顯示光照強(qiáng)度。硬件設(shè)計32.1.選擇芯片8255A2.1.1 芯片8255A在本設(shè)計中的作用芯片8255A通過數(shù)據(jù)口從 CPU接受轉(zhuǎn)換得到的光照度數(shù)據(jù),通過 B口輸出作為位選,實現(xiàn)LED數(shù)碼管的動態(tài)顯示,通過 A口將數(shù)值輸出到 LED數(shù)碼管。2.1.2 芯片8255A的功能分析2.1.2.18255 引腳圖8255是可編程并行接口,內(nèi)部有 3個相互獨立的 8位數(shù)據(jù)端口,即 A口、B口和C口。三個端口都可以作為輸入端口或輸出端口。 A口有三種工作方式:即方式 0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作為聯(lián)絡(luò)信號使用。8255的工作只有當(dāng)片選CS有效時才能進(jìn)行,而控制邏輯端口實現(xiàn)對其他端口的控制。2.1.2.2CPU 接口(數(shù)據(jù)總線緩沖器和讀 /寫控制邏輯)數(shù)據(jù)總線緩沖器 :這是一個 8位雙向三態(tài)緩沖器,三態(tài)是由讀 /寫控制邏輯控制的。這個緩沖器是 8255A與CPU數(shù)據(jù)總線的接口。所有數(shù)據(jù)的輸入/輸出,以及CPU用輸出指令向8255A發(fā)出的控制字和用輸入指令從8255A讀入的外設(shè)狀態(tài)信息,都是通過這個緩沖器傳遞的。讀/寫控制邏輯:它與CPU的6根控制線相連,控制8255A內(nèi)部的各種操作??刂凭€RESET用來使8255A復(fù)位。和地址線A1及A0用于芯片選擇和通道尋址??刂凭€和用來決定8位內(nèi)部和外部數(shù)據(jù)總線上信息傳送的方向, 即控制把 CPU的控制命令或輸出的數(shù)據(jù)送到相應(yīng)的通道, 或把狀態(tài)信息或輸入數(shù)據(jù)送到 CPU。8255A的讀/寫控制邏輯的作用, 是從CPU的地址和控制總線上接受輸入的信號,轉(zhuǎn)變成各種命令送到 A組或B組控制電路進(jìn)行相應(yīng)的操作。2.1.2.38255A 的引腳信號與外設(shè)相連的PA7~PA0:A口數(shù)據(jù)信號線。PB7~PB0:B口數(shù)據(jù)信號線。PC7~PC0:C口數(shù)據(jù)信號線。與CPU相連的RESET:復(fù)位信號。當(dāng)此信號來時,所有寄存器都被清除。同時三個數(shù)據(jù)端口被自動置為輸入端口。D7~D0:它們是 8255A的數(shù)據(jù)線和系統(tǒng)總線相連。CS:片選信號。在系統(tǒng)中,一般根據(jù)全部接口芯片來分配若于低位地址(比如 A5、A4、A3)組成各種芯片選擇碼,當(dāng)這幾位地址組成某一個低電平, 于8255A被選中。只有當(dāng)有效時,讀信號寫才對 8255進(jìn)行讀寫。RD:讀信號。當(dāng)此信號有效時, CPU可從8255A中讀取數(shù)據(jù)。WR:寫信號。當(dāng)此信號有效時, CPU可向8255A中寫入數(shù)據(jù)。A1、A0:端口選擇信號。 8255A內(nèi)部有3個數(shù)據(jù)端口和 1個控制端口,共 4個端口。規(guī)定當(dāng)A1、A0:為00時,選中A端口;為01時,選中B端口;為10時,選中C端口;為11時,選中控制口。8255的基本操作如下表 2-1所示。4表2—18255的基本操作2.1.2.4 芯片8255A的技術(shù)參數(shù),如下表 2—2所示:參數(shù)說明:輸入最低電壓: min=-0.5V,max=0.8V輸入最高電壓: 2.0V輸出最低電壓: 0.45V輸出最高電壓: 2.4V5表2—28255A的技術(shù)參數(shù)2.1.2.5 8255A工作方式控制字A口、B口為輸出模式,工作于方式 0。CPU中的數(shù)據(jù)經(jīng)由數(shù)據(jù)線路到達(dá) 8255A,再由A口、B口分別段選、位選后輸出到 LED。詳細(xì)控制字見表 2—3。表2—38255A的工作方式控制字方式0的工作特點這種方式通常不用聯(lián)絡(luò)信號,不使用中斷,三個通道中的每一個都有可以由程序選定作為輸入或輸出。其功能為:①兩個8位通道:通道 A、B。兩個四位通道:通道 C高4位和低四位;②任何一個通道可以作輸入 /輸出;③輸出是鎖存的;④輸入是不鎖存的;6⑤在方式 0時各個通道的輸入 /輸出可有 16種不同的組合。2.2 選擇LED七段數(shù)碼管2.2.1 LED七段數(shù)碼管在實驗中的作用LED發(fā)光二級管( Light-EmittingDiode ),在本設(shè)計中采用 7段發(fā)光二級管作為終端顯示。物理構(gòu)造:LED發(fā)光二級管,采用砷化鎵、鎵鋁砷和磷化鎵等材料制成,其內(nèi)部結(jié)構(gòu)為一個PN結(jié),具有單向?qū)щ娦浴?.2.2 LED七段數(shù)碼管的功能分析工作原理:當(dāng)在發(fā)光二極管 PN結(jié)上加正向電壓時, PN結(jié)勢壘降低,載流子的擴(kuò)散運動大于漂移運動,致使P區(qū)的空穴注入到 N區(qū),N區(qū)的電子注入到 P區(qū),這樣相互注入的空穴與電子相遇后會產(chǎn)生復(fù)合,復(fù)合時產(chǎn)生的能量大部分以光的形式出現(xiàn)。數(shù)字成像:七段 LED顯示器可以控制在哪幾個數(shù)位上,哪幾個發(fā)光二極管亮,從而顯示數(shù)字。如果發(fā)光二極管共陽極,則輸入為 0時亮,為 1時不亮,反之如果發(fā)光共陰極,則輸入1時亮,0時不亮。在本實驗中選用了共陰極。所謂共陰極是指將各 LED二極管的陰極連接在一起(一般相連接地)各陽極接到相應(yīng)器件引腳上。發(fā)光二極管是一種外加電壓超過額定電壓時發(fā)生擊穿,并因此能產(chǎn)生可發(fā)光的器件,數(shù)碼顯示器通常由多個發(fā)光二極管來組成七段或八段筆畫顯示器,當(dāng)段組合發(fā)光時,便會顯示某一個數(shù)碼管或字符,七段代碼的各位用作 a—g和DP的輸入。COM為8個發(fā)光二極管的公共引線, 實驗中COM引線接內(nèi)部 8個二極管的陰極,abcdefg(dp)則為8個發(fā)光二極管的陽極的引線。實驗中LED管采用動態(tài)顯示: 3個LED顯示器按固定的時間間隔顯示一段時間 (1.25ms),利用人眼視覺滯后,感覺 3個LED顯示器同時點亮且無閃爍感。2.2.3 LED七段數(shù)碼管的技術(shù)參數(shù)表2—4LED顯示的技術(shù)參數(shù)主要參數(shù):此時的驅(qū)動電流為 25mA。發(fā)光二極管的壓降一般為 1.5~2.0V,其工作電流一般取 10~20mA為宜。發(fā)光二極管的發(fā)光顏色有:紅色光、黃色光、綠色光、紅外光等。發(fā)光二極管應(yīng)用電路有四種,即直流驅(qū)動電路、交流驅(qū)動電路、脈沖驅(qū)動電路、變色發(fā)光驅(qū)動電路。由于8255A的最大驅(qū)動電流為 4.0mA,而LED的工作電流一般為 10~20mA,所以需要加一個驅(qū)動器 74LS244。2.2.4 LED七段顯示器的功能分析7表2—5LED真值表LED數(shù)字顯示原理:如下圖2—6為LED數(shù)碼管及其框圖圖2—6LED顯示器上面兩圖分別為外形圖和原理圖,當(dāng)七段數(shù)碼管點亮其中幾段可顯示數(shù)字和簡單的西文字符,將七段數(shù)碼管負(fù)極連接到一起稱為公共端,而發(fā)光二極管的正極則分別由引腳引出,便于控制哪個發(fā)光二極管點亮, 在右圖中如果在 COM端接低電平,而在其他引出線上施加不同的電平,則對高電平的發(fā)光二極管就會點亮, 由于將8個發(fā)光二極管負(fù)極全部連接在一起,稱為共陰極數(shù)碼管,還有將 8個發(fā)光二極管的正極連接在一起,故稱之為共陽極數(shù)碼管。本次實驗用的數(shù)碼管需動態(tài)掃描顯示,其接口電路將所有數(shù)碼管的筆畫控制段與 a~h同名端連在一起,接到一個并行端口,每個公共極 COM端由獨立的 I/O線控制,CPU向字模輸出口送出字形碼時, 所有數(shù)碼管接收到相同的字形碼, 究竟哪個數(shù)碼管顯示, 取決于每個LED的COM端,所謂動態(tài)掃描,就是顯示一位信息時, 其他位不能顯示, 必須采用分時方法,輪流控制 COM端。2.3 選擇光敏電阻82.3.1 光敏電阻在本設(shè)計中的作用光敏電阻在實驗中是用來提供模擬電壓的,通過光照度的變化改變電阻值,提供變化的模擬電壓。2.3.2 光敏電阻的功能分析物理構(gòu)造:光敏電阻又稱光導(dǎo)管,它幾乎都是用半導(dǎo)體材料制成的光電器件。 光敏電阻沒有極性,純粹是一個電阻器件,使用時既可加直流電壓,也可以加交流電壓。無光照時,光敏電阻值(暗電阻)很大,電路中電流(暗電流)很小。當(dāng)光敏電阻受到一定波長范圍的光照時, 它的阻值(亮電阻)急劇減少,電路中電流迅速增大。一般希望暗電阻越大越好,亮電阻越小越好,此時光敏電阻的靈敏度高。實際光敏電阻的暗電阻值一般在兆歐級,亮電阻在幾千歐以下。光敏電阻的原理結(jié)構(gòu): 它是涂于玻璃底板上的一薄層半導(dǎo)體物質(zhì), 半導(dǎo)體的兩端裝有金屬電極,金屬電極與引出線端相連接,光敏電阻就通過引出線端接入電路。 為了防止周圍介質(zhì)的影響,在半導(dǎo)體光敏層上覆蓋了一層漆膜, 漆膜的成分應(yīng)使它在光敏層最敏感的波長范圍內(nèi)透射率最大。工作原理:光敏電阻接有一個穩(wěn)定電壓,當(dāng)光照度變化時,光敏電阻的阻值會改變,通過比例放大器輸出電阻的壓降。2.3.3 光敏電阻的技術(shù)參數(shù)亮阻約為2K歐,暗阻大于1M歐,外觀直徑5毫米,最高承受電壓直流120V,最大功耗100mW上升響應(yīng)時間20ms,下降響應(yīng)時間30ms。實驗中光敏電阻電路輸出的電壓范圍為0-5V。光敏電阻電路圖如下:2.4 選擇芯片ADC08092.4.1 ADC0809在本設(shè)計中的作用ADC0809接收光敏電阻電路傳送的模擬電壓,將模擬電壓轉(zhuǎn)換為數(shù)字電壓, 傳送給CPU進(jìn)行數(shù)據(jù)轉(zhuǎn)換, CPU將數(shù)字電壓通過電壓與光照度的比例關(guān)系轉(zhuǎn)換為光照度。2.4.2 ADC0809的功能分析物理構(gòu)造:ADC0809是CMOS單片型逐次逼近式 A/D轉(zhuǎn)換器,內(nèi)部結(jié)構(gòu)由 8路模擬開關(guān)、地址鎖存與譯碼器、比較器、 8位開關(guān)樹型 D/A轉(zhuǎn)換器、逐次逼近數(shù)碼寄存器、時序及控制邏輯和三態(tài)輸出鎖存器組成。工作原理:首先輸入 3位地址,并使 ALE=1,將地址存入地址鎖存器中。此地址經(jīng)譯碼選通 8路模擬輸入之一到比較器。 START上升沿將逐次逼近寄存器復(fù)位。下降沿啟動 A/D轉(zhuǎn)換,之后 EOC輸出信號變低,指示轉(zhuǎn)換正在進(jìn)行。直到 A/D轉(zhuǎn)換完成,EOC變?yōu)楦唠娖剑?指示A/D轉(zhuǎn)換結(jié)束,結(jié)果數(shù)據(jù)已存入鎖存器,這個信號可用作中斷申請。當(dāng)OE輸入高電平時,輸出三態(tài)門打開,轉(zhuǎn)換結(jié)果的數(shù)字量輸出到數(shù)據(jù)總線上。2.4.3 ADC0809的技術(shù)參數(shù)ADC0809是8路8位A/D轉(zhuǎn)換器,即分辨率8位。具有轉(zhuǎn)換起??刂贫?。轉(zhuǎn)換時間為100μs單個+5V電源供電模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準(zhǔn)。工作溫度范圍為-40~+85攝氏度低功耗,約15mW。2.4.4 ADC0809主要信號引腳的功能說明。見圖 2—7。圖2—7引腳圖ADC0809芯片有28條引腳,采用雙列直插式封裝,如圖所示。下面說明各引腳功能。IN7~I(xiàn)N0——8路模擬量輸入端。D7~D0——8位數(shù)字量輸出端。ADDA、ADDB、ADDC——3位地址輸入線,用于選通 8路模擬輸入中的一路ALE——地址鎖存允許信號,輸入,高電平有效。對應(yīng) ALE上跳沿,A、B、C地址狀態(tài)送入地址鎖存器中。START——轉(zhuǎn)換啟動信號。。A/D轉(zhuǎn)換啟動脈沖輸入端, 輸入一個正脈沖(至少100ns寬)使其啟動。START上升沿時,復(fù)位 ADC0809;START下降沿時啟動芯片,開始進(jìn)行 A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持低電平。EOC——A/D轉(zhuǎn)換結(jié)束信號,輸出,當(dāng) A/D轉(zhuǎn)換結(jié)束時,此端輸出一個高電平(轉(zhuǎn)換期間一直為低電平)。OE——數(shù)據(jù)輸出允許信號,輸入,高電平有效 (OE=0,輸出數(shù)據(jù)線呈高阻; OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù))。當(dāng)A/D轉(zhuǎn)換結(jié)束時,此端輸入一個高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。CLK——時鐘脈沖輸入端。要求時鐘頻率不高于 640KHZ,通常使用頻率為 500KHz的時鐘信號。REF(+)、REF(-)——基準(zhǔn)電壓。參考電源、參考電壓用來與輸入的模擬信號進(jìn)行比較,作為逐次逼近的基準(zhǔn)。其典型值為 Vref(+)=+5V,Vref(-)=-5V 。Vcc——電源,單一+ 5V。GND——接地。2.5 硬件總邏輯圖及其說明10硬件總邏輯圖如下圖 2—8所示:圖2—8硬件總邏輯圖芯片8255A的數(shù)據(jù)線D0~D7與主機(jī)低八位數(shù)據(jù)線相連,8255A的RD線、WR線、A0、A1、RESET分別與主機(jī)的RD線、WR線、A0、A1、RESET線連接。8255A的A口控制LED的段選,B口控制位選.11光敏電路如下:在單片機(jī)上的接口連接如下:控制程序設(shè)計3.1 控制程序設(shè)計思路說明初始化8255芯片,設(shè)置工作方式控制字為89(100010001B),即A、B口為輸出,分別控制LED的段選、位選,C口輸入。下圖為控制字:以采樣五十次為一周期,求得五十次采樣的總值。然后除以50,得到采樣50次的平均值,存入LastAD。在每一次采樣過程中,都在PC機(jī)和LED上輸出上一周期采樣轉(zhuǎn)化得到的光照強(qiáng)度(單位:勒克斯)。具體轉(zhuǎn)化過程為:采樣得到的模擬值經(jīng)過 AD轉(zhuǎn)化后為電壓值, 電壓范圍為 0-5V。而考慮到實際生活中, 一般照明為200lux,重點照明為300lux,所以實驗中可顯示的光照強(qiáng)度為0-500lux。于是參考兩者之間的線性關(guān)系,定下入下圖的關(guān)系:12圖2—9電壓-光照度函數(shù)133.2 程序流程圖開始初始化8255CX=50采樣,計算采樣總值百位數(shù)/整數(shù)部分入BUF/BUFFER+4,十位數(shù)/第一位小數(shù)入BUF+1/BUFFER+6,個位數(shù)/第二位小數(shù)入BUF+2/BUFFER+7。調(diào)用DOS的9號功能在 PC機(jī)上輸出電壓。采樣平均值送 8255,8255的PA口段選、PB口位選。在LED上輸出一位數(shù)據(jù),位選數(shù)據(jù)DATA2左移一位。重復(fù)三次為一個周期。然后還原DATA2=0FEH。延時,i--Ni=0?繼續(xù)下一次采樣

Y計算采樣平均值程序強(qiáng)制關(guān)閉結(jié)束圖3-1程序流程圖143.3控制程序.MODELTINY;8255端口初始化COM_ADDR EQU 0E003HTC_ADDR EQU 0E002H;PCO端口ADDR_0809EQU 0F000HWR_COM_AD_LEQU 0D004H;寫左半屏指令地址WR_COM_AD_REQU 0D000H;寫右半屏指令地址WR_DATA_AD_LEQU0D006H;寫左半屏數(shù)據(jù)地址WR_DATA_AD_REQU0D002H;寫右半屏數(shù)據(jù)地址RD_BUSY_AD EQU0D001H;查找地址RD_DATA_AD EQU0D003H;讀數(shù)據(jù)地址X EQU 0B8H;起始顯示行基址Y EQU 040H;起始顯示列基址FirstLineEQU 0C0H;起始顯示行EXTRNDisplay8:NEAR;.STACK SEGMENT STACKDW100 DUP(?).STACK ENDS.DATABUFFER DB 8DUP(?)LastAD DB 0 ;上一次AD轉(zhuǎn)換值CHUSHI DB 0KKKKKK DB 0;太陽圖標(biāo)Line1_1 DB0021H,0042H,00E4H,0010H,0048H,0024H,0044H,0007H,0044H,0024H,0048H,0010H,00E4H,0042H,0021H,0000HDB022H,011H,08BH,044H,028H,011H,012H,072H,012H,011H,028H,044H,08BH,011H,022H,000HLine2_1 DB080H,048H,0E8H,0E8H,0FCH,0E8H,03CH,028H,000H,002H,003H,006H,0FEH,05EH,05FH,05FHLine2_2 DB0E8H,040H,030H,0DCH,050H,0B0H,090H,010H,05EH,05FH,05FH,0FEH,00EH,002H,002H,003HLine2_3 DB000H,000H,000H,0C0H,030H,028H,020H,020H,000H,002H,003H,002H,0FEH,046H,046H,046H15Line2_4 DB0FCH,020H,020H,020H,020H,030H,000H,000H,047H,046H,046H,0FEH,002H,002H,003H,002HLine2_5 DB000H,00CH,01EH,0FFH,0FFH,01EH,00CH,000H,000H,000H,020H,077H,077H,020H,000H,000HLine3_1 DB000H,040H,042H,044H,05CH,0C8H,040H,07FH,040H,0C0H,050H,04EH,044H,060H,040H,000HDB000H,080H,040H,020H,018H,007H,000H,000H,000H,03FH,040H,040H,040H,040H,078H,000HLine3_2 DB000H,0F2H,012H,012H,01EH,000H,0C0H,05EH,052H,0F2H,052H,052H,05EH,0C0H,000H,000HDB000H,001H,041H,081H,07FH,000H,087H,084H,084H,0FFH,044H,044H,054H,0E7H,040H,000HLine3_3 DB080H,081H,08EH,004H,000H,010H,050H,090H,010H,010H,010H,0FFH,010H,010H,010H,000HDB040H,020H,01FH,020H,020H,040H,040H,043H,041H,048H,050H,04FH,040H,040H,040H,000HLine3_4 DB004H,004H,004H,004H,074H,054H,055H,056H,054H,054H,074H,004H,004H,004H,004H,000HDB000H,0FFH,001H,001H,03DH,025H,025H,025H,025H,025H,03DH,041H,081H,07FH,000H,000HLine4_1 DB040H,020H,0F0H,00CH,007H,002H,0FCH,044H,044H,042H,0FEH,043H,043H,042H,040H,000HDB000H,000H,07FH,000H,000H,000H,07FH,020H,010H,028H,043H,00CH,010H,020H,078H,000HLine5_1 DB000H,002H,002H,0C2H,002H,002H,002H,002H,0FEH,082H,082H,082H,082H,082H,002H,000HDB020H,020H,020H,03FH,020H,020H,020H,020H,03FH,020H,020H,020H,020H,020H,020H,000HLine5_2 DB16020H,018H,008H,009H,0EEH,0AAH,0A8H,0AFH,0A8H,0A8H,0ECH,00BH,02AH,018H,008H,000HDB000H,000H,03EH,002H,002H,002H,002H,0FFH,002H,002H,012H,022H,01EH,000H,000H,000H.CODESTART: MOV AX,@.DATAMOV DS,AXNOPMOV DX,COM_ADDRMOV AL,80HOUT DX,ALMOV AL,05HMOV DX,TC_ADDROUT DX,ALXOR AL,AL ;XOR是異或,實現(xiàn) AL的清零操作JMP START6START1:MOVCX,50;采樣50次MOVBX,0;累計五十次的采樣值START2:CALLAD0809XORAH,AHADDBX,AXLOOPSTART2MOVAX,50XCHGAX,BX;交換AX和BX的值DIVBL;五十次的平均值CMPAL,LastAD;若AL等于上一次AD轉(zhuǎn)換值,則數(shù)碼管上值不變JZSTART3START6:MOVLastAD,ALCALLDisplay_DataLEASI,BUFFERMOVAL,BUFFER+2CALLDisplay8ANDAL,7FHMOVCHUSHI,ALMOVDL,03HCMPCHUSHI,DLJNBBAOJING_LOWJMPZHENGCHANG;光強(qiáng)判斷BAOJING_TOP:MOVDX,TC_ADDRMOV AL,02HOUT DX,AL17CALL LCDSHOWTOPJMP START3BAOJING_LOW: MOV DX,TC_ADDRMOV AL,00HOUT DX,ALCALL LCDSHOWLOWJMP START3ZHENGCHANG: MOV DX,TC_ADDRMOV AL,05H ;最低位是,1不報警OUT DX,ALCALL LCDSHOWOKSTART3: CALL DLTimeJMP START1;***********************************;;ADC0809初始化程序AD0809 PROC NEARPUSH CXMOV AL,0MOV DX,ADDR_0809OUT DX,ALMOV CX,200LOOP $ ;延時,等待AD轉(zhuǎn)換完成MOV DX,ADDR_0809IN AL,DXPOP CXRETAD0809 ENDP;***********************************;;顯示程序DISPLAY_DATAPROCNEARMOVDL,ALMOVAH,0MOVBL,2MULBLMOVBL,10DIVBLMOVBUFFER+4,AHMOVAH,0DIVBLMOVBUFFER+5,AHMOVBUFFER+6,AL18MOVAL,DLXORAH,AHMOVBL,51;255/51(16進(jìn)制的1=1/52V)DIVBLORAL,80H;加上小數(shù)點MOVBUFFER+2,ALMOVAL,10MULAHDIVBLMOVBUFFER+1,AL;第一位小數(shù)MOVAL,10MULAHDIVBLMOVBUFFER,AL;第二位小數(shù)MOVbuffer+3,10HMOVbuffer+7,10H;消隱RETDISPLAY_DATAENDP;**********************************;;延時程序DLTime PROC NEARMOV CX,30000LOOP $RETDLTime ENDP;**********************************;;顯示太陽圖標(biāo)和“警告!!!及”“光強(qiáng)過高”LCDSHOWTOP PROC NEARCALL LCD_INITCALL DLTimeCALL DisLine1CALL DLTimeCALL DisLine2CALL DLTimeCALL DisLine3CALL DLTimeRETLCDSHOWTOP ENDP;********************************;;顯示太陽圖標(biāo)和“警告?。?!”及“光強(qiáng)過低”LCDSHOWLOW PROC NEARCALL LCD_INITCALL DLTimeCALL DisLine119CALL DLTimeCALL DisLine2CALL DLTimeCALL DisLine4CALL DLTimeLCDSHOWLOW ENDP;***********************************;;顯示太陽圖標(biāo)和“光強(qiáng)正常”LCDSHOWOK PROC NEARCALL LCD_INITCALL DLTimeCALL DisLine1CALL DLTimeCALL DisLine5CALL DLTimeRETLCDSHOWOK ENDP;********************************;;顯示太陽圖標(biāo)DisLine1PROCNEARLEASI,Line1_1MOVAL,2;A-起始顯示行地址,第2行MOVAH,50;B-起始顯示列地址,第32列,以下同CALLWordDISLRETDisLine1ENDPDisLine2PROCNEARLEASI,Line2_2MOVAL,4MOVAH,16CALLByteDISL;左半屏,顯示一個字節(jié)子程序LEASI,Line2_3MOVAL,4MOVAH,24CALLByteDISLLEASI,Line2_4MOVAL,4MOVAH,40CALLByteDISLLEASI,Line2_5MOVAL,4MOVAH,48CALLByteDISL20LEASI,Line2_5MOVAL,4MOVAH,56CALLByteDISLLEASI,Line2_5MOVAL,4MOVAH,0CALLByteDISR;右半屏字節(jié)顯示數(shù)據(jù)LEASI,Line2_5MOVAL,4MOVAH,8CALLByteDISRLEASI,Line2_5MOVAL,4MOVAH,16CALLByteDISRLEASI,Line2_5MOVAL,4MOVAH,24CALLByteDISRLEASI,Line2_5MOVAL,4MOVAH,32CALLByteDISRLEASI,Line2_5MOVAL,4MOVAH,40CALLByteDISRRETDisLine2ENDP;***************************************;;顯示“光強(qiáng)過高”DisLine3PROCNEARLEASI,Line3_1MOVAL,6;A-起始顯示行地址,第6行MOVAH,32;B-起始顯示列地址,第32列,以下同CALLWordDISL;左半屏,顯示一個字節(jié)子程序LEASI,Line3_2MOVAL,6MOVAH,48CALLWordDISLLEASI,Line3_3MOVAL,6MOVAH,021CALL WordDISR ;右半屏,顯示一個字子程序LEA SI,Line3_4MOV AL,6MOV AH,16CALL WordDISRRETDisLine3 ENDP;****************************************;;顯示“光強(qiáng)過低”DisLine4PROCNEARLEASI,Line3_1MOVAL,6;A-起始顯示行地址,第6行MOVAH,32;B-起始顯示列地址,第32列,以下同CALLWordDISL;右半屏,顯示一個字子程序LEASI,Line3_2MOVAL,6MOVAH,48CALLWordDISLLEASI,Line3_3MOVAL,6MOVAH,0CALLWordDISR;右半屏,顯示一個字子程序LEASI,Line4_1MOVAL,6MOVAH,16CALLWordDISRRETDisLine4ENDP;****************************************;;顯示“光強(qiáng)正?!盌isLine5 PROC NEARLEA SI,Line3_1MOV AL,5 ;A-起始顯示行地址,第六行MOV AH,32 ;B-起始顯示列地址,第 32列,以下同CALL WordDISL ;左半屏,顯示一個字子程序LEA SI,Line3_2MOV AL,5MOV AH,48CALL WordDISLLEA SI,Line5_1MOV AL,5MOV AH,0CALL WordDISR ;右半屏,顯示一個字子程序LEA SI,Line5_222MOV AL,5MOV AH,16CALL WordDISRRETDisLine5 ENDP;**************************************;;液晶初始化LCD_INITPROCNEARMOVAL,3EH;初始化左半屏,關(guān)顯示CALLWRComL;寫指令子程序MOVAL,FirstLine;設(shè)置起始顯示行,第0行CALLWRComLMOVAL,3EH;初始化左半屏,關(guān)顯示CALLWRComR;寫指令子程序MOVAL,FirstLine;設(shè)置起始顯示行,第0行CALLWRComRCALLLCDClear;清屏MOVAL,3FH;開顯示CALLWRComLMOVAL,3FH;開顯示CALLWRComRRETLCD_INITENDP;***********************************;;清屏LCDClear PROC NEAR;清左半屏MOVAL,0;MOVAH,0;LCDClearL1:PUSHAXMOVCX,64CALLSETXYL;LCDClearL2:MOVAL,0CALLWRDATALLOOPLCDClearL2POPAXINCAXCMPAL,8;共8行JNZLCDClearL1;MOVAL,0;MOVAH,0;LCDClearR1:PUSHAXMOVCX,64CALLSETXYR23LCDClearR2:XORAL,ALCALLWRDATARLOOPLCDClearR2POPAXINCALCMPAL,8;JNZLCDClearR1RETLCDClearENDP;*************************************;;****************;;;ByteDisL PROC NEARMOV CX,8CALL DispLRETByteDisL ENDP;*****************************;WordDisL PROC NEARMOVCX,16;顯示16字節(jié)數(shù)據(jù),應(yīng)于顯示一個漢字CALLDispLRETWordDisLENDP;*****************************;DispLPROCNEARPUSHAXPUSHCXCALLSETXYL;設(shè)置起始顯示行列地址CALLDisplayL;顯示上半行數(shù)據(jù)POPCXPOPAXINCALCALLSETXYL;設(shè)置起始顯示行列地址CALLDisplayL;顯示下半行數(shù)據(jù)RETDispLENDP;*****************************;;右半屏顯示一個字節(jié)/字;AL-起始顯示行序數(shù)X(0-7);AH-起始顯示列序數(shù)Y(0-63);SI-顯示子數(shù)據(jù)首地址ByteDisRPROCNEARMOVCX,8;顯示8個字節(jié)數(shù)據(jù)CALLDispR24RETByteDisR ENDP;*****************************;WordDisR PROC NEARMOVCX,16;顯示16字節(jié)數(shù)據(jù),用于顯示一個漢字CALLDispRRETWordDisRENDP;*******************************;DispRPROCNEARPUSHAXPUSHCXCALLSETXYR;設(shè)置起始顯示行列地址CALLDisplayR;顯示上半行數(shù)據(jù)POPCXPOPAXINCALCALLSETXYR;設(shè)置起始顯示行列地址CALLDisplayR;顯示下半行數(shù)據(jù)RETDispRENDP;*******************************;LineDisLPROCNEARMOV CX,64CALL SETXYL ;設(shè)置起始顯示行列CALL DisplayL;顯示數(shù)據(jù)RETLineDisL ENDP;********************************;;顯示右半屏一行圖形,AL-X起始行地址序數(shù)(0-7),AH-Y起始列地址序數(shù)(0-63)LineDisR PROC NEARMOV CX,64CALL SETXYR ;設(shè)置起始顯示行列CALL DisplayR;顯示數(shù)據(jù)RETLineDisR ENDP;******************************;DisplayL PROC NEARLODSBCALL WRDataL ;寫左半屏數(shù)據(jù)LOOP DisplayLRETDisplayL ENDP;********************************;25;基本控制;*********************************;;顯示右半屏數(shù)據(jù),R7-顯示數(shù)據(jù)個數(shù)DisplayR PROC NEARLODSBCALL WRDataR ;寫左半屏數(shù)據(jù)LOOP DisplayRRETDisplayR ENDP;*******************************;;設(shè)置左半屏起始顯示行列地址,AL-X起始行序數(shù)(0-7),AH-Y起始列序數(shù)(0-63)SETXYL PROC NEAROR AL,X ;行地址=行序數(shù)+行基址CALL WRComLMOV AL,AHOR AL,Y ;列地址=列序數(shù)+列基址CALL WRComLRETSETXYL ENDP;********************************;;設(shè)置右半屏起始顯示行列地址,AL-X起始行序數(shù)(0-7),AH-Y起始列序數(shù)(0-63)SETXYR PROC NEAROR AL,X ;行地址=行序數(shù)+行基址CALL WRComRMOV AL,AHOR AL,Y ;列地址=列序數(shù)+列基址CALL WRComRRETSETXYR ENDP;*********************************;;寫左半屏控制指令,A-寫入指令WRComL PROC NEARMOV DX,WR_COM_AD_LOUT DX,ALWRComL1: MOV DX,RD_BUSY_ADIN AL,DXTEST AL,80H ;檢查液晶顯示是否處于忙狀態(tài)JNZ WRComL1RETWRComL ENDP;*********************************;;寫右半屏控制指令,A-寫入指令WRComR PROC NEARMOV DX,WR_COM_AD_R26OUT DX,ALWRComR1: MOV DX,RD_BUSY_ADIN AL,DXTEST AL,80H ;檢查液晶顯示是否處于忙狀態(tài)JNZ WRComR1RETWRComR ENDP;*********************************;;寫左半屏數(shù)據(jù),A-寫入數(shù)據(jù)WRDataL PROC NEARMOV DX,WR_DATA_AD_LOUT DX,ALWRDataL1: MOV DX,RD_BUSY_ADIN AL,DXTEST AL,80H ;檢查液晶顯示是否處于忙狀態(tài)JNZ WRDataL1RETWRDataL ENDP;********************************;;寫右半屏數(shù)據(jù),A-寫入數(shù)據(jù)WRDataR PROC NEARMOV DX,WR_DATA_AD_ROUT DX,ALWRDataR1: MOV DX,RD_BUSY_ADIN AL,DXTEST AL,80H ;檢查液晶顯示是否處于忙狀態(tài)JNZ WRDataR1RETWRDataR ENDP;*******************************;END START27上機(jī)調(diào)試過程4.1硬件調(diào)試1)按照預(yù)習(xí)報告上的硬件總邏輯圖接線,注意段選線線與位選擇線均不能接反,否則顯示在LED顯示器上的是亂碼或顯示順序是反的,連線松動常導(dǎo)致LED顯示器上顯示不出數(shù)字,所以硬件調(diào)試時一定要確保連線的緊度。2)ADC0809中,有多路通道可以進(jìn)行A/D轉(zhuǎn)換。因此實驗一開始就需要解決通道選擇問題。我將ES-PCI的A0,A1,A2分別與ADC0809的ADDA,ADDB,ADDC相連,

溫馨提示

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

最新文檔

評論

0/150

提交評論