freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于51單片機(jī)的紅外計數(shù)系統(tǒng)設(shè)計畢業(yè)論文(編輯修改稿)

2024-07-21 16:35 本頁面
 

【文章內(nèi)容簡介】 流,一般為1 * 108 1X10 9A(稱為暗電流),此時相當(dāng)于光敏二極管截止。當(dāng)有光照射時,PN結(jié)附近受光子的轟擊,半導(dǎo)體內(nèi)被束縛的價電子吸收光子能量而被擊發(fā)產(chǎn)生電子一空穴對O這些載流子的數(shù)目,對于多數(shù)載流子影響不大,但對P區(qū)和N區(qū)的少數(shù)載流子來說,則會使少數(shù)載流子的濃度大大提高,在反向電壓作用下,反向飽和漏電流大大增加,形成光電流,該光電流隨入射光強(qiáng)度的變化而相應(yīng)變化。光電流通過負(fù)載RL時,在電阻兩端將得到隨人射光變化的電壓信號。光敏二極管就是這樣完成電功能轉(zhuǎn)換的。 顯示電路設(shè)計本設(shè)計的顯示電路部分包括三個共陰極的兩位八段數(shù)碼管和一個LED飽和報警燈。三個數(shù)碼管分別顯示進(jìn)入人次,離開人次和停留人數(shù)。LED燈亮?xí)r,表示超過最大飽和人數(shù)。兩位八段數(shù)碼管有8個段選接口和2個位選接口。段選接口控制數(shù)碼管的8個LED燈的亮滅來控制不同的字形輸出,位選接口則控制哪個數(shù)碼管顯示字形,具體結(jié)構(gòu)如下圖211所示。本設(shè)計采用掃描的方式,由第一個595控制段選信號,輸出字形,第二個595控制位選信號,不停的使6個數(shù)碼管依次循環(huán)點(diǎn)亮,顯示我們需要的數(shù)據(jù)。飽和報警LED采用普通的發(fā)光二極管。具體接法如下圖212所示:圖211 八段數(shù)碼管結(jié)構(gòu)圖圖212 顯示電路接法 系統(tǒng)開發(fā)流程此次系統(tǒng)的開發(fā)一般大致分為五個階段:此階段是該統(tǒng)軟件開發(fā)與硬件設(shè)計的立論之處,主要確定系統(tǒng)開發(fā)的開發(fā)目標(biāo)。此階段中根據(jù)對任務(wù)書要求分析的結(jié)果,先對硬件系統(tǒng)進(jìn)行設(shè)計,其中包含對所需原件分析,從價格性能以及使用難易度情況的角度,選擇最合適的原件。當(dāng)硬件系統(tǒng)設(shè)計好之后,對整個軟件系統(tǒng)進(jìn)行設(shè)計,如系統(tǒng)框架設(shè)計等。軟件設(shè)計一般分為總體設(shè)計和詳細(xì)設(shè)計。好軟件設(shè)計將為軟件程序編寫打下良好的基礎(chǔ)。此階段是將軟件設(shè)計的結(jié)果轉(zhuǎn)化為上位機(jī)以及下位機(jī)運(yùn)行的程序代碼。在程序編碼中必定要制定統(tǒng)一、符合標(biāo)準(zhǔn)的編寫規(guī)范。以保證程序的可讀性、易維護(hù)性。提高程序的運(yùn)行效率。在軟件設(shè)計完成之后要進(jìn)行嚴(yán)密的測試,一發(fā)現(xiàn)軟件在整個軟件設(shè)計過程中存在的問題并加以糾正。本設(shè)計的軟硬件聯(lián)合測試分為兩步,首先在proteus里進(jìn)行仿真,若仿真成功,證明此方案可行。然后做出實(shí)物,焊接好電路板,直接燒錄測試程序進(jìn)行測試。第三章軟件系統(tǒng)設(shè)計 軟件總體設(shè)計 該畢業(yè)設(shè)計的下位機(jī)選用了單片機(jī)以及其紅外收發(fā)模塊,編輯語言選用了c語言。原因之后章節(jié)陳述。由于個人電腦在國內(nèi)已經(jīng)很普及,所以上位機(jī)選用了個人電腦。編輯語言選用了vb語言。原因之后章節(jié)陳述。上位機(jī)程序與下位機(jī)程序通過串口程序模塊相互通信。 下位機(jī)程序設(shè)計 下位機(jī)由單片機(jī)最小系統(tǒng)模塊,顯示模塊以及驅(qū)動模塊和紅外模塊共同構(gòu)成,下位機(jī)程序設(shè)計就是單片機(jī)的程序設(shè)計,實(shí)現(xiàn)對數(shù)碼管的實(shí)時控制、紅外傳感器的信號接收處理,加上能夠與上位機(jī)進(jìn)行串口通信的功能設(shè)計。下位機(jī)主程序流程圖31如下所示: 圖31下位機(jī)主程序流程圖 Keil 開發(fā)環(huán)境下位機(jī)程序即單片機(jī)內(nèi)的程序,這里我們選用經(jīng)典的Keil環(huán)境,使用C語言進(jìn)行開發(fā)。Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。 串口通信程序設(shè)計系統(tǒng)采用串行中斷的方式進(jìn)行通信。MCS51單片機(jī)的五個中斷源兩種類型:一類是外部中斷源;另一類是內(nèi)部中斷源,包括兩個定時器/計數(shù)器(T0和T1)的溢出中斷和串行口的接收和發(fā)送中斷。MCS51單片機(jī)設(shè)置了4個專用寄存器用于中斷控制,分別為定時器控制寄存器(TCON),串行口中斷控制器(SCON),中斷允許控制寄存器(IE),中斷優(yōu)先級控制寄存器(IP)。編程時通過設(shè)置其狀態(tài)來管理中斷系統(tǒng)。在編輯中斷程序時首先是將中斷控制寄存器(IE)初始化。其控制位分布如表。EA為中斷允許總控制位,EA=1時CPU開發(fā)中斷;EA=0時,CPU屏蔽所有中斷。ES、ET、EXET0、EX0為對應(yīng)的串行口中斷、定時器/計數(shù)器1中斷、外部中斷1中斷、定時器/計數(shù)器0中斷、外部中斷0中斷的中斷允許位。對應(yīng)位為1時允許其中斷,對應(yīng)位為0時,禁止其中斷。如表31所示:表31 中斷允許寄存器格式D7D6D5D4D3D2D1D0EA——ESET1EX1ET0EX0由于本次設(shè)計只是用了串口中斷和定時/計數(shù)器0中斷,指令為 ES=1。ET0=1。還需打開全局中斷位,指令為EA=1。所以初始化時設(shè)定中斷允許寄存器初值為0X52,指令為 IE=0X52。程序設(shè)計時還要考慮到中斷優(yōu)先級的問題。因為不同的中斷同時產(chǎn)生而CPU響應(yīng)的順序取決于內(nèi)部查詢順序。中斷優(yōu)先級寄存器在特殊功能寄存器中, IP用來設(shè)定各個中斷源屬于兩級中斷的哪一級。該寄存器可以進(jìn)行位尋址,即可對該寄存器的每一位進(jìn)行單獨(dú)操作。單片機(jī)復(fù)位時IP全部被清零。本次設(shè)計設(shè)定串口中斷優(yōu)先級為第一優(yōu)先級,定時/計數(shù)器0中斷為次級優(yōu)先級,所以設(shè)定中斷優(yōu)先級寄存器IP=0x10。設(shè)置串口工作方式1,波特率4800,計算可得計數(shù)器初值的十六進(jìn)制表示為0XF3。在主程序中先進(jìn)行了串行中斷的初始化,初始化內(nèi)容包括了串行工作方式選擇,波特率的設(shè)定,計數(shù)初值的設(shè)定。程序開始進(jìn)入中斷等待,當(dāng)PC機(jī)向單片機(jī)發(fā)送數(shù)據(jù)時產(chǎn)生中斷接收允許位RI置1,將SBUF(緩沖寄存器)中的值輸入到暫存器中進(jìn)行數(shù)據(jù)處理。首先判斷RI的值是否為1,如果是則開始接收起始位后的2個字節(jié),共16位。每回接收一個字節(jié)。第一個為清零信號(當(dāng)發(fā)送為0時表示清零,存在Q變量中)。第二個字節(jié)存有最大飽和人數(shù)信息(收到的數(shù)據(jù)保存在Maxnum中)。若果RI不為0,則不會進(jìn)入中斷程序。接收完上位機(jī)發(fā)來的控制命令數(shù)據(jù)之后,下位機(jī)便會自行處理數(shù)據(jù),然后執(zhí)行。串口中斷服務(wù)程序程序流程圖如圖32所示:圖32串口中斷服務(wù)程序程序流程圖所有軟件編寫完成后都必須經(jīng)過編譯才能被單片機(jī)識別使用。為了減小軟件的修改和優(yōu)化難度,先把各子程序?qū)憺橐粋€可單獨(dú)執(zhí)行的完整程序。各子程序編譯沒有錯誤后再輸入單片機(jī)進(jìn)行驗證,這兩項都通過后再將所有的程序整合到一起形成一個完整的程序再進(jìn)行編譯和驗證[7]。此段程序的核心代碼為:串口初始化:TH1=0xf3。TL1=0xf3。 //設(shè)置定時器初值PCON=0x80。 //設(shè)置波特率為4800SM0=0。SM1=1。 //工作方式為01REN=1。 EA=1。 ES=1。數(shù)據(jù)的接收以及發(fā)送程序核心代碼:void UART_SER (void) interrupt 4 //串行中斷服務(wù)程序{ if(RI) //判斷為接收 { RI=0。 //接收標(biāo)志位清零 TR0=0。 //關(guān)閉定時器中斷(此中斷程序功能實(shí)時掃描數(shù)碼管的顯示數(shù)據(jù)) if(ZDflag==0) { QL=SBUF。 //接收清零命令 ZDflag=1。 } else { Maxnum=SBUF。 //接收最大飽和人數(shù)命令 ZDflag=0。 TR0=1。 } } if(TI) //判斷為發(fā)送 { TI=0。 //發(fā)送標(biāo)志位清零 }} 數(shù)碼管顯示程序設(shè)計8段數(shù)碼管屬于LED發(fā)光器件的一種。LED發(fā)光器件一般常用的有兩類:數(shù)碼管和點(diǎn)陣。8段數(shù)碼管又稱為8字型數(shù)碼管,分為8段:A、B、C、D、E、F、G、P。其中P為小數(shù)點(diǎn)。數(shù)碼管常用的有10根管腳,每一段有一根管腳,另外兩根管腳為一個數(shù)碼管的公共端,兩根之間相互連通,本設(shè)計選用2位共陰8段數(shù)碼管。用單片機(jī)驅(qū)動LED數(shù)碼管有很多方法,按顯示方式分,有靜態(tài)顯示和動態(tài)顯示。首先介紹靜態(tài)顯示方法。靜態(tài)顯示就是顯示驅(qū)動電路具有輸出鎖存功能,單片機(jī)將所有要顯示的數(shù)據(jù)送出后就不再控制LED,直到下一次顯示時再傳送一次新的顯示數(shù)據(jù)。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用的CPU時間少。靜態(tài)顯示中,每一個顯示器都要占用單獨(dú)的具有鎖存功能的I/O接口,該接口用于筆劃段字型代碼。這樣單片機(jī)只要把要顯示的字形代碼發(fā)送到接口電路,該字段就可以顯示發(fā)送的字形。要顯示新的數(shù)據(jù)時,單片機(jī)再發(fā)送新的字形碼。另一種方法是動態(tài)掃描顯示。動態(tài)掃描方法是用其接口電路把所有顯示器的8個筆畫段ah同名端連在一起,而每一個顯示器的公共極COM各自獨(dú)立的受I/O線控制。CPU向字段輸出口送出字形碼時,所有顯示器接收到相同的字形碼,但究竟是哪個顯示器亮,則取決于COM段,而這一段是由I/O控制的,由單片機(jī)決定何時顯示哪一位了。動態(tài)掃描用分時的方法輪流控制各個顯示器的COM端,使各個顯示器輪流點(diǎn)亮。在輪流點(diǎn)亮掃描過程中,每位顯示器的點(diǎn)亮?xí)r間極為短暫,但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余暉效應(yīng),給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù)??紤]到需要時時更新和顯示進(jìn)入空間人數(shù),離開空間人數(shù),空間所留人數(shù),所以選用了動態(tài)掃描用分時的方法輪流控制各個顯示器的COM端,使各個顯示器輪流點(diǎn)亮三個2位8段數(shù)碼管。在此設(shè)計中,每對數(shù)碼管段選數(shù)據(jù)需要八位,位選需要兩位。由于將3對數(shù)碼管的段選數(shù)據(jù)線接在了一起,所以對數(shù)碼管顯示控制一共需要十四位數(shù)據(jù),八位段選數(shù)據(jù)位,6位數(shù)碼管位選數(shù)據(jù)線。即共需要兩個八位字節(jié)的字。數(shù)據(jù)結(jié)構(gòu)為:由于共需14位,所以前兩位數(shù)據(jù)為空,緊接著6位位選數(shù)據(jù),8位段選數(shù)據(jù)。由于本次設(shè)計中采用了定時/計數(shù)器中斷來進(jìn)行數(shù)碼管的動態(tài)掃描,所以在調(diào)節(jié)好定時器時間情況下可以做到實(shí)時的顯示進(jìn)出圖書館的人流量情況。數(shù)碼管顯示的流程為:,使程序進(jìn)入數(shù)碼管掃描中斷函數(shù)中。由于需要動態(tài)掃描,即不斷掃描實(shí)時更新數(shù)據(jù),所以在數(shù)碼管掃描中斷函數(shù)中需要從新初始化定時計時器,使其從新開始計時。,將數(shù)據(jù)處理模塊所處理好的數(shù)據(jù)也就是數(shù)碼管顯示緩存數(shù)組disbuff中的元素按照數(shù)碼管編號依次輸入,即a變量從0到5循環(huán),使該步驟實(shí)現(xiàn)。數(shù)碼管顯示中斷程序流程如33圖所示: 33圖數(shù)碼管顯示中斷程序流程圖數(shù)碼管顯示中斷子程序以及數(shù)據(jù)顯示鎖存子程序的源程序為:void t0() interrupt 1 //數(shù)碼管掃描{ TR0 = 0。 TH0=(65535500)/256。 TL0=(65535500)%256。 TR0 = 1。 Ser_IN([a])。 Ser_IN(disbuff[a])。 Par_OUT()。 a++。 if(a==6) {a=0。} }void Ser_IN(uchar Data)//74hc595數(shù)據(jù)輸入子程序{uchar i。for(i=0。i8。i++) {SH_CP=0。 //先置為低DS=Dataamp。0x01。//取數(shù)據(jù)的最低位Data=1。 //講數(shù)據(jù)的次低位移到最低位,為下一次取數(shù)據(jù)做準(zhǔn)備SH_CP=1。 // 再置為高,產(chǎn)生移位時鐘上升沿,儲存器里的數(shù)據(jù)移位,數(shù)據(jù)輸入 }}void Par_OUT(void)//數(shù)據(jù)鎖存子程序{ST_CP=0。 //先置為低ST_CP=1。 //再置為高,產(chǎn)生時鐘上升沿,上升沿時,數(shù)據(jù)并行輸出} 數(shù)據(jù)處理程序設(shè)計此設(shè)計中,對進(jìn)出人流量數(shù)據(jù)的處理是本次設(shè)計程序下位機(jī)部分的核心。程序的流程為:,傳感器會把人進(jìn)出信號傳給單片機(jī);即人通過入口時,變量RedIn值為0,同時程序檢測RedIn,當(dāng)其值為0時給變量k賦值39。+39。;即人通過入口時,變量RedOut值為0,同時程序檢測RedOut,當(dāng)其值為0時給變量k賦值39。39。;最后返回k值;標(biāo)題為檢測紅外收發(fā)器是否有變化的子函數(shù)指令為下:unsigned char RedScan() //檢測紅外收發(fā)器是否有變化{ unsigned char k = 39。\039。 if ( RedIn == 0 ) k = 39。+39。 if ( RedOut == 0 ) k = 39。39。 return k。},如果檢測到k不在等于初值39。\039。,即k的值有變化時,程序就會對要由數(shù)碼管顯示的值做處理。當(dāng)有人進(jìn)入時,即k的值為39。+39。時,IN(其值代表進(jìn)入的人數(shù),初值為0)的值就會自加1,STAND(其值代表圖書館內(nèi)的現(xiàn)有人數(shù),初值為0)的值就會自加1,向上位機(jī)傳輸增加1人的命令;當(dāng)有人進(jìn)入時,即k的值為39。39。時,IN(其值代表進(jìn)入的人數(shù),初值為0)的值就會自減1,STAND(其值代表圖書館內(nèi)的現(xiàn)有人數(shù),初值為0)的值就會自減1,向上位機(jī)傳輸減少1人的命令。此段程序為: switch ( k ) //判斷進(jìn)出,執(zhí)行具體功能 { case 39。+39。: IN++。 STAND++。 SBUF=0x01。 //向上位機(jī)傳輸增加1人的命令 break。 case 39。39。: OUT++。 STAND。 SBUF=0x02。 //向上位機(jī)傳輸減少1人的命令 break。 default: break。 },OUT,STAND進(jìn)行處理,使收集到的人流量情況裝換成數(shù)碼管顯示所需的數(shù)據(jù)類型。數(shù)碼管賦值子函數(shù)需要兩個輸入變量。一個為確定數(shù)碼管編號的變量i,給i賦值為0,即選擇編號為in的數(shù)碼管,給s賦值為進(jìn)入圖書館的人數(shù),隨即處理該人數(shù),分別算出其各位數(shù)和十位數(shù),然后將可供數(shù)碼管顯示的顯示信息從數(shù)組tab中調(diào)出,存入定義的緩存數(shù)組disbuff(由于有六個數(shù)碼管需要顯示,所以定義disbuff有6個元素)第一個元素和
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1