




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
個人資料整理 僅限學(xué)習(xí)使用洛陽理工學(xué)院課程設(shè)計報告課程名稱 單片機原理與接口技術(shù)設(shè)計題目 基于STC單片機的實驗平臺開發(fā)設(shè)計專 業(yè)通信工程班 級學(xué) 號姓 名完成日期 2018年1月2日課程設(shè)計任務(wù)書設(shè)計題目:基于STC單片機的實驗平臺開發(fā)設(shè)計一、設(shè)計內(nèi)容利用STC系列單片機作為微控制器開發(fā)一套軟、硬結(jié)合的單片機實驗平臺,主要包括以下內(nèi)容:1.使用Proteus7.8進行仿真電路原理圖設(shè)計,主要包括LCD顯示模塊、串口通信模塊、數(shù)碼管顯示模塊、LED發(fā)光二極管、鍵盤等接口電路的設(shè)計;結(jié)合電路原理圖,在KeiluVision4軟件環(huán)境下,進行實驗平臺軟件設(shè)計。主要包括流水燈、計數(shù)器、定時器、LCD字符顯示、鍵盤控制等功能程序設(shè)計;進行電路元器件的識別,學(xué)習(xí)分立元件、集成電路等芯片的焊接方法與技巧,集中進行電路板焊接與測試;將編寫的各模塊程序下載到測試后的實驗平臺上,驗證硬件實現(xiàn)的效果是否與軟件仿真一致;結(jié)合器件選擇、原理圖設(shè)計、硬件焊接、軟件編程調(diào)試、軟硬件聯(lián)調(diào)等方面寫出課程設(shè)計報告。二、設(shè)計要求完成綜合實驗平臺的電路結(jié)構(gòu)分析,進行模塊分解,掌握各部分電路的工作原理;每組協(xié)作完成電路板的焊接,掌握故障排除方法,完成實驗平臺的硬件設(shè)計及開發(fā);/38個人資料整理 僅限學(xué)習(xí)使用3. 結(jié)合KeiluVision4軟件在焊接無誤的單片機實驗平臺上開發(fā)出流水燈、LCD顯示模塊,通信模塊等程序設(shè)計;根據(jù)分組情況,從硬件、軟件方面對學(xué)生進行逐一答辯考核;按照要求撰寫課程設(shè)計論文。指導(dǎo)教師:2018年12月16日課程設(shè)計評語成績: 指導(dǎo)教師:_______________年 月 日I/38個人資料整理 僅限學(xué)習(xí)使用基于STC89C52單片機的實驗平臺開發(fā)設(shè)計摘要本文闡述了 STC單片機實驗平臺設(shè)計原理與實現(xiàn)方法。本實驗以設(shè)計過程為主線,分別從硬件和軟件兩個方面描述設(shè)計過程,即從硬件電路的焊接到實現(xiàn)所要求功能的軟件技術(shù)。 b5E2RGbCAP此實驗平臺具有成本低、體積小、可靠性高、多功能、低功耗、操作方便等特點。設(shè)計報告介紹了該開發(fā)板的開發(fā)過程及相關(guān)硬件設(shè)計。實驗板以STC89C52單片機為核心控制器,板上資源主要包括按鍵模塊、 LED模塊、數(shù)碼管模塊、串口通信模塊等。 實驗板可以作為主控制模塊安裝于控制系統(tǒng)中執(zhí)行控制任務(wù),也可以用于高校教案,能夠完成 LED燈、按鍵、數(shù)碼管、液晶等多數(shù)通用實驗,操作簡單,性價比高,具有一定的實用價值。p1EanqFDPw關(guān)鍵詞:STC89C52,實驗平臺,數(shù)碼管,流水燈,串口通信52seriesmicrocontrollercomprehensiveexperimentalboarddevelopmentdesignDXDiTa9E3dABSTRACTInthispaperthedesignprincipleandimplementationmethodonSTCmicrocontrollerexperimentalplatform.Thisexperimentistodesignprocessasthemainline,respectivelyfromtwoaspectsofhardwareandsoftwaredescribedthedesignprocess,fromthehardwarecircuitofweldingtechnologytorealizetherequiredfunctionofsoftware.RTCrpUDGiTThisexperimentplatformisoflowcost,smallvolume,highreliability,multi-function,lowpowerconsumption,convenientoperation,etc.Designthereportintroducesthedevelopmentprocessofthedevelopmentboardandrelatedhardwaredesign.ExperimentalplateSTC89C52microcontrollerasthecorecontroller,resourcemodulemainlyincludesthebuttonsonthedigitaltube,LEDmodule,module,LCDmodule,etc.Experimentboardcanbeinstalledinthecontrolsystemasthemaincontrolmodulecontroltasks,alsocanbeusedincollegeteaching,candoLEDlights,/38個人資料整理 僅限學(xué)習(xí)使用buttons,digitaltube,liquidcrystal,suchasmostcommonexperiment,theoperationissimple,cost-effective,hascertainpracticalvalue5PCzVD7HxA.KEYWORDS: STC89C52, comprehensive experimental board, LCD, button, software andhardwarecombinedwith,andtheprogramdevelopmentdesignjLBHrnAILg目錄摘要 xHAQX74J0X目錄 ILDAYtRyKfE前言 Zzz6ZB2Ltk0第1章系統(tǒng)概述0dvzfvkwMI11.1設(shè)計題目 rqyn14ZNXI01.1.1設(shè)計目的 0EmxvxOtOco1.1.2設(shè)計內(nèi)容 SixE2yXPq501.1.3設(shè)計要求 6ewMyirQFL11.1.4設(shè)計步驟 kavU42VRUs1第2章整體設(shè)計方案1y6v3ALoS892.1開發(fā)板整體外觀 M2ub6vSTnP12.2整板電路PROTUES仿真電路 0YujCfmUCw22.3軟件功能描述 eUts8ZQVRd22.4仿真軟件PROTUES中的效果圖 3sQsAEJkW5T第3章硬件電路設(shè)計3GMsIasNXkA3.1兩位一體共陰數(shù)碼管 3TIrRGchYzg3.1.1數(shù)碼管概述 7EqZcWLZNX33.1.2數(shù)碼管內(nèi)部結(jié)構(gòu) lzq7IGf02E33.1.3兩位一體共陰數(shù)碼管和 74LS373鎖存器接口電路 4zvpgeqJ1hk3.2LCD1602液晶 NrpoJac3v153.2.1LCD1602液晶簡介 1nowfTG4KI53.2.2LCD1602液晶引腳介紹 fjnFLDa5Zo3.2.3LCD1602液晶外圍接口電路 tfnNhnE6e53.3串口通信 6HbmVN777sL3.3.1串口通訊概述 6V7l4jRB8Hs3.3.2MAX232接口電路 83lcPA59W97第4章軟件設(shè)計8mZkklkzaaP4.1程序整體流程圖 AVktR43bpw84.2程序清單 8ORjBnOwcEd第5章調(diào)試及故障分析92MiJTy0dTT5.1焊接準(zhǔn)備階段元器件測試、電路原理圖故障分析 9gIiSpiue7A5.2電路焊接過程中的故障分析 uEh0U1Yfmh95.3程序編寫過程中的故障分析 IAg9qLsgBX5.4實物演示效果 10WwghWvVhPE結(jié)論 asfpsfpi4k10謝辭 10ooeyYZTjj1參考文獻 11BkeGuInkxII/38個人資料整理 僅限學(xué)習(xí)使用附錄111PgdO0sRlMo附錄2293cdXwckm15II/38個人資料整理 僅限學(xué)習(xí)使用前言隨著電子技術(shù)的飛速發(fā)展,基于單片機的控制系統(tǒng)已廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)、電力、電子、智能樓宇等行業(yè),微型計算機作為嵌入式控制系統(tǒng)的主體與核心,代替了傳統(tǒng)的控制系統(tǒng)的常規(guī)電子線路。同時樓宇智能化的發(fā)展與成熟,也為基于單片機控制系統(tǒng)的普及與應(yīng)用奠定了堅實的基礎(chǔ)。 h8c52WOngM單片機技術(shù)在各個領(lǐng)域中正得到越來越廣泛的應(yīng)用, STC89C52單片機具有體積小、集成度高、可靠性強、低功耗、結(jié)構(gòu)簡單等特點。現(xiàn)在許多現(xiàn)代先進設(shè)備,如汽車電子、智能樓宇、手機等設(shè)備的智能化控制,都普遍地使用控制機。基于STC89C52單片機的實驗平臺因其具有操作靈活,精度高,易于控制,設(shè)計簡單等優(yōu)點而成為優(yōu)選的對象。 v4bdyGious基于電子技術(shù)的不斷發(fā)展,大規(guī)模集成電路的運用越來越普遍,用CPLD/FPGA來開發(fā)新產(chǎn)品是電子技術(shù)發(fā)展必然趨勢。目前各高校逐步開設(shè)了單片機課程和可編程器件設(shè)計課程,而兩門課程往往是獨立開設(shè),尤其是實驗,而實驗是檢驗理論正確與否的試金石,是學(xué)好兩門課程的重要手段和方法。學(xué)習(xí)并運用單片機知識控制簡單的單片機實驗平臺是計算機專業(yè)學(xué)生應(yīng)當(dāng)具備的基本能力,對以STC89C52為主控實驗平臺的課程設(shè)計能極大地鍛煉學(xué)生對單片機知識的實踐能力。J0bm4qMpJ9第1章 系統(tǒng)概述1.1 設(shè)計題目基于STC89C52系列單片機的實驗平臺開發(fā)設(shè)計1.1.1設(shè)計目的通過本課程設(shè)計,使學(xué)生熟悉單片機控制系統(tǒng)的組成與原理以及開發(fā)流程,對電子產(chǎn)品的制作調(diào)試及基本焊接方法有深入的理解,鞏固單片機、接口等理論知識,提高學(xué)生動手設(shè)計的能力及獨立分析問題和解決問題的能力、綜合設(shè)計及創(chuàng)新能力。XVauA9grYP1.1.2設(shè)計內(nèi)容電路原理圖設(shè)計,實現(xiàn)LED發(fā)光二極管、數(shù)碼管顯示器、LCD液晶顯示器、鍵盤、串口等模塊在Proteus環(huán)境下電路的仿真設(shè)計。bR9C6TJscw2.學(xué)習(xí)集成電路等芯片的焊接方法與技巧、實際元器件的識別,完成PCB板焊接。3.在KeilC環(huán)境下,進行模塊化程序設(shè)計。包括鍵盤、流水燈、數(shù)碼管、0/38個人資料整理 僅限學(xué)習(xí)使用液晶等控制功能程序的編寫,實現(xiàn)模塊化編程,并加上詳細的注釋。pN9LBDdtrd針對所開發(fā)的實驗板,結(jié)合器件選擇、原理圖設(shè)計、硬件焊接、軟件編程調(diào)試、軟硬件聯(lián)調(diào)等方面撰寫課程設(shè)計報告。DJ8T7nHuGT1.1.3設(shè)計要求完成綜合實驗平臺的電路結(jié)構(gòu)分析,進行模塊分解,掌握各部分電路的工作原理;獨立完成電路板的焊接,掌握故障排除的方法,完成實驗平臺的硬件設(shè)計及開發(fā);運用KeilC集成開發(fā)環(huán)境,在焊接無誤的單片機實驗平臺上編寫流水燈、數(shù)碼管顯示、LCD顯示,通信模塊等程序,并具體實現(xiàn);QF81D7bvUA按照要求撰寫課程設(shè)計論文。1.1.4設(shè)計步驟熟悉單片機實驗平臺工作原理、KeilC、Proteus軟件的聯(lián)合調(diào)試方法、STC89C52實驗板的基本組成、原理和使用方法。4B7a9QFw9h學(xué)生根據(jù)課程設(shè)計的任務(wù)書,設(shè)計出合適的方案,制定焊接與調(diào)試步驟,進行元器件的焊接。通過串口實現(xiàn)上位機與下位機的通信,編寫的各模塊程序經(jīng)調(diào)試無誤后,下載到單片機中,查看實際運行效果。根據(jù)課程設(shè)計要求寫出設(shè)計報告。第2章整體設(shè)計方案1.1開發(fā)板整體外觀圖1開發(fā)板整體外觀1/38個人資料整理 僅限學(xué)習(xí)使用1.2整板電路PROTUES仿真電路圖2整板電路PROTUES仿真電路1.3軟件功能描述軟件整體分為計數(shù)器、流水燈、數(shù)碼管及液晶 4種模式,其中流水燈、數(shù)碼管及液晶模式下各分 3種狀態(tài)。1. SW2~5為4個控制開關(guān),選擇計數(shù)器、流水燈、數(shù)碼管及液晶 4種模式。計數(shù)器模式<SW2),可以實現(xiàn)0~99計數(shù),并在數(shù)碼管上顯示,SW5退出。流水燈模式<SW2退出后再次按下SW1),此模式下SW3選擇左循環(huán),SW4選擇回蕩式循環(huán),SW5模擬音量循環(huán)。ix6iFA8xoX數(shù)碼管模式<SW3),SW2和SW4實現(xiàn)“L2”“H3”的顯示切換,SW5為計時器,實現(xiàn)0~59s計時。wt6qbkCyDE5. 液晶模式<SW4),SW2液晶顯示課程設(shè)計信息, SW5顯示個人信息。上電運行時液晶會一直顯示提示信息。2/38個人資料整理 僅限學(xué)習(xí)使用1.4仿真軟件PROTUES中的效果圖圖3仿真軟件 PROTUES中的效果圖第3章 硬件電路設(shè)計3.1兩位一體共陰數(shù)碼管1.1.5數(shù)碼管概述常見的LED數(shù)碼管為“8”字型的,共計 8段。每一段對應(yīng)一個發(fā)光二極管。有共陽極和共陰極兩種,如圖 4所示。共陰極發(fā)光二極管的陰極連在一起,通常公共陰極接地。當(dāng)陽極為高電平時,發(fā)光二極管發(fā)光。 Kp5zH46zRk同樣,共陽極發(fā)光二極管的陽極連接在一起,公共陽極接正電壓,當(dāng)某個發(fā)光二極管的陰極接低電平時,發(fā)光二極管發(fā)光,顯示相應(yīng)的段。 Yl4HdOAA611.1.6數(shù)碼管內(nèi)部結(jié)構(gòu)實驗板使用的兩位一體的共陰極發(fā)光數(shù)碼管,其內(nèi)部引腳已經(jīng)連好,引腳如圖4所示<正面朝自己,小數(shù)點在下方)。a、b、c、d、e、f、g、dp為段引腳,圖5中Y0表示數(shù)碼管的位選端。ch4PJx4BlI3/38個人資料整理 僅限學(xué)習(xí)使用圖4八段LED數(shù)碼管結(jié)構(gòu)及外形表1:共陽極數(shù)碼管字模表顯示0123456789字模0xc00xf90xa40xb00x990x920x820xf80x800x90表2:共陰極數(shù)碼管字模表顯示0123456789字模0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f1.1.7兩位一體共陰數(shù)碼管和 74LS373鎖存器接口電路圖5數(shù)碼管和 74LS373鎖存器接口電路本實驗板采用74LS138<3-8譯碼器)位選兩位數(shù)碼管,其中Y0,Y1分別是兩個數(shù)碼管的位選端,位選控制信號送到圖5中74LS373鎖存器,通過鎖存器驅(qū)動數(shù)碼管顯示,實驗板中共用了兩個鎖存器來驅(qū)動數(shù)碼管。 qd3YfhxCzo4/38個人資料整理 僅限學(xué)習(xí)使用1.2LCD1602液晶1.2.1LCD1602液晶簡介1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5*7或者5*11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用。 E836L11DO51602LCD是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個字符液晶模塊<顯示字符和數(shù)字)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。S42ehLvE3M1.2.2LCD1602液晶引腳介紹如圖6,1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:VSS為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高<對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。501nNvZFis第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1>時進行讀操作,低電平(0>時進行寫操作。第6腳:E(或EN>端為使能(enable>端,高電平<1)時讀取信息,負跳變時執(zhí)行指令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負極。5/38個人資料整理 僅限學(xué)習(xí)使用圖6LCD1602引腳圖1.2.3LCD1602液晶外圍接口電路實驗板中使用 3-8譯碼器的Y2端作為選通端,如圖 7,當(dāng)Y2端為高電平時NPN三極管處于高阻狀態(tài),負跳變時 LCD_EN端使能并驅(qū)動 LCD1602,顯示字模。jW1viftGw9圖7LCD1602液晶外圍接口電路3.3串口通信3.3.1串口通訊概述52系列單片機的串口有4個模式,可分別用作串并轉(zhuǎn)換、并串轉(zhuǎn)換、異步串行通信<2種模式)。異步串行通信中,有1+8+1和1+8+1+1兩種幀格式,多機通信是特殊的通信方式?;驹硎莾山M移位寄存器。將并行通信轉(zhuǎn)換成串行通信模式<發(fā)送部分),或反之<接收部分)。也可全雙工運行。 xS0DOYWHLP6/38個人資料整理 僅限學(xué)習(xí)使用串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)據(jù)從CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。應(yīng)用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求 <打開串口),通信完成后必須釋放資源 <關(guān)閉串口)。LOZMkIqI0w3.3.2MAX232接口電路圖8MAX232接口電路原理圖7/38個人資料整理 僅限學(xué)習(xí)使用第4章 軟件設(shè)計4.1程序整體流程圖開始SW2提示SW4計數(shù)器退出計數(shù)器SW2選擇模式SW3SW4流水燈數(shù)碼管SW3SW4SW5液晶SW2SW4SW5SW2SW4SW5左花累L2H3計循樣加信結(jié)留切切時環(huán)循模息束下?lián)Q換器環(huán)式介語備紹用結(jié)束ZKZUQsUJed圖9程序整體流程圖4.2程序清單表3程序清單及功能介紹程序名頭文件功能main.creg52.h主程序模式選擇Delay.cdelay.h延時函數(shù)Key.ckey.h開關(guān)選擇LED1.cled1.h流水燈LED2.cled2.h數(shù)碼管LCD.clcd.h液晶顯示LED1_switch.cled1_switch.h流水燈模式LED2_switch.cled2_switch.h數(shù)碼管模式LCD_switch.clcd_switch.h液晶模式8/38個人資料整理 僅限學(xué)習(xí)使用第5章 調(diào)試及故障分析5.1焊接準(zhǔn)備階段元器件測試、電路原理圖故障分析焊接電路錢應(yīng)該先對各器件識別、測試,包括二極管,色環(huán)電阻,電容,按鍵開關(guān),自鎖開關(guān),排阻,芯片等。然后按照所給的電路圖正確焊接。dGY2mcoKtT元器件的識別與測試方法不止一種。例如,發(fā)光二極管可以直接識別引腳的長短來判斷正負,長引腳的為正極,也可利用萬用表合適的歐姆檔接在二極管兩端,看是否會亮;此實驗平臺的電容分電解電容、陶瓷電容兩種,電解電容不分正負極,電解電容長引腳的為正極,電容上的標(biāo)識表示電容的大?。簧h(huán)電阻一般比較難識別,可以直接用萬用表測量其阻值;按鍵開關(guān)分并行的兩路導(dǎo)通與斷開的,焊接時應(yīng)注意所需要的狀態(tài),自鎖開關(guān)也分為并行的兩排,共有六個引腳,焊接前應(yīng)先測量,以免出錯。rCYbSWRLIA電路原理圖故障分析:圖中 3-8譯碼器的接法出現(xiàn)矛盾, E1端為使能端,反而接在GND,低電平不能使 3-8譯碼器工作,經(jīng)過仿真電路測試,將 E1端接在P1.5引腳,作為3-8譯碼器的使能控制端;原理圖中譯碼器的引腳位置與實際電路也存在出入,但不存在邏輯錯誤,實際焊接電路的時候需要特別注意。FyXjoFlMWh5.2電路焊接過程中的故障分析首先對電路板中可能存在虛焊的地方用萬用表一一檢查,并對焊接不牢固的焊點進行修補。上電前用萬用表測得單片機的 GND與VCC是導(dǎo)通的,通過老師講解才知道電路板在設(shè)計的時候存在缺陷, USB接口與電源插口的連線需要斷開。上電下載程序時MAX芯片存在問題,更換一個MAX232芯片下載程序正常。測試時一個數(shù)碼管有一段接觸不良,通過修補數(shù)碼管的排母得到解決。TuWrUpPObX一般在不知問題出在何處的情況下利用萬用表從最可能存在問題的地方開始用進行逐步排查,找出電路中錯誤的地方,然后進行修改。一般根據(jù)二極管單向?qū)?、電容通交流阻直流的特性等,幫助檢查電路的錯誤。 7qWAq9jPqE5.3程序編寫過程中的故障分析編程調(diào)試過程中使用中斷作為計數(shù)器的觸發(fā)條件,但是實際電路中按鍵觸發(fā)中斷時會發(fā)生抖動,造成計數(shù)不準(zhǔn)確,后改成開關(guān)作為觸發(fā)條件,并在程序中進行消除抖動的操作,計數(shù)器的功能完整實現(xiàn)。llVIWTNQFk由于對模塊化編程的熟悉程度還不夠,剛開始使用模塊化方法編寫程序時常忘記添加進工作組,軟件編譯過程中也很難查找到錯誤。不過警告可以很好的提示程序編譯過程中的問題。模塊化編程使程序更清晰明了,程序編寫還應(yīng)該注9/38個人資料整理 僅限學(xué)習(xí)使用意一個問題,很好的程序應(yīng)該具備明確的注釋及說明文檔。 yhUQsDgRT15.4實物演示效果圖10實物演示效果結(jié)論本文研究了基于AT89C52單片機的實驗平臺的設(shè)計原理與實現(xiàn)方法,包括硬件與軟件設(shè)計。實現(xiàn)了單片機的基本功能的仿真、實際電路中的調(diào)試功能。對單片機原理及應(yīng)用中定時器、中斷、LED、LCD、按鍵、數(shù)碼管等原理有了系統(tǒng)的了解,并能很好地在實際電路中實現(xiàn)程序的控制。MdUZYnKS8I本次單片機課程設(shè)計,學(xué)到了單片機實際應(yīng)用的許多東西,即使在實驗過程中遇到了很多問題,但最終都在隊友的相互配合下得以解決,解決問題的過程中不僅學(xué)到了很多書本上難以理解的問題,也明白一個道理:團隊的力量大于個人能力。實習(xí)中隊友無比激情地去面對每個需要解決的問題,每一個焊點都會認真對待,經(jīng)過深思熟慮、團隊討論之后得出最好的解決方案,完成焊接測試的任務(wù)。09T7t6eTno課程知識與實際實踐的結(jié)合,使自己對單片機的實際應(yīng)用有了更深刻的理解。軟硬件結(jié)合,靈活運用所學(xué)知識解決實際問題。通過這次課程設(shè)計,提高了自己的課題分析能力,編程能力,和解決實際綜合問題的能力。 e5TfZQIUB5謝辭本論文的完成需特別感謝老師的精心指導(dǎo)。在本課題的設(shè)計過程中,通過老師耐心的指導(dǎo)和隊友李曉穎、劉書全的通力合作,受到很多的啟發(fā),并學(xué)到許多單片機的理論實踐知識。同時聯(lián)系到大學(xué)兩年所學(xué)的相關(guān)專業(yè)知識,加深10/38個人資料整理 僅限學(xué)習(xí)使用了對單片機系統(tǒng)的認識。在老師的諄諄教導(dǎo)下,掌握了許多相關(guān)專業(yè)知識,從而有機會有可能完成這個設(shè)計,從而學(xué)到很多有關(guān)單片機的實踐知識,除對于書本上理論知識的鞏固與加深外,對于自己的動手能力也有很大的提高。在此也衷心的感謝身邊的同學(xué)和朋友給我的關(guān)心和指導(dǎo)。s1SovAcVQM參考文獻李蒙毛建東編單片機原理及應(yīng)用[M].北京:中國輕工業(yè)出版社,2018[2] 林立張俊亮編 單片機原理及應(yīng)用:基于 Proteus和KeilC[M]. 北京:電子工業(yè)出版社,2018.1[3] 丁明亮,唐前輝。 51單片機應(yīng)用設(shè)計與仿真 [M]. 北京:北京航空航天大學(xué)出版社,2009[4]徐愛鈞,彭秀華。單片機高級語言編程與應(yīng)用實踐[M].北京:電子工業(yè)出版社,2008.[5]李學(xué)禮?;赑roteus的8051單片機實例教程[M].北京:電子工業(yè)出版社,2008.[6]郭天祥編新概念51單片機C語言教程:入門、提高、開發(fā)、擴展全攻略[M].北京:電子工業(yè)出版 ,2009.1附錄1單片機源程序主函數(shù)#include"delay.h"http://延時的頭文件#include"lcd.h"http://液晶的頭文件#include"led1.h"http://LED燈的頭文件#include"led2.h"http://數(shù)碼管的頭文件#include"key.h"http://開關(guān)選擇的頭文件#include"led1_switch.h"http://選擇流水燈模式的頭文件#include"led2_switch.h"#include"lcd_switch.h"#include<reg52.h>/********************************************************************GXRw1kFW5sfunction:sbit*explain:位及變量的定義*add:********************************************************************/UTREx49Xj9sbitKey1=P3^2。//Key1sbitKey3=P3^4。//Key3sbitKey4=P3^5。//Key4sbitLS138_EN=P1^5。//74LS138ucharcount=0。ucharmod[]={0x3f,0x06,0x5b,0x4f,0x66,11/38個人資料整理 僅限學(xué)習(xí)使用0x6d,0x7d,0x07,0x7f,0x6f} 。 //共陰極數(shù)碼管字模voidcount_sys(>{LS138_EN=1。 //74LS138 G引腳低電平有效EN_Y0(>。P0=mod[count%10]。delay_1ms(10>。EN_Y1(>。P0=mod[count/10]。delay_1ms(10>。}/********************************************************************function:main* explain: 開機顯示 welcometouse 隨后提示開關(guān)控制* add :********************************************************************/voidmain(void>{intmode_switch。charflag=0。IT0=1。IE=0x81。P0=0x00。welcome(>。 // 歡迎使用delay_1ms(1500>。point(>。 // 提示信息while(flag==0>{// Key4while(Key4==0>{
8PQN3NDYyPmLPVzx7ZNwdelay_1ms(10>。if(Key4==0>{flag=1。}}count_sys(>。 // 計數(shù)器while(Key1==0>{delay_1ms(10>。if(Key1==0>{12/38個人資料整理 僅限學(xué)習(xí)使用count++。 // 計數(shù)值if(count==100>{count=0。}}while(Key1==0>。}}while(flag==1>{mode_switch=Key_mode(>。switch(mode_switch>{case1:LED1_switch(>。 // Key1流水燈模式break。case2:LED2_switch(>。 // 數(shù)碼管模式break。case3: // 液晶模式LCD_switch(>。break。}}}延時函數(shù)#include"delay.h"/********************************************************************function:delay_1ms* explain: 實現(xiàn)timems延時* add :********************************************************************/voiddelay_1ms(uinttime>{uchari。while(time-->
AHP35hB02dNDOcB141gTfor(i=0。i<120。i++>。}voiddelay_us(uinty> //微秒級延時{for(。y>0。y-->。}開關(guān)選擇函數(shù)#include"key.h"13/38個人資料整理 僅限學(xué)習(xí)使用#include"delay.h"#include<reg52.h>/********************************************************************function:sbit*explain:開關(guān)位定義*add:********************************************************************/sbitKey1=P3^2。//Key1LED的各種循環(huán)顯示sbitKey2=P3^3。//Key2sbitKey3=P3^4。//Key3sbitKey4=P3^5。//Key4/********************************************************************function:Key_modeexplain:開機/復(fù)位選擇工作模式add:********************************************************************/intKey_mode(void>{intmode。Key1if(Key1==0>{delay_1ms(10>。if(Key1==0>{mode=1。 // 流水燈模式}}Key2if(Key2==0>{delay_1ms(10>。if(Key2==0>{mode=2。 // 數(shù)碼管模式}}Key3if(Key3==0>{delay_1ms(10>。if(Key3==0>{mode=3。 // 液晶模式
1zOk7Ly2vAfuNsDv23KhtqMB9ew4YXHmMJFY05dE14/38個人資料整理 僅限學(xué)習(xí)使用}}returnmode。}流水燈#include"led1.h"#include"lcd.h"#include"delay.h"#include<reg52.h>#include<intrins.h> /*循環(huán)左移函數(shù) *//******************************************************************** ViLRaIt6skfunction:LED_LEFT_CIR* explain: LED左循環(huán)的函數(shù) 改回非遞歸的函數(shù)* add :********************************************************************/ 9eK0GsX7H1voidLED_LEFT_CIR(void>{chartemp。charcount_led=0。temp=0xfe。 //fe是11111110P2=temp。 //最上面的 LED亮for(count_led=0。count_led<8。count_led++>{temp=_crol_(temp,1>。 //循環(huán)左移一位delay_1ms(100>。P2=temp。}}/******************************************************************** naK8ccr8VIfunction:LED_RIGHT_CIR* explain: LED右循環(huán)的函數(shù)* add :********************************************************************/ B6JgIVV9aovoidLED_RIGHT_CIR(void>{chartemp。charcount_led=0。temp=0x7f。 //fe是11111110P2=temp。 //最上面的 LED亮for(count_led=0。count_led<8。count_led++>{temp=_cror_(temp,1>。 //循環(huán)右移一位delay_1ms(100>。P2=temp。15/38個人資料整理 僅限學(xué)習(xí)使用}}/********************************************************************function:LED_ADD_CIR********************************************************************/voidLED_ADD(void>{ucharled=0x80。ucharyiwei=0x40。P2=0x00。while(1>{delay_1ms(100>。P2=led。led=led+yiwei。if(led==0xff>break。yiwei>>=1。}while(1>{delay_1ms(150>。led=led-yiwei。P2=led。if(yiwei==0x40>{P2=0x80。delay_1ms(100>。break。}yiwei<<=1。}}voidLR(void>{LED_LEFT_CIR(>。LED_RIGHT_CIR(> 。}流水燈模式選擇#include"led1_switch.h"#include"led1.h"#include"delay.h"#include<reg52.h>/********************************************************************* function: sbit
P2IpeFpap53YIxKpScDMgUHFg9mdSs16/38個人資料整理 僅限學(xué)習(xí)使用* explain: 開關(guān)位定義* add :********************************************************************/sbitKey2=P3^3。//Key2左循環(huán)sbitKey3=P3^4。//Key3右循環(huán)sbitKey4=P3^5。//Key4花樣循環(huán)/********************************************************************function:LED1_switch* explain: 選擇LED的循環(huán)模式* add :********************************************************************/voidLED1_switch(void>{int led1_switch。while(1>{Key2if(Key2==0>{delay_1ms(10>。if(Key2==0>{led1_switch=2。 // 左循環(huán)}}Key3if(Key3==0>{delay_1ms(10>。if(Key3==0>{led1_switch=3。 // 右循環(huán)}}Key4if(Key4==0>{delay_1ms(10>。if(Key4==0>{led1_switch=4。 // 花樣循環(huán)}}switch(led1_switch>
uQHOMTQe79IMGWiDkflPWHF4OmOgAw17/38個人資料整理 僅限學(xué)習(xí)使用{case2:LED_LEFT_CIR(>。 // 左循環(huán)break。case3:LR(>。// 右循環(huán)break。case4:LED_ADD(>。 // 花樣break。}}}數(shù)碼管#include"led2.h"#include"delay.h"#include<reg52.h>/******************************************************************** aDFdk6hhPd* function: sbit及相應(yīng)變量的定義* explain:* add :********************************************************************/ ozElQQLi4Tsbit LS138_A=P2^5。 // 3-8譯碼器的地址選擇線 其中為高位sbitLS138_B=P2^6。sbitLS138_C=P2^7。sbitLS138_EN=P1^5。//74LS138uchari,num=0。ucharflag=0,t=1。 // 定義延時 1S的標(biāo)志位ucharled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} 。 //共陰極數(shù)碼管字模ucharled_mod1[]={0x38,0x5b,0x76,0x4f} 。 //L2H3CvDtmAfjiA/******************************************************************** QrDCRkJkxhfunction:EN_Y0* explain: 使能Y0口 打開LED1* add :********************************************************************/ 4nCKn3dlMXvoidEN_Y0(void>{LS138_C=0。LS138_B=0。 // 000 Y0 為低電平 使能Y0LS138_A=0。}18/38個人資料整理 僅限學(xué)習(xí)使用/********************************************************************function:EN_Y1* explain: 使能Y1口 打開LED2* add :********************************************************************/voidEN_Y1(void>{
ijCSTNGm0EvfB1pxanfkLS138_C=0。LS138_B=0。//001Y1為低電平使能Y0LS138_A=1。}/********************************************************************JbA9VhEou1function:L2* explain: 顯示L2* add :********************************************************************/voidL2(void>{LS138_EN=1。 //74LS138 G引腳低電平有效EN_Y1(>。P0=led_mod1[0]。delay_1ms(10>。EN_Y0(>。P0=led_mod1[1]。delay_1ms(10>。}/********************************************************************
X7Ahr18pJIb3zqXLCqXofunction:H3* explain: 顯示H3* add :********************************************************************/voidH3(void>{LS138_EN=1。 //74LS138 G引腳低電平有效EN_Y1(>。P0=led_mod1[2]。delay_1ms(10>。EN_Y0(>。P0=led_mod1[3]。delay_1ms(10>。}/********************************************************************function:watchexplain:秒表顯示函數(shù)
pZyytu5rc5DVyGZezsrM19/38個人資料整理 僅限學(xué)習(xí)使用* add :********************************************************************/ RQxPvY3tFsvoidwatch(void>{intshi=0,ge=0。TMOD=0x01。 //0x01=00000001,定時器T0,工作方式 1TH0=60。 //裝初值,定時50ms,軟件循環(huán) 20次TL0=176。TR0=1。 //打開定時器P0=0x3f。 //開始全置0while(1>{while(TF0>//使用查詢方式實現(xiàn){t++。TF0=0。//TF0清零,循環(huán)定時20次}if(t==18>{t=1。num++。shi=num/10。ge=num%10。}while(num==60> //判斷計數(shù)到{num=0。}EN_Y1(>。P0=led_mod[shi]。 //顯示十位數(shù)delay_us(500>。EN_Y0(>。P0=led_mod[ge]。 //顯示個位數(shù)delay_us(500>。}}數(shù)碼管選擇#include"led2_switch.h"#include"led2.h"#include"delay.h"#include<reg52.h>/********************************************************************function:sbit* explain: 開關(guān)位定義* add :
S時,數(shù)碼管從零計數(shù)5MxX1IxuU920/38個人資料整理 僅限學(xué)習(xí)使用********************************************************************/sbitKey1=P3^2。//Key1顯示L2sbitKey3=P3^4。//Key3顯示H3sbitKey4=P3^5。//Key4顯示秒表/********************************************************************function:LED2_switch* explain: 選擇LED的循環(huán)模式* add :********************************************************************/voidLED2_switch(void>{int led2_switch。while(1>{Key1if(Key1==0>{delay_1ms(10>。if(Key1==0>{led2_switch=1。 // 左循環(huán)}}Key3if(Key3==0>{delay_1ms(10>。if(Key3==0>{led2_switch=3。 // 右循環(huán)}}Key4if(Key4==0>{delay_1ms(10>。if(Key4==0>{led2_switch=4。 // 花樣循環(huán)}}switch(led2_switch>{case1:
jIw5xs0v9PxEve2buwnwKAvmyVYxCd21/38個人資料整理 僅限學(xué)習(xí)使用L2(>。break。case3:H3(>。break。case4:watch(>。break。}}}液晶顯示#include"lcd.h"#include"lcd_switch.h"#include"delay.h"#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitRS=P1^6。sbitRW=P1^7。ucharLCD_Status。/********************************************************************function:sbit及相應(yīng)變量的定義explain:add:********************************************************************/sbit LS138_A=P2^5。 // 3-8譯碼器的地址選擇線為高位sbitLS138_B=P2^6。sbitLS138_C=P2^7。sbitLS138_EN=P1^5。//74LS138/********************************************************************function:EN_Y2explain:add:********************************************************************/voidEN_Y2(void>{LS138_C=0。LS138_B=1。//010LS138_A=0。}/********************************************************************* function: EN_Y7
Ywuu4FszRTcstDApWA6A其中qotL69pBkhEksTCSTCzXSgs28CnDOE22/38個人資料整理 僅限學(xué)習(xí)使用* explain:********************************************************************/ 6craEmRE2kvoidEN_Y7(void>{LS138_C=1。LS138_B=1。 // 111LS138_A=1。}/****************************************************************** 檢查忙函數(shù)function:BF<BusyFlag)位為忙標(biāo)志。explain:BF=1,表示忙,LCM不能接收命令和數(shù)據(jù);* BF=0,表示LCM不忙,可以接收命令和數(shù)據(jù)。* ADD :*****************************************************************/ucharBusy_Check(>{
k8qia6lFh1y3qrGQOGwIRS=0。RW=1。//RS=0控制寄存器RW=1讀EN_Y2(>。delay_1ms(2>。//E為使能端LCD_Status=P0。//讀出LCD狀態(tài)delay_1ms(2>。EN_Y2(>。 EN_Y7(>。 // 當(dāng) E出現(xiàn)負跳變時,液晶模塊執(zhí)行命令returnLCD_Status。}/***************************************************************** MZpzcAiHKo*function: wcmd*explain: 寫命令函數(shù) RS=0。RW=0。* ADD :*****************************************************************/ 0VoHIjMIZ5voidwcmd(ucharcmd>{while((Busy_Check(>&0x80>==0x80> 。 // 判斷設(shè)備處于忙狀態(tài)RS=0。RW=0。 // 指令寄存器寫入EN_Y2(>。 //E置高等待負跳變寫入P0=cmd。 // 命令由P0送入LCDdelay_1ms(2>。EN_Y7(>。 // 負跳變 執(zhí)行命令}/***************************************************************** dRoQe3gJeM*function: wdat*explain: 寫數(shù)據(jù)函數(shù) RS=1。RW=0。23/38個人資料整理 僅限學(xué)習(xí)使用* ADD :*****************************************************************/voidwdat(uchardat>{
rNnYJNKKtswhile((Busy_Check(>&0x80>==0x80> 。 // 判斷設(shè)備處于忙狀態(tài)RS=1。RW=0。 // 數(shù)據(jù)寄存器寫入EN_Y2(>。P0=dat。 // 命令由P0送入LCDdelay_1ms(2>。EN_Y7(>。 // 負跳變寫入數(shù)據(jù)}/***************************************************************** FJn6fxdLH9*function: LCD_Init*explain: LCD 初始化* ADD :*****************************************************************/ TFmfLhHMWPvoidLCD_Init(>{wcmd(0x38>。delay_1ms(20>。 // 00111000 8bit數(shù)據(jù)接口N=1雙行顯示 F=05*7點陣字符 7Blnh0bNbwwcmd(0x01>。delay_1ms(20>。 // 00000001 清屏wcmd(0x06>。delay_1ms(20>。 // 00000110// I/D=1光標(biāo)左->右當(dāng)讀或?qū)懸粋€字符后 地址指針加 1// 且光標(biāo)加 1向右移動一個字符位置// S=0寫入一個字符整屏顯凈漂wcmd(0x0e>。delay_1ms(20>。 //00001110 D=1,開顯示 C=1,有光標(biāo) B=0,字符不閃爍 lxlvNKFOpd}/******************************************************************function:point*explain: 主程序進來顯示開關(guān)模式的提示信息* ADD :*****************************************************************/voidpoint(>{wcmd(0x80+0x00>。 //第1行第1列顯示“1.Light"LCD_Init(>。wdat('1'>。wdat('.'>。wdat('L'>。wdat('i'>。
ztkEju9PETNpjMPeCQTA24/38個人資料整理 僅限學(xué)習(xí)使用wdat('g'>。wdat('h'>。wdat('t'>。wcmd(0x80+0x09>。 //第1行第10列顯示“2.LED"wdat('2'>。wdat('.'>。wdat('L'>。wdat('E'>。wdat('D'>。wcmd(0x80+0x40>。 //第2行第1列顯示“3.LCD"wdat('3'>。wdat('.'>。wdat('L'>。wdat('C'>。wdat('D'>。wcmd(0x80+0x49>。 //第2行第10列顯示“4.ADD"wdat('4'>。wdat('.'>。wdat('A'>。wdat('D'>。wdat('D'>。}/***************************************************************** 1ljUlY6R8h*function: course_design*explain: 顯示“洛陽理工學(xué)院課程設(shè)計 ”* ADD :*****************************************************************/ fhi3RIASmXvoidcourse_design(>{LCD_Init(>。wcmd(0x80+0x00>。 // 顯示 "LIT"wdat('L'>。wdat('I'>。wdat('T'>。wcmd(0x80+0x04>。 //顯示"coursedesign"wdat('C'>。wdat('o'>。wdat('u'>。wdat('r'>。wdat('s'>。wdat('e'>。wdat('D'>。wdat('e'>。wdat('s'>。25/38個人資料整理 僅限學(xué)習(xí)使用wdat('i'>。wdat('g'>。wdat('n'>。wcmd(0x80+0x47>。//顯示B11050707swdat('B'>。wdat('1'>。wdat('1'>。wdat('0'>。wdat('5'>。wdat('0'>。wdat('7'>。wdat('0'>。wdat('7'>。while(1>。}/******************************************************************function: GOOD_BYE*explain: 顯示GOODBYE* ADD :*****************************************************************/voidGOOD_BYE(>{
scibnr4TBEG8hjTbyUQkLCD_Init(>。//0x80wcmd(0x80+00>。//寫入顯示緩沖區(qū)起始地址為第1行第1列wdat('G'>。//第1行第1列顯示字母“G”wdat('O'>。wdat('O'>。wdat('D'>。wcmd(0x80+0x07>。wdat('B'>。wdat('Y'>。wdat('E'>。wcmd(0x80+0x44>。//寫入顯示緩沖區(qū)起始地址為第2行第10列wdat('-'>。wdat('-'>。wdat('H'>。wdat('o'>。wdat('u'>。wdat('S'>。wdat('h'>。wdat('a'>。wdat('o'>。wdat('L'>。26/38個人資料整理 僅限學(xué)習(xí)使用wdat('i'>。wdat('n'>。while(1>。}/******************************************************************function: welcometouse*explain: 顯示welcometouse 89C51SYS* ADD :*****************************************************************/voidwelcome(>{LCD_Init(>。wcmd(0x80+00>。wdat('w'>。wdat('e'>。wdat('l'>。wdat('c'>。wdat('o'>。wdat('m'>。wdat('e'>。wdat(''>。wdat('t'>。wdat('o'>。wdat(''>。wdat('u'>。wdat('s'>。wdat('e'>。wcmd(0x80+0x47>。wdat('8'>。wdat('9'>。wdat('C'>。wdat('5'>。wdat('1'>。wdat('_'>。wdat('S'>。wdat('Y'>。wdat('S'>。}液晶開關(guān)選擇#include"lcd_switch.h"#include"lcd.h"#include"led2.h"#include"delay.h"#include<reg52.h>
U4gspV1V4180gAVFvXjI27/38個人資料整理 僅限學(xué)習(xí)使用/******************************************************************
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45200-2025飼料中新甲基橙皮苷二氫查耳酮的測定高效液相色譜法
- 鐵路鋼板樁施工方案
- 掛籃0 專項施工方案
- 穿孔鋁板龍骨施工方案
- 公路擋土墻施工方案
- 二零二五年度醫(yī)院醫(yī)護人員正式勞動合同范本發(fā)布
- 2025年度航空航天技術(shù)合作意向協(xié)議合同
- 二零二五年度農(nóng)村宅基地使用權(quán)轉(zhuǎn)讓與農(nóng)村集體產(chǎn)權(quán)制度改革合同
- 2025年度洗衣店門店經(jīng)營權(quán)轉(zhuǎn)讓協(xié)議
- 2025年洗車機租賃與新能源汽車充電設(shè)施配套服務(wù)合同
- 阿那亞-社群營銷課件
- 糖尿病性眼肌麻痹的護理查房
- 泡泡瑪特展廳活動策劃
- 健康生活方式與健康促進的科學(xué)研究
- 《沃爾瑪企業(yè)物流成本控制現(xiàn)狀及完善對策研究》22000字
- 工程項目成本核算表格
- 文旅部門消防培訓(xùn)課件
- 中職語文課件:1.1《送瘟神》課件14張2023-2024學(xué)年中職語文職業(yè)模塊
- 胃瘍(消化性潰瘍)中醫(yī)護理方案
- 《Unit-2-Cute-animals課件》小學(xué)英語牛津上海版四年級下冊14875
- 《哲學(xué)概論(第2版)》-課件全套 第0-6章 緒論、哲學(xué)的形態(tài)-馬克思主義哲學(xué)
評論
0/150
提交評論