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

正文內(nèi)容

[工學(xué)]單片機(jī)的課程設(shè)計綜合應(yīng)用實例-資料下載頁

2025-02-16 01:02本頁面
  

【正文】 2X11 2 MC13 0 p FC23 0 p FC31 0 u FR11 0 kD714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3L C D 1L M 0 1 6 L50%R V 11k234567891R P 11 0 k2Q1NP NL S 1S O UN D E R紅 1L E D R E D紅 2L E D R E D藍(lán) 3L E D R E D藍(lán) 4L E D R E D紅 5L E D R E D紅 6L E D R E D橙 7L E D R E D橙 8L E D R E D圖 1321 超聲波測距報警器仿真電路 ? 本章介紹了 STC89C52單片機(jī)系列的引腳和其對應(yīng)的功能,并且給出了單片機(jī)的接口和各部分的電路連接情況。在 C語言程序中,可以通過 define來定義單片機(jī)與各個模塊的接口。超聲波測距模塊選擇了超聲波傳感器作為測距的工具,并且給出了各部分的電路連接圖,使得每部分的結(jié)構(gòu)與功能一目了然。從而奠定了倒車防撞系統(tǒng)的硬件基礎(chǔ),下一章將詳細(xì)的介紹單片機(jī)的 C語言源程序設(shè)計。 ? 系統(tǒng)軟件部分的設(shè)計 ? 1. 軟件部分設(shè)計分析 ? 在汽車倒車防撞系統(tǒng)的設(shè)計中,我采用了 C語言來進(jìn)行編程。首先利用 C語言的宏定義 define語句來定義各個管腳的連接,將每個管腳表示成為便于理解的字符,在程序中可以直接對字符進(jìn)行賦值,以實現(xiàn)對單片機(jī)輸出端口的控制。 ? 根據(jù)各個部分功能的不同,可以將整個過程劃分為若干個模塊。每個模塊都是實現(xiàn)一定功能并且相互獨立的程序段,這種方法叫做模塊程序設(shè)計法,利用模塊的辦法設(shè)計倒車報警系統(tǒng),能夠簡化開發(fā)流程,并且使邏輯過程更加一目了然。對于特定的模塊,可以直接將已經(jīng)發(fā)展的很完善的模塊程序加以使用,不用再對于各個部分重新設(shè)計。例如對超聲波發(fā)射啟動模塊的設(shè)計,對 LCM讀寫數(shù)據(jù)和指令控制的模塊設(shè)計等等。 ? 超聲波測距報警器的 C語言程序主要有以下幾個部分(模塊)組成,第一個部分是主程序部分,即是通過 C語言的主函數(shù)來實現(xiàn),主程序部分統(tǒng)領(lǐng)各個部分的分工與合作,調(diào)用各個模塊以實現(xiàn)測距和報警的功能;第二個部分是超聲波發(fā)生程序,第三個部分是超聲波接收程序,第四個部分是距離計算子程序。 ? 2. 主程序設(shè)計 圖 1322 主程序 設(shè)計流程圖 ? 主程序的實現(xiàn)步驟如下: ? 1) 主程序首先對系統(tǒng)環(huán)境進(jìn)行初始化,設(shè)置定時器 T0的工作模式, ? 2) 調(diào)用超聲波發(fā)送子程序發(fā)出超聲波脈沖,同時計數(shù)器開始計時。 ? 3) 當(dāng)接受到返回超聲波信號時,將計數(shù)器 T0中斷,讀取計數(shù)時間。 ? 4) 根據(jù)讀取時間和 Count計算距離子程序來計算障礙物距離并顯示。 ? 5) 根據(jù)障礙物距離判斷是否報警,利用 if、 else語句實現(xiàn)。 ? 主程序清單如下: ? /*********************************************************/ ? void main(void) ? { speak=0。 ? P1=0xff。 ? Delay400Ms()。 //啟動等待,等 LCD進(jìn)入工作狀態(tài) ? LCDInit()。 //LCD初始化 ? Delay400Ms()。 ? DisplayListChar(0, 0, uctech)。//顯示第 0行 ? DisplayListChar(0, 1, )。 //顯示第 1行 ? ReadDataLCD()。 //測試用句無意義 ? Delay400Ms()。 ? DisplayListChar(0, 1, Cls)。 ? while(1) ? { key1()。 ? key2()。 ? key3()。 ? xianshi()。 ? ? } ? } ? 3. 超聲波發(fā)射子程序 ? ,通過單片機(jī)產(chǎn)生脈沖信號經(jīng)過發(fā)射端驅(qū)動電路,使超聲波探頭產(chǎn)生超聲波。在 C語言中可以將超聲波發(fā)射定義為 StartModule的函數(shù),設(shè)定TX=1,即將 1值賦給 TX端口時,模塊啟動一次,隨后利用延時函數(shù) nop構(gòu)成完整的啟動模塊子程序。 ? 超聲波發(fā)射程序程序清單如下: ? /********************************************************/ ? void StartModule() //啟動模塊 ? { ? TX=1。 //啟動一次模塊大約 10us的方波 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? _nop_()。 ? TX=0。 ? } ? 4. 超聲波接收子程序 ? ,用 define定義為 RX,在軟件程序的設(shè)計中,需要利用 器的開啟與關(guān)斷,從而能夠得出超聲波在空氣中傳播的時間。對于定時器的開啟與關(guān)斷,可以通過 while語句來實現(xiàn),通過 while語句能夠很好的將 RX的狀態(tài)與定時器的狀態(tài)聯(lián)系起來,用 while語句表示,當(dāng) RX的值為 0時, TR0=1,即是開啟計時器計數(shù)。當(dāng)超聲波返回被接收模塊所接收的時候, TR1=0,此時計數(shù)器關(guān)斷,則可以根據(jù)計數(shù)器的時間差來求得超聲波在空氣中傳播的時間。 ? 超聲波接收端 RX用來啟動和關(guān)斷定時器,部分程序如下: ? while(!RX)。 //當(dāng) RX為零時等待 ? TR0=1。 //開啟計數(shù) ? while(RX)。 //當(dāng) RX為 1計數(shù)并等待 ? TR0=0。 //關(guān)閉計數(shù) ? Conut()。 //計算 ? delayms(20)。 //80MS ? 5. 距離計算子程序 ? 啟動發(fā)射電路的時候同時啟動單片機(jī)內(nèi)部定時器 T0,利用定時器的計數(shù)功能記錄超聲波的發(fā)射時間和反射波的接收時間。當(dāng)收到超聲波反射時,利用 while語句中斷計時器計數(shù),時間根據(jù) T0計時器的高位 TH0和低位 TL0的讀數(shù)來計算, time=TH0*256+TL0;求出時間之后,再根據(jù)時間計算障礙物的距離, S=(time*)/100。 因為分母是 100,所以求出來的結(jié)果單位是厘米。 ? /********************************************************/ ? void Conut(void)//計算距離 ? { ? time=TH0*256+TL0。 ? TH0=0。 ? TL0=0。 ? S=(time*)/100。 ? 6. 報警判斷子程序 ? 若距離在一個可測距離 4cm到 50cm時, LCD1602顯示距離,顯示橙色燈。若距離小于預(yù)先設(shè)置的 4cm時, LCD顯示 Danger,進(jìn)行聲光報警。當(dāng)距離大于 50cm時, LCD顯示 Satety,并且閃綠燈。 ? 部分源程序如下: ? if(SSmall) //小于測量范圍顯示 Danger ? { ? flag=0。 ? speak=1。 ? P1=0xcc。 ? DisplayOneChar(10, 1, 39。D39。)。 ? DisplayOneChar(11, 1,39。a39。)。 ? DisplayOneChar(12, 1, 39。n39。)。 ? DisplayOneChar(13, 1, 39。g39。)。 ? DisplayOneChar(14, 1, 39。e39。)。 ? DisplayOneChar(15, 1, 39。r39。)。 ? } ? if(SLarge) //超出測量范圍顯示 Satety ? { ? flag=0。 ? speak=1。 ? P1=0xf3。 ? delayms(10)。 ? speak=0。 ? P1=0xff。 ? DisplayOneChar(10, 1, 39。S39。)。 ? DisplayOneChar(11, 1,39。a39。)。 ? DisplayOneChar(12, 1, 39。t39。)。 ? DisplayOneChar(13, 1, 39。e39。)。 ? DisplayOneChar(14, 1, 39。t39。)。 ? DisplayOneChar(15, 1, 39。y39。)。 ? } ? if(S=Smallamp。amp。S=Large)//檢測距離 ? { ? speak=0。 ? P1=0x3f。 ? disbuff[0]=(long)S%1000/100。 ? disbuff[1]=(long)S%1000%100/10。 ? disbuff[2]=(long)S%1000%100%10。 ? disbuff[3]= (long)((S(long)S)*10)%10。 ? DisplayOneChar(9, 1, ASCII[disbuff[0]])。 ? DisplayOneChar(10, 1, ASCII[disbuff[1]])。 ? DisplayOneChar(11, 1,ASCII[disbuff[2]] )。 ? DisplayOneChar(12, 1,ASCII[10] )。 ? DisplayOneChar(13, 1,ASCII[disbuff[3]] )。 ? DisplayOneChar(14, 1, ASCII[13])。 ? DisplayOneChar(15, 1, ASCII[12])。 ? } ? } ? 7. LCM的部分程序 ? 在汽車防撞報警器的設(shè)計中,采用 P0端口與 LCD數(shù)據(jù)輸入相連,并且并聯(lián)一個排阻,以提高電路的安全性和可靠性。在軟件設(shè)計中,首先利用 define宏定義將 P0端口定義為 LCM_Data,即使 LCD模塊數(shù)據(jù)輸入端口的意思。然后再通過賦值給 LCM_Data以達(dá)到對 P0端口的控制。 ? 在 P2端口的電路連接中, LCD的信號控制線 RS, RW, E口相連。在軟件設(shè)計中,首先利用 define語句定義好接口,將 RS, RW,將 E,便于直接在 C程序中直接操作 RS/RW/E接口,以分別實現(xiàn)對LCD信號控制線的控制。要實現(xiàn)讀 /寫數(shù)據(jù),讀 /寫指令,可以根據(jù)對 RS/RW/E的賦值來實現(xiàn)對 LCD寄存器的選擇。 ? 例如寫數(shù)據(jù)的子函數(shù)程序如下: ? //寫數(shù)據(jù) ? void WriteDataLCD(unsigned char WDLCD) ? { ? ReadStatusLCD()。 //檢測忙 ? LCD_Data = WDLCD。 ? LCD_RS = 1。 ? LCD_RW = 0。 ? LCD_E = 0。 //若晶振速度太高可以在這后加小的延時 ? LCD_E = 0。 //延時 ? Delay5Ms()。 //不加延時通不過 PROTEUS仿真 ? LCD_E = 1。 ? } ? 8. 實物的測試 ? 經(jīng)過 Keil軟件對程序進(jìn)行編譯和連接之后,生成拓展名為 .HEX的文件,將 STC89C52單片機(jī)插入編程器插座內(nèi),通過編程器將程序燒寫到單片機(jī)內(nèi)。然后接通 USB電源,打開開關(guān)按鈕, LCD屏幕上顯示的是我和合作人的名字簡寫,下面一行顯示的是“ Supersonic”。 ? 在進(jìn)行測試的過程中,當(dāng)障礙物接近 4厘米以內(nèi)的時候,系統(tǒng)的蜂鳴器開始響, LED燈也同時亮。說明能夠正常運(yùn)行和實現(xiàn)功能,在一
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1