光電傳感器實驗平臺軟件設計_第1頁
光電傳感器實驗平臺軟件設計_第2頁
光電傳感器實驗平臺軟件設計_第3頁
光電傳感器實驗平臺軟件設計_第4頁
光電傳感器實驗平臺軟件設計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

光電傳感器實驗平臺軟件設計摘要:此光電傳感器實驗平臺軟件設計包括光電轉(zhuǎn)換、測量計算、輸入輸出三部分,光源信號作用于各光電傳感器,由模數(shù)轉(zhuǎn)換ADC0809采集光敏電阻、光敏二極管、光敏三極管、光電池的輸出信號,透射式光電開關(guān)、熱釋電紅外器件的輸出信號為開關(guān)量,不需要經(jīng)過模數(shù)轉(zhuǎn)換ADC0809,把采集到的數(shù)據(jù)經(jīng)單片機測量編程測量計算,將傳感器主要特征參數(shù)實時顯示出來。我們用按鍵選擇要進行的實驗項目。測量計算的核心器件為單片機,單片機系統(tǒng)實時測算并顯示出傳感器元件的主要參數(shù)。關(guān)鍵字:傳感器;轉(zhuǎn)換模塊;單片機第1章引言我國理工科院校現(xiàn)有的大學實驗教學儀器都屬于單一模式的儀器,即光學工程類、模電類、數(shù)電類、傳感器類等單一功能的實驗教學方法和儀器。這些實驗教學儀器雖然能夠進行本學科的單科教學實驗,但不能進行多學科綜合性的實驗教學,更無法培養(yǎng)學生的綜合實驗技能。此光電傳感器實驗平臺由光源、光電轉(zhuǎn)換、測量計算、輸入輸出部分組成。可以完成光電傳感器的原理性實驗,同時可進行應用性實驗;整體結(jié)構(gòu)緊湊,功能完整,實驗平臺即構(gòu)成完整的光電傳感器系統(tǒng)。所有器件均在同一側(cè),有利于對具體的光電元件和轉(zhuǎn)換電路的感性認識,深刻理解具體電路的參數(shù)與組成。通過更換光源器件可以進行光譜特性的初步測量。單片機系統(tǒng)對光電傳感器信號進行處理是傳感器系統(tǒng)的重要應用方向。第2章方案設計光源信號輸出各傳感器的輸出圖1光源信號輸出各傳感器的輸出圖1光電傳感器實驗平臺框架本設計由光源、光電轉(zhuǎn)換、測量計算、輸入輸出部分組成??梢酝瓿晒怆妭鞲衅鞯脑硇詫嶒?,同時可進行應用性實驗,以實驗平臺構(gòu)成完整的光電傳感器系統(tǒng)。安裝不同的光源,通過調(diào)節(jié)電路改變光強,經(jīng)過光電轉(zhuǎn)換部分得到合適的處理信號,用ADC0809來采集。測量計算部分包括AD轉(zhuǎn)換和單片機,采用ADC0809作為模數(shù)轉(zhuǎn)換控制器,單片機采用51單片機,且支持在線調(diào)試,學生可以充分理解軟件框架與控制流程;可以對實驗軟件做自主性的修改。進行模數(shù)轉(zhuǎn)換的器件都有一定的電壓輸入范圍,當傳感器信號經(jīng)調(diào)理過程進入模數(shù)轉(zhuǎn)換器時電壓量也應保持在兩成范圍內(nèi)。接入模數(shù)轉(zhuǎn)換控制器的信號有兩路,第一路信號為光源電路中的電壓信號,第二路信號為光電傳感器輸出經(jīng)信號調(diào)理電路調(diào)整后的電壓信號。51單片機將第二路信號經(jīng)電路模型和算法處理,得出光電傳感器元件的主要參數(shù)送駛?cè)胼敵霾糠?。輸入輸出部分包括LCD顯示器,小鍵盤和執(zhí)行部件。顯示器件為字符型液晶顯示器,顯示光源信號值和光電傳感器主要參數(shù);小鍵盤包括0?9的數(shù)字鍵和“確定”、“返回”,共12個按鍵,實現(xiàn)實驗項目的選擇;電子音響和LED作為執(zhí)行部件,在光電傳感器應用系統(tǒng)中根據(jù)傳感器的信號做出不同執(zhí)行動作??梢赃M行各種光電傳感器的原理與應用實驗,基本光電傳感器包括:光敏電阻、光敏二極管、光敏三極管、光電池、透射式光電開關(guān)、熱釋電紅外器件。光電傳感器實驗平臺模塊分布光電傳感器模數(shù)轉(zhuǎn)換(ADC0809)51單片機液晶顯示(LCD1602)小鍵盤執(zhí)行部件圖2光電傳感器實驗平臺的硬件結(jié)構(gòu)[1](1) 光源通過調(diào)節(jié)電路改變光強,不同的實驗給出不同的光強。(2) 在實驗平臺上用遮光板蓋住光源和光敏電阻,入射光強,電阻減小,入射光弱,電阻增大。(3) 在實驗平臺上用遮光板蓋住光源和光敏二極管,當有光照的時候,光敏二極管的暗電流增大,無光照的時候,其暗電流很小。(4) 在實驗平臺上用遮光板蓋住光源和光敏三極管,其測試電路就有暗電流,取走遮光板時即有光電流(5) 在實驗平臺上當有光入射到光電池表面時,電路中產(chǎn)生光電流。(6) 在實驗平臺上安裝好光源和接收器,用遮光板蓋住光源和接收器,測試透射式光電開關(guān)接收器的信號量。(7) 在實驗平臺上安裝好光源和接收器,用遮光板蓋住或移開光源和接收器,觀察熱釋電紅外傳感器信號的變化。將以上試驗測得數(shù)據(jù),通過ADC0809的采集,送到單片機通過相應的公式計算得出要測得參數(shù),并顯示出來。2.3光電傳感器實驗平臺的軟件流程圖3光源信號光敏電阻實驗電路光敏二極管實驗電路光敏三極管實驗電路光電池實驗電路透射式開關(guān)實驗電路熱釋電紅外實驗電路2.4系統(tǒng)方案圖4系統(tǒng)上電之后,顯示選擇菜單:1.Photoresistor2.photosensitivediode3.phototransisor4.photo-cell5.t-switch,通過鍵盤選擇不同實驗項目,例如,要做光電二極管實驗,在鍵盤上輸入“2”直接進入界面,單片機根據(jù)輸入數(shù)值控制0809選擇第二通道測量光敏二極管實驗電路,同時將測量結(jié)果在1602上顯示,要返回到主菜單就按Cancel鍵,可以選擇其他實驗。

第3章實驗平臺的軟件設計總體概述本設計的主要功能模塊有數(shù)據(jù)的計算與顯示,包括光敏電阻傳感器,光電二極管傳感器,光電三極管傳感器以及光電池、透射式光電開關(guān)、熱釋電器件等模塊。每種模塊可直接進入界面進行操作,操作靈活方便。平臺軟件流程圖3.2數(shù)據(jù)轉(zhuǎn)換測量計算部分包括AD轉(zhuǎn)換和單片機,采用ADC0809作為模數(shù)轉(zhuǎn)換控制器,單片機采用51單片機,支持在線調(diào)試,學生可以充分理解軟件框架與控制流程;可以對實驗軟件做自主性的修改。進行模數(shù)轉(zhuǎn)換的器件都有一定的電壓輸入范圍,當傳感器信號經(jīng)調(diào)理過程進入模數(shù)轉(zhuǎn)換器時電壓量也應保持在兩成范圍內(nèi)。接入模數(shù)轉(zhuǎn)換控制器的信號有兩路,第一路信號為光源電路中的電壓信號,第二路信號為光電傳感器輸出經(jīng)信號調(diào)理電路調(diào)整后的電壓信號。51單片機將第二路信號經(jīng)電路模型和算法處理,得出光電傳感器元件的主要參數(shù)送入輸出部分。ADC0809的工作原理[2]A/D轉(zhuǎn)換的作用是數(shù)據(jù)的采集和轉(zhuǎn)換。ADC0809分辨率8位,轉(zhuǎn)換時間lOOuS,單電源+5V供電,模擬輸出范圍0~5V,無需調(diào)零和滿量程調(diào)整。ADC0809有8個輸入通道,可以減少實驗臺的A/D個數(shù),可以解決多路同時輸入的問題。ADC0809的工作時序圖[3]ALE 地」」|:總線 y穂定x模擬輸入 )(噠STARTEOC 輸出允許 OUTPUTENEBLE圖6從圖可以看出,啟動脈沖START和地址所存允許脈沖ALE的上升沿將地址送上地址總線,模擬量經(jīng)C、B、A選擇開關(guān)所指定的通道送到A/D轉(zhuǎn)換器。在START信號下降沿的作用下,逐次逼近過程開始,在時鐘的控制下,一位一位地逼近。此時,轉(zhuǎn)換信號EOC呈低電平狀態(tài)。由于逐次逼近需要一定的過程,所以,在此期間內(nèi),模擬輸入值應維持不變,比較器要一次次進行比較,直到轉(zhuǎn)換結(jié)束。此時,如果計算機發(fā)出一個輸出允許命令(EOC呈高電平),則可讀出數(shù)據(jù)。3?2?2ADC0809與c51的引腳接口I-WC-OGKhN1TPSTARTEKW5WT1IN6CU12I-WC-OGKhN1TPSTARTEKW5WT1IN6CU12W7CUTSOJT4*4?*CUT5OJFSOUT?ALEamVREF[*5RST苑甘血哪密心3Pb就mmPO5MD6E酎心KI7fMJ7氏沁P2附PSL^AIOR23/A11RS4/A1SP2M1SFSe/AU陀杯侶PlMWrairraopg2/*wMlrwTiP54HDWS^Tirawjft昭MS01)ADC08091)ADC0809的流程圖(圖8)圖7圖7是ADC0809與C51的引腳接口圖。ADC0809的6腳START(A/D轉(zhuǎn)換啟動信號輸入端)與C51的2腳(P1.1)相接;ADC0809的7腳EOC(轉(zhuǎn)換結(jié)束信號輸出引腳)與C51的3腳(P1.2)相接;ADC0809的9腳OE(輸出允許控制端)與C51的4腳(P1.3)相接;ADC0809的10腳CLOCK與C51的30腳(ALE)相接;ADC0809的25、24、23腳(即ADDA、ADDB、ADDC)地址輸入線分別與C51的21、22、23腳(即P2.0、P2.1、P2.2)相接;ADC0809的22腳ALE(地址鎖存允許信號輸入端)與C51的1腳(P1.0)相接。3.2.3ADC0809的子程序(2)程序代碼如下所示#include<REGX51.H>#defineADP2 //AD0809通道選擇輸入#defineDDP3 //AD0809數(shù)據(jù)輸入//接口sbitAD_ALE=P「0; //AD0809地址鎖存,高電平有效sbitAD_ST=P「1; //AD0809啟動上升沿100ns高電平,低電平開始轉(zhuǎn)換sbitAD_EOC=P「2; //轉(zhuǎn)換結(jié)束,高電平有效,查詢!sbitAD_OE=P「3; //輸出使能,高電平使能,低電平高阻。voidADC_INT ( void)TOC\o"1-5"\h\z{AD_ST = 0 ;AD_ALE = 0 ;AD_OE = 0 ;}unsignedcharAD_CONVER(unsignedcharadd){unsignedchari=0;if(add<8)AD=add; //通道選擇(0~7)AD_ALE=1;AD_ALE=1;AD_ALE=0;AD_ST=0;AD_ST=1;AD_ST=1;AD_ST=0;//高電平啟動AD_EOC=1;for(i=0;i<30;i++); //延時while(AD_EOC==0);//AD_OE=1;AD_OE=1;i=DD;//讀數(shù)據(jù)AD_OE=0;returni;}//返回3.3數(shù)據(jù)采集3.3.1光敏電阻實驗主要測試光敏電阻的阻值【4】其測量的流程:光源通過調(diào)節(jié)電路改變光強,不同的實驗給出不同的光強。在有光入射時,我們可以很容易的測量出光敏電阻兩端的電壓V亮這樣,可以通過相應的公式亮求出光敏電阻的阻值,即I亠=(5-V」/R,則可以求出R=V亠/I亠。亮 亮L 亮亮測試光敏電阻的阻值:n=AD_CONVER(addrs); //讀轉(zhuǎn)換函數(shù)EA=1;P3=0xff;if(addrs==0) //第一通道,測量光敏電阻。{t=n*10;t=t/(256-n); //計算公式n=t*10; //放大10倍,取小數(shù)點后面1位,一共四位(14.5k)dis[4]='K';//單位m=n%10;dis[3]=m+0x30;dis[2]='.'; //小數(shù)點m=n/10%10;dis[1]=m+0x30;m=n/100;dis[0]=m+0x30;}3.3.2光電二極管實驗主要測試光電二極管的光電流其測量的流程:光源通過調(diào)節(jié)電路改變光強,不同的實驗給出不同的光強。在有光入射時,我們可以很容易測出光電二極管兩端的電壓値V,這樣,通過公式1光=(5-V)光/Rl得出光電二極管的光電流。3.3.3光電三極管實驗主要測試光電三極管的光電流(1丿其測量的流程:光源通過調(diào)節(jié)電路改變光強,不同的實驗給出不同的光強。在有光入射時,我們可以很容易的測量出光電三極管發(fā)射極E的電壓值V,則由公式I=V/RE EEL就可以得出光電三極管發(fā)射極E的電流值,這樣,光電三極管的光電流I=I/(l+0)。LE3.3.4光電池實驗主要測試光電池產(chǎn)生的電動勢其測量的流程:光源通過調(diào)節(jié)電路改變光強,不同的實驗給出不同的光強。在有光入射時,我們可以很容易的測量出光電池電路中放大器LM358中1腳的電位,根據(jù)放大器的虛短,可以得出3腳和5腳的電壓相等。根據(jù)放大器的虛斷可以求得1腳的電壓是3腳的電壓的11倍。這樣,我們就可以知道光電池產(chǎn)生的電動勢。3.3.5透射式光電開關(guān)光電開關(guān)采用高發(fā)射功率紅外光電二極管和高靈敏度光電晶體管組成。它利用被檢測物體對紅外光束的遮光或反射,由同步回路選通而檢測物體的有無,輸出開關(guān)量。3.3.6熱釋電紅外傳感器測量的原理:熱釋電紅外傳感器是對溫度敏感的傳感器。熱釋電紅外傳感器的窗口接收光線,濾波片對自然界中的白光信號具有抑制作用,所以只有特定波長的紅外信號才能通過濾波片照射在熱釋電元件上。當人體進入檢測區(qū),因人體溫度與環(huán)境溫度有差別,產(chǎn)生溫差時,傳感器有輸出,溫度沒有變化時,則無輸出。3.4輸入輸出LCD1602工作原理[5]LCD1602的工作原理液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富、超薄輕巧等優(yōu)點,在袖珍式儀表和功耗應用系統(tǒng)中得到廣泛的應用。目前字符型液晶顯示模塊已經(jīng)是單片機應用設計中最常用的信息顯示器件。LCD1602液晶顯示模塊可以顯示兩行,每行16個字符,采用單+5V電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比。1602液晶模塊內(nèi)部的字符發(fā)生存儲器已經(jīng)存儲了160個不同的陣字符圖形,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“ A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。1602識別的是ASCII碼,試驗可以用ASCII碼直接賦值。表1LCD1602引腳及功能管腳號英文說明中文說明1VSSGroundforLogic地2VDDPowersupplyforLogic邏輯電壓3VOPowersupplyforLCDdrive對比度調(diào)節(jié)4RSRegisterselection指令、數(shù)據(jù)寄存器選擇5R/WRead/Writeselection讀寫選擇信號6EEnablesignalforLCM使能信號7~14DB0~DB7DataBuslines數(shù)據(jù)線0~715APowersupplyforBacklight(+)背光正極16KPowersupplyforBacklight(-)背光負極VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高。若對比度過高會產(chǎn)生“鬼影”,使用時可以通過一只10KQ電阻來調(diào)整對比度。RS為寄存器選擇端,RS為高電平時選擇數(shù)據(jù)寄存器,為低電平時選擇指令寄存器。RW為讀寫信號線,為高電平時進行讀操作,為低電平時為寫操作。當RS和RW同為低電平時可以寫入指令或者顯示地址。當RS為低電平、RW為高電平時可以讀忙信號,當RS為高電平、RW為低電平時可以寫入數(shù)據(jù)。E為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。DO?D8為位雙向數(shù)據(jù)線。表21602液晶模塊內(nèi)部的控制器的11條控制指令序號指令RSRWD7D6D5D4D3D2D1D01清顯示00000000012光標返回0000000003置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生器存儲0001字符發(fā)生存儲器地址

器地址8置數(shù)據(jù)存儲器地址001顯示數(shù)據(jù)存儲器地址9讀忙標準位或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM11讀出的數(shù)據(jù)內(nèi)容LCD1602的控制指令上表2為液晶模塊的控制指令,1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。指令1:清顯示,指令碼,光標復位到地址位置。指令2:光標復位,光標返回到地址00H。指令3:光標和顯示模式設置。其中:I/D:光標移動方向,高電平右移,低電平左移;S:屏幕上所有文字是否左移或者右移,高電平。指令4:顯示開關(guān)控制。其中:D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示;C:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標;B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位。其中:S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令。其中:DL:高電平時為4位總線,低電平時為8位總線;N低電平時為單行顯示,高電平時雙行顯示;F:低電平時顯示5X7的點陣符,高電平時顯示5X10的點陣字符。指令7:字符發(fā)生器RAM地址設置。指令8:DDRAM地址設置。指令9:讀忙信號和光標地址。其中:BF:讀忙標志位,高電平表示忙、,此時模塊不能接收命令或者數(shù)據(jù)低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。LCD1602的工作時序圖[5]f1Ll嚴EXW1UHjEH0-DE7Validifitm\7IiT圖f1Ll嚴EXW1UHjEH0-DE7Validifitm\7IiT圖9LCD1602寫操作時序圖"h]■\1L1t沁?iVIL]¥IHTVIL15B0-D37Xj'TTET■Am"h]■\1L1t沁?iVIL]¥IHTVIL15B0-D37Xj'TTET■AmXzTEH:AML!曲0圖10LCD1602讀操作時序圖LCD1602與c51的引腳接口LCD1L1M58L?XTAL1旳i.'wi刊$曲?XTAL1旳i.'wi刊$曲XTALS邏i艸;、=0卍心H?r刃04&P21'A=?盟I'A'O=2a'AMALI"PHA'A57fll.'T;£X"12PS.ilMuPl3psaiwTT=1±=>3470Pl5PSS'Tl"1GPl7卩甜嚴ps凋5畏舅監(jiān)3s=BSo£Sc A圖11圖11為LCD1602與C51的引腳接口圖。LCD1602的4腳RS(數(shù)據(jù)/命令選擇端)與C51的6腳(P1.5)相接;LCD1602的5腳RW(讀/寫選擇端)與C51的7腳(P1.6)相接;LCD1602的6腳E(使能信號)與C51的8腳(P1.7)相接;LCD1602的7~14腳(即D0~D7)分別接C51的39~32腳(即P0.0口~卩0.7口)。LCD1602的子程序(1)顯示流程圖如下圖12所示流程圖分析:首先對LCD1602顯示屏進行初始化(初始化大約持續(xù)10ms左右),然后檢查忙信號,若BF=0,則獲得顯示RAM的地址,寫入相應的數(shù)據(jù)顯示;若BF=1,則代表模塊正在進行內(nèi)部操作,不接受任何外部指令和數(shù)據(jù),直到BF=0為止。(2)程序代碼LCD1602子程序包括對1602寫指令子程序、對1602寫數(shù)據(jù)子程序、讀1602數(shù)據(jù)子程序、讀1602狀態(tài)子程序、忙檢測子程序、1602初始化子程序、1602在指定位置顯示字符子程序。//1602寫指令函數(shù)//寫指令RS二H,RW二L,D0~D7二指令碼,E二高脈沖voidLCD_write_inst(unsignedcharinst){lcd_clear_instruction();lcd_clear_write();LCD_PORT=inst;lcd_stop_work(); //E正脈沖_nop_();_nop_();lcd_begin_work();_nop_();_nop_();lcd_stop_work();}//1602寫數(shù)據(jù)函數(shù)////寫數(shù)據(jù)RS二H,RW二L,D0~D7二數(shù)據(jù),E二高脈沖voidLCD_write_data(unsignedcharcharacter){delayus(100);lcd_set_data();lcd_clear_write();LCD_PORT=character;lcd_stop_work(); //E正脈沖delayus(100);lcd_begin_work();_nop_();_nop_();lcd_stop_work();}//讀狀態(tài)RS=L,RW=H,E=HunsignedcharLCD_read_status(void){unsignedchartemp=0;lcd_stop_work();LCD_PORT=0xFF;lcd_clear_instruction();//LCM_RS=0;lcd_set_read();//LCM_RW=1;lcd_begin_work();//LCM_E=1;_nop_();_nop_();temp=LCD_PORT;_nop_();_nop_();lcd_stop_work();returntemp;}//1602忙檢查函數(shù)//返回1:忙不是操作;0:可以操作bitLCD_check_bf(void){unsignedchartemp=0;unsignedchark=0;bitbf=0; //0可以操作,1:不能操作,忙do{temp=LCD_read_status();temp=temp&BIT7;//檢測最高位狀態(tài)k++;if(k>200){bf=1;break;} //連續(xù)檢測200次為忙,跳出.}while(temp!=0); //為1不能操作,繼續(xù)檢測returnbf; //返回標志位}//1602初始化voidLCD_INIT(void){bitbff=0;lcd_stop_work();//確定狀態(tài)不工作delayms(50); //上電等待//*********寫三次0x38或0x30*************LCD_write_inst(0x38);//三次顯示模式設置,不檢測忙信號delayms(5);LCD_write_inst(0x38);delayms(5);LCD_write_inst(0x38);delayms(5);bff=LCD_check_bf();//忙檢測,不判斷.LCD_write_inst(LCD_FUNCTION_SET_8data);bff=LCD_check_bf();//忙檢測,不判斷.LCD_write_inst(LCD_CLEAR);//顯示清屏bff=LCD_check_bf();//忙檢測,不判斷.LCD_write_inst(LCD_MODE_SET_add);//顯示光標自增移動bff=LCD_check_bf();//忙檢測,不判斷.LCD_write_inst(LCD_CURS_ON);//顯示開,顯示光標}//按指定位置顯示一個字符:X表示列,y表示行.1602兩行16個字.voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){bitbff=0;Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1if(Y)X|=0x40;//當要顯示第二行時地址碼+0x40;X|=0x80;//算出指令碼 //最高位為1,寫顯示地址.bff=LCD_check_bf();//忙檢測,不判斷.LCD_write_inst(X);//寫地址bff=LCD_check_bf(); //忙檢測,不判斷.LCD_write_data(DData);}3.4.4按鍵工作原理在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。3.4.5按鍵c51的引腳接口P3QRXDPitrrxDRSWfTDP33WMT1哼阿PS即用PSTflO物理碼//10:"on/c"物理碼//10:"on/c"圖13圖13為按鍵與C51的引腳接口圖。按鍵與C51的P3.0~P3.7口分別相接。3.4.6按鍵子程序按鍵流程圖[6(]圖14)程序代碼如下所示#include<intrins.h>#include<REGX51.H>#definekeyIOP3 //鍵盤接口 圖14//////////鍵盤函數(shù)unsignedcharkey_decode(void) //鍵盤解碼{unsignedcharcodekey_code[16][2]={{7,0xEE},{4,0xED},{1,0xEB},{10,0xE7},//鍵盤編碼與邏輯編碼表{8,0xdE},{5,0xDD},{2,0xDB},{0,0xd7},{9,0xbe},{6,0xbd},{3,0xbb},{11,0xb7}, //11:"="{15,0x7e},{14,0x7d},{13,0x7b},{12,0x77} //"FX—+};unsignedcharcodekey_scan[]={0xEF,unsignedchari=0,j=0,t=0,tt=0;unsignedchartemp1;keyIO=0x0F;_nop_();_nop_();_nop_();_nop_();temp1=keyIO;if(temp1!=0x0F){for(i=0;i<4;i++){keyIO=key_scan[i];_nop_();_nop_();_nop_();_nop_0xdF,0xbF,0x7F}; //逐行掃描//鍵盤按鍵初判//IT機期周期的單片機,讀寫之間加延時//掃描第一行(列),發(fā)現(xiàn)在那一行(列)();//IT機期周期的單片機,讀寫之間加延時t=keyIO;tt=t&0x0F;if(tt!=0x0F)break;}for(j=0;j<16;j++) //查找對應的特性碼(物理碼){if(t==key_code[j][1])break;}if(j>=16)return0xFF;elsereturnkey_code[j][0]; //返回對應的邏輯碼}elsereturn0xFF;}4.調(diào)試效果與結(jié)論本設計包括光敏電阻實驗,光電二極管實驗,光電三極管實驗以及光電池、透射式光電開關(guān)、熱釋電紅外器件實驗。測量計算部分采用ADC0809作為模數(shù)轉(zhuǎn)換控制器,單片機采用C51,顯示采用LCD1602。焊接完畢后并不是一下子就成功的,發(fā)現(xiàn)LCD1602上電后不亮,經(jīng)過仔細的對每一個焊點的查看,每根線的連接,檢查出有兩根線搭在一起了。系統(tǒng)一上電,LCD1602液晶顯示出要做的實驗項目,通過按鍵選擇要做的實驗項目,比如要做光敏電阻的實驗,我們選擇按鍵“1”,光敏電阻的測試電路的輸出端輸出數(shù)據(jù),并且接到ADC0809的一個通道上,通過模數(shù)轉(zhuǎn)換器,與單片機351相連,把模擬信號轉(zhuǎn)換為數(shù)字信號,數(shù)據(jù)處理好后,在LCD1602上顯示出來。當要進行下一個實驗項目是可以選擇按鍵ON/C回到選擇菜單進行實驗的選擇。仿真圖界面的顯示圖□MIKl1.LCR2PD3.PF4.photoceHh>.1斃?tiu寶M沁匸flu 匸顯示電阻值顯示電壓值LCD1-豈示飾是電Hsfl握伏值J.CI1EL :TE:m2.PD_uolt-a9e:25400附錄原理圖:w5■erid[XCKX^r11START陽f{3EDCB4?t1&OJT1HTOJTIADOAOJT5^DOGOJT?ALEVfi=F-叫曲RJC€眄WIXlFCMJ"BQTWSPC.沁3PC.池Gpc.rrdn?=2眈P?l.'AflP22fMDP23/MIP2.J|^.12P2.&A14MoiroujF3內(nèi)羽FEPl.5iT1附錄總程序#include<REGX51.H>[7][8]externunsignedcharkey_decode(void); //聲名外部函數(shù)鍵盤,返回按鍵邏輯值(0~15)如果是Oxff,無鍵externvoidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);//外部函數(shù),LCD1602顯示程序externvoidLCD_INIT(); //LCD1602初始化externvoidDisplay_cls(void);//LCD清屏externvoidADC_INT(void);//AD0809初始化externunsignedcharAD_CONVER(unsignedcharadd);//AD轉(zhuǎn)換函數(shù)//顯示菜單unsignedcharcodeonelist[]={"1.LCR2.PD3.PT"};unsignedcharcodetwolist[]={"4.photocell "};unsignedcharcodeone_menu[]={"1.LCR_R(k):"};unsignedcharcodetwo_menu[]={"2.PD_voltage:"};unsignedcharcodethree_menu[]={"3.PT_voltage:"};unsignedcharcodefour_menu[]={"4.Photocell_V:"};unsignedchardis[5]={0x31,0x36,0x39,0x30,0x00};//顯示//全局變量unsignedcharkey_buff=0;bitkey_b=0; //用于按鍵unsignedcharaddrs=0;bitadc_check=0;//延時子程序voiddelay(unsignedintms){unsignedchari;

while(ms--)for(i=0;i<125;i++);}voidmain(void){unsignedcharm=0;unsignedintn=0;//定時器中斷初始化//定時器TO工作模式1,//定時器TO工作模式1,16位定時器////裝初值1OmsTH0=(65536-10000)/256;TL0=(65536-10000)%256;//中斷初始化ET0=1;EA=1;//啟動定時器//ADCO8O9初始化//啟動定時器//ADCO8O9初始化//LCD1602初始化ADC_INT();LCD_INIT();//////顯示菜單m=O;while(onelist[m]!=O&&m<15){DisplayOneChar(m,O,onelist[m++]);}m=O;while(twolist[m]!=O&&m<15){DisplayOneChar(m,1,twolist[m++]);}//主程序while(1){if(key_b==1)//有鍵按下{key_b=O; //清楚標志位Display_cls();//顯示器清屏switch(key_buff){case1:adc_check=1;//停止電壓檢測,標志位addrs=0; //改變測試通道m(xù)=0; //寫子菜單while(one_menu[m]!=0&&m<15){DisplayOneChar(m,0,one_menu[m++]);}break;case2:adc_check=1;addrs=1;m=0; //寫子菜單while(two_menu[m]!=0&&m<15){DisplayOneChar(m,0,two_menu[m++]);}break;case3:adc_check=1;addrs=2;m=0; //寫子菜單while(three_menu[m]!=0&&m<15){DisplayOneChar(m,0,three_menu[m++]);}break;case4:adc_check=1;addrs=3;m=0; //寫子菜單while(four_menu[m]!=0&&m<15){DisplayOneChar(m,0,four_menu[m++]);}break;case10:adc_check=0;//返回主菜單,停止電壓檢測//////顯示菜單m=0;adc_check=0;while(onelist[m]!=0&&

溫馨提示

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

評論

0/150

提交評論