【《基于單片機(jī)的全自動(dòng)加濕器的設(shè)計(jì)(附代碼)》12000字(論文)】_第1頁
【《基于單片機(jī)的全自動(dòng)加濕器的設(shè)計(jì)(附代碼)》12000字(論文)】_第2頁
【《基于單片機(jī)的全自動(dòng)加濕器的設(shè)計(jì)(附代碼)》12000字(論文)】_第3頁
【《基于單片機(jī)的全自動(dòng)加濕器的設(shè)計(jì)(附代碼)》12000字(論文)】_第4頁
【《基于單片機(jī)的全自動(dòng)加濕器的設(shè)計(jì)(附代碼)》12000字(論文)】_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于單片機(jī)的全自動(dòng)加濕器的設(shè)計(jì)目錄第一章前言 [5]。圖3-1STM32F103C8T6模塊為了使該設(shè)計(jì)更加智能化,該項(xiàng)目擬定使用STM32F103C8T6單片機(jī)為系統(tǒng)控制器的CPU。采用STM32F103C8T6對(duì)各個(gè)模塊進(jìn)行監(jiān)測(cè)和控制,減少外部設(shè)備的連接,提高工作效率。單片機(jī)接收從傳感器檢測(cè)電路輸入的邏輯信號(hào)和脈沖信號(hào),并將輸入的信號(hào)進(jìn)行處理分析運(yùn)算,以控制電流或控制電壓的形式輸出給被控制的單元模塊,完成系統(tǒng)的各項(xiàng)任務(wù)。STM32F103C8T6模塊如圖3-圖3-1STM32F103C8T6模塊3.2STM32最小系統(tǒng)(1)復(fù)位電路復(fù)位電路是構(gòu)成單片機(jī)最小系統(tǒng)不可缺少的一部分,是單片機(jī)系統(tǒng)的初始化操作,單片機(jī)在每次啟動(dòng)之后都會(huì)先進(jìn)行復(fù)位,從而使系統(tǒng)達(dá)到初始化狀態(tài)。其主要功能是把單片機(jī)程序的開始地址初始化為0000H,讓程序從0000H單元開始執(zhí)行。圖3-2復(fù)位電路當(dāng)單片機(jī)碰到各種因素的問題無法正常運(yùn)行時(shí),便可使用復(fù)位按鍵進(jìn)行復(fù)位,使其回到初始狀態(tài)。STM32F103C8T6采用的是高電平復(fù)位,在通過給復(fù)位端接一個(gè)下拉電阻,并接一個(gè)電容到電源完成上電復(fù)位,在上電初電源給電容充電導(dǎo)通,復(fù)位端相當(dāng)于連接到高電平,進(jìn)行復(fù)位。電容充電完成后高電平斷開,復(fù)位端口被電阻拉低退出復(fù)位狀態(tài)。復(fù)位電路如圖3-圖3-2復(fù)位電路(2)時(shí)鐘電路STM32有5個(gè)時(shí)鐘源HSI、HSE、LSI、LSE、PLL其中,高速時(shí)鐘(HSE和HSI)提供給芯片主體的主時(shí)鐘.低速時(shí)鐘(LSE和LSI)只是提供給芯片中的RTC(實(shí)時(shí)時(shí)鐘)及獨(dú)立看門狗使用。內(nèi)部時(shí)鐘是在芯片內(nèi)部RC振蕩器產(chǎn)生的,起振較快,所以時(shí)鐘在芯片剛上電的時(shí)候,默認(rèn)使用內(nèi)部高速時(shí)鐘。而外部時(shí)鐘信號(hào)是由外部的晶振輸入的,在精度和穩(wěn)定性上都有很大優(yōu)勢(shì),所以上電之后我們?cè)偻ㄟ^軟件配置,轉(zhuǎn)而采用外部時(shí)鐘信號(hào)。時(shí)鐘電路如圖3-3所示。圖3-3時(shí)鐘電路端口OSC_OUT和OSC_IN是連接到高速外部時(shí)鐘HSE,以外部晶振作時(shí)鐘源,晶振頻率可取范圍為4~16MHz,兩個(gè)引腳分別接到外部晶振8MHz,端口OSC32_OUT和OSC32_IN是連接到低速外部時(shí)鐘圖3-3時(shí)鐘電路3.3電源模塊作為電路的必不可少缺少的一部分,電源的控制是十分重要的。此次設(shè)計(jì)選用現(xiàn)在市面上主流的Type-C端口,作為電源的輸入口。采用輸入電壓5V的供電方式,為整個(gè)電路的主供電。由于其中單片機(jī)所需的供電為3.3V,故采用三端穩(wěn)壓芯片AMS1117-3V3進(jìn)行降壓處理,使其達(dá)到單片機(jī)所需要的工作電壓。電源模塊電路如圖3-4所示。圖3-4電源模塊電路3.4超聲波霧化電路超聲波霧化是國(guó)內(nèi)外應(yīng)用較廣的一種加濕方式。在工作時(shí)無機(jī)械驅(qū)動(dòng)、無噪音干擾、無污染,故障率低、能耗低、霧化效率高、維護(hù)簡(jiǎn)便、可靠。超聲波霧化器是利用電子高頻震蕩,通過與陶瓷霧化片的高頻諧振,將液態(tài)水分子結(jié)構(gòu)打散而產(chǎn)生自然飄逸的水霧,不需加熱或添加任何化學(xué)試劑。與加熱霧化方式比較,能源節(jié)省了90%。另外在霧化過程中將釋放大量的負(fù)離子,其與空氣中漂浮的煙霧、粉塵等產(chǎn)生靜電式反應(yīng),使其沉淀[6]。電路由一個(gè)三極管控制電路,以及NE555所構(gòu)成的多諧振蕩器構(gòu)成。三極管控制電路由單片機(jī)GPIO口控制,當(dāng)單片機(jī)PA2口輸出為高電平時(shí),三極管Q1導(dǎo)通,電源通過繼電器線圈經(jīng)三極管到地,同時(shí)在線圈導(dǎo)通同時(shí)繼電器常開觸點(diǎn)閉合,從而使NE555芯片上電。當(dāng)單片機(jī)PA2口輸出為低電平時(shí),三極管Q1截止,繼電器不導(dǎo)通,超聲波霧化電路停止工作。當(dāng)NE555芯片上電,電源通過R12和R13對(duì)電容C17充電,當(dāng)NE555芯片檢測(cè)到電容C17電壓小于供電電壓1/3時(shí),其端口3輸出高電平,端口7放電截止。當(dāng)電容C17充電到供電電壓的2/3時(shí),端口3輸出翻轉(zhuǎn)為0,此時(shí)端口7放電端導(dǎo)通,電容C17通過電阻R13放電,使電容C17電壓下降,當(dāng)電容C17電壓下降到供電電壓1/3時(shí),輸出端口3又進(jìn)行翻轉(zhuǎn),端口7放電截止,電容C17又開始充電。如此周而復(fù)始,從而在輸出端3得到一個(gè)連續(xù)變化的振蕩脈沖波形。陶瓷霧化片工作頻率約在107KHZ左右,因此通過調(diào)整電阻R12和R13以及電容C17的值來進(jìn)行選頻,使其產(chǎn)生合適的工作頻率[7]。脈沖寬度TL=0.7*R12*C17,由電容C放電時(shí)間決定;TH=0.7(R1+R2)C,由電容C充電時(shí)間決定,脈沖周期T=TH+TL,頻率F=1/T,由此可得電阻R12為27Ω,電阻R13為68Ω,電容C17為10NF。在經(jīng)過NE555產(chǎn)生特定的頻率之后,再把頻率信號(hào)傳送給N型MOS管,由MOS管源級(jí)的三腳電感進(jìn)行升壓,達(dá)到能驅(qū)動(dòng)霧化片的電壓頻率。超聲波霧化電路如圖3-5所示。圖3-5超聲波霧化電路3.5溫濕度監(jiān)測(cè)電路方案一:在一般情況下,檢測(cè)環(huán)境中的溫濕度有許多種方法,其中采用熱敏電阻以及濕敏元器件進(jìn)行檢測(cè)是最常用的方式之一。熱敏電阻的電阻值會(huì)隨溫度的變化出現(xiàn)波動(dòng),而濕敏元器件對(duì)空氣中的水分子及其敏感,但二者在可靠性和精度上效果不是很好,在需要高精度測(cè)量檢測(cè)數(shù)據(jù)時(shí),選用熱敏電阻以及濕敏元器件進(jìn)行檢測(cè)便無法保證精確度。方案二:采用溫濕度復(fù)合傳感器DHT11,數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,傳感器包括一個(gè)電容式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接。作為一個(gè)集成溫濕度功能的器件,除了功能極其強(qiáng)大之外還具有高精度的數(shù)據(jù)采集。并且集成了A/D轉(zhuǎn)換功能,可以把檢測(cè)到的環(huán)境溫濕度信號(hào),轉(zhuǎn)化為數(shù)字信號(hào),并存放在集成的RAM存儲(chǔ)器中,供單片機(jī)讀取成本低。DHT11傳感器現(xiàn)如今在市場(chǎng)應(yīng)用極其廣泛,在功能上響應(yīng)迅速,并且擁有極強(qiáng)的抗干擾能力,性價(jià)比很高。因此,在此次項(xiàng)目中我選擇它作為溫濕度采集。溫濕度傳感器實(shí)物及外圍電路圖如圖3-6所示[8]。圖3-6溫濕度傳感器實(shí)物及外圍電路圖3.6水位檢測(cè)電路水位傳感器是一種常見的測(cè)量液位位置的傳感器,它是將水位的高度轉(zhuǎn)化為電信號(hào)的形式進(jìn)行輸出,根據(jù)市場(chǎng)上液位傳感器的種類,大概分為以下幾種方案。方案一:浮球式水位傳感器,由磁性浮球、測(cè)量導(dǎo)管、信號(hào)單元、電子單元、接線盒及安裝件組成??善谝好嬷?/p>

上并沿測(cè)量導(dǎo)管上下移動(dòng)。導(dǎo)管內(nèi)裝有測(cè)量元件,它可以在外磁作用下,將被測(cè)液位信號(hào),轉(zhuǎn)換成正比于液位變化的電阻信號(hào),并將電子單元轉(zhuǎn)換成4~20ma或其它標(biāo)準(zhǔn)信號(hào)輸出。與其工作方式相同的還有浮筒式水位傳感器,它是將磁性浮球改為浮筒,浮筒式傳感器是利用微小的金屬膜應(yīng)變傳感技術(shù)來測(cè)量液體的液位和密度的。此傳感器主要受水位影響做信號(hào)采集,反應(yīng)靈敏。但該傳感器價(jià)格高,體積大,并不適合小場(chǎng)所應(yīng)用[9]。方案二:靜壓式水位傳感器,是利用防爆流量計(jì)液體靜壓力的測(cè)量原理工作。一般選用硅壓力測(cè)壓傳感器將測(cè)量到的壓力轉(zhuǎn)換成電信號(hào),之后再經(jīng)放大電路放大和補(bǔ)償電路補(bǔ)償,最后以4~20ma或0~10ma電流方式輸出。

靜壓式水位傳感器成本低,但在水位低的情況下靈敏度并不是很高,因此并不適合在水位不深的場(chǎng)所應(yīng)用[10]。方案三:WaterSensor水位傳感器,主要是利用三極管的電流放大原理。當(dāng)水位高度使三極管的基極與電源正極導(dǎo)通的時(shí)候,在三極管的基極和發(fā)射極之間就會(huì)產(chǎn)生一定大小的電流,此時(shí)在三極管的集電極和發(fā)射極之間就會(huì)產(chǎn)生一個(gè)一定放大倍數(shù)的電流,該電流經(jīng)過發(fā)射極的電阻產(chǎn)生特點(diǎn)電壓,被AD轉(zhuǎn)換器采集。是一款簡(jiǎn)單易用、性價(jià)比高的水位/水滴識(shí)別檢測(cè)傳感器,其是通過具有一系列的暴露的平行導(dǎo)線線跡測(cè)量其水滴/水量大小從而判斷水位。能夠輕松完成水量到模擬信號(hào)的轉(zhuǎn)換,輸出的模擬值可以直接被單片機(jī)讀取,達(dá)到水位報(bào)警的功效。因此,在此次項(xiàng)目中我選擇它作為溫濕度采集。水位傳感器實(shí)物及外圍電路圖如圖3-7所示[11]。圖3-7水位傳感器實(shí)物及外圍電路圖3.7加水電路圖3-8加水電路模塊加水電路主要由三極管和繼電器以及二極管構(gòu)成。其工作原理是,當(dāng)單片機(jī)檢測(cè)到水位不足20%時(shí)。便會(huì)發(fā)送高電平三極管Q4的基極,三極管Q4接收到高電平便會(huì)導(dǎo)通,其繼電器JK2線圈導(dǎo)通,常開觸點(diǎn)閉合,加水馬達(dá)啟動(dòng),從而給加濕器加水。當(dāng)單片機(jī)檢測(cè)到水位達(dá)到80%,便會(huì)給三級(jí)管Q4低電平,使三極管截止,繼電器線圈閉合,常開觸點(diǎn)回到初始狀態(tài)。二極管D2在三極管閉合同時(shí)給繼電器線圈續(xù)流,達(dá)到保護(hù)三極管的作用。加水電路模塊如圖3-8所示[12]。圖3-8加水電路模塊3.8報(bào)警電路在本項(xiàng)目當(dāng)中,報(bào)警電路主要是由一個(gè)蜂鳴器報(bào)警和一個(gè)LED燈構(gòu)成,蜂鳴器由電路、蜂鳴器和三級(jí)管構(gòu)成,如圖3-9所示。其主要作用是當(dāng)檢測(cè)全自動(dòng)加濕器水位不足與故障時(shí)給予警報(bào)提醒功能。同時(shí),LED燈便會(huì)開始進(jìn)行閃爍。圖3-9報(bào)警電路在使用蜂鳴器進(jìn)行報(bào)警時(shí),會(huì)發(fā)生以下動(dòng)作:當(dāng)單片機(jī)模塊通過水位傳感器檢測(cè)到加濕器內(nèi)部水位不足15%時(shí),便會(huì)發(fā)出信號(hào)控制報(bào)警電路。蜂鳴器信號(hào)通過三極管放大驅(qū)動(dòng)電流,從而讓蜂鳴器發(fā)出聲音,LED開始進(jìn)行閃爍。蜂鳴器信號(hào)端當(dāng)輸出高電平,三極管Q3導(dǎo)通,集電極電流會(huì)通過蜂鳴器發(fā)出聲音。當(dāng)故障排除后單片機(jī)便會(huì)輸出低電平時(shí),這時(shí)三極管Q3截止,沒有電流流過蜂鳴器,所以就不會(huì)發(fā)出聲音圖3-9報(bào)警電路3.9按鍵電路單片機(jī)的鍵盤設(shè)計(jì)主要分為獨(dú)立式和矩陣式。獨(dú)立鍵盤上每個(gè)I/O口只接一個(gè)按鍵,按鍵另一端接電源或地。矩陣式鍵盤接法相對(duì)于獨(dú)立式較為復(fù)雜,適合應(yīng)用于按鍵數(shù)量多的場(chǎng)所,在本次項(xiàng)目中,由于所需按鍵較少,所以采用的是獨(dú)立鍵盤接法。獨(dú)立式鍵盤的實(shí)現(xiàn)方法是利用單片機(jī)I/O口讀取電平高低來判斷是否有按鍵按下。按鍵電路如圖3-10所示。圖3-10按鍵電路該模塊主要是為了便于維修,使維修人員能夠更快的定位設(shè)備故障,從而達(dá)到快速檢修設(shè)備的目的。在按下SW2時(shí),便會(huì)啟動(dòng)超聲波霧化模塊,使設(shè)備進(jìn)行加濕,再次按下會(huì)進(jìn)入定時(shí)模式,第三次按下就會(huì)退出加濕。在按下SW3則會(huì)啟動(dòng)加水模塊電路,再次按下便會(huì)關(guān)閉該模塊。SW4是報(bào)警模塊檢測(cè)按鈕,在按下SW4便會(huì)開始報(bào)警,再次按下便會(huì)停止。SW5為USART1的觸發(fā)端,在按下S圖3-10按鍵電路3.10顯示電路顯示電路在本次項(xiàng)目中采用的是液晶顯示屏LCD1602,它是一種字符型液晶顯示器,是一種專門用于顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣式液晶顯示器,具有16個(gè)引腳。LCD1602的顯示容量為16x2個(gè)字符,芯片工作電壓為4.5~5.5V,工作電流為2.0mA,模塊最佳工作電壓是5.0V。LCD1062液晶顯示器引腳及功能說明如表3.1所示。表3.1LCD1062液晶顯示器引腳及功能說明編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2DataI/O2VDD電源正極10D3DataI/O3VL液晶顯示偏壓信號(hào)11D4DataI/O4RS數(shù)據(jù)/命令選擇端(H/L)12D5DataI/O5R/W讀/寫選擇端(H/L)13D6DataI/O6E使能信號(hào)14D7DataI/O7D0DataI/O15BLA背光源正極8D1DataI/O16BLK背光源負(fù)極LCD1602液晶顯示屏外圍電路簡(jiǎn)單,使用方便。將LCD1602的VDD以及背光源正極接電源5V,VSS與背光源負(fù)極接地,由此便完成了顯示模塊的供電。再將液晶顯示偏壓信號(hào)VL接一個(gè)10K的可調(diào)電阻到地,其接入可調(diào)電阻的目的主要是控制LCD點(diǎn)陣顯示的亮度。再將剩下的引腳接入STM32單片機(jī)的I/O口,便完成了該模塊的外圍電路搭建。其主要連接圖如3-11所示。圖3-11LCD液晶顯示屏與單片機(jī)連接線

第四章軟件設(shè)計(jì)4.1系統(tǒng)功能控制設(shè)計(jì)該系統(tǒng)采用的是C語言,KeilVison5軟件進(jìn)行編寫,主要是結(jié)合硬件電路實(shí)現(xiàn)溫濕度測(cè)量以及水位檢測(cè)。在檢測(cè)到溫濕度以及水位來分析設(shè)備的現(xiàn)有情況,并依據(jù)設(shè)備現(xiàn)有情況來調(diào)用加濕器的其他各種功能模塊。程序框架圖如圖4-1所示。圖4-1程序框架圖4.2溫濕度檢測(cè)驅(qū)動(dòng)程序溫濕度檢測(cè)主要對(duì)DHT11傳感器,所采集到的溫濕度數(shù)據(jù)進(jìn)行讀取。DHT11數(shù)字溫濕度傳感器是一款采用單總線協(xié)議,DHT11采用單總線協(xié)議與單片機(jī)通信,單片機(jī)發(fā)送一次復(fù)位信號(hào)后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機(jī)復(fù)位結(jié)束后,DHT11發(fā)送響應(yīng)信號(hào),并拉高總線準(zhǔn)備傳輸數(shù)據(jù)。一次完整的數(shù)據(jù)為40bit,按照高位在前,低位在后的順序傳輸。數(shù)據(jù)格式為:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗(yàn)和,一共5字節(jié)(40bit)數(shù)據(jù)。由于DHT11分辨率只能精確到個(gè)位,所以小數(shù)部分是數(shù)據(jù)全為0。校驗(yàn)和為前4個(gè)字節(jié)數(shù)據(jù)相加,校驗(yàn)的目的是為了保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。DHT11只有在接收到開始信號(hào)后才觸發(fā)一次溫濕度采集,如果沒有接收到主機(jī)發(fā)送復(fù)位信號(hào),DHT11不主動(dòng)進(jìn)行溫濕度采集。當(dāng)數(shù)據(jù)采集完畢且無開始信號(hào)后,DHT11自動(dòng)切換到低速模式。DHT11驅(qū)動(dòng)流程圖如圖4-2所示。圖4-2DHT11驅(qū)動(dòng)流程圖(1)復(fù)位信號(hào)首先主機(jī)拉低總線至少18ms,然后再拉高總線,延時(shí)20~40us,取中間值30us,此時(shí)復(fù)位信號(hào)發(fā)送完畢。主機(jī)發(fā)送復(fù)位信號(hào)如圖4-3所示。圖4-3主機(jī)發(fā)送復(fù)位信號(hào)(2)響應(yīng)信號(hào)DHT11檢測(cè)到復(fù)位信號(hào)后,觸發(fā)一次采樣,并拉低總線80us表示響應(yīng)信號(hào),告訴主機(jī)數(shù)據(jù)已經(jīng)準(zhǔn)備好了;然后DHT11拉高總線80us,之后開始傳輸數(shù)據(jù)。如果檢測(cè)到響應(yīng)信號(hào)為高電平,則DHT11初始化失敗,請(qǐng)檢查線路是否連接正常。當(dāng)復(fù)位信號(hào)發(fā)送完畢后,如果檢測(cè)到總線被拉低,就每隔1us計(jì)數(shù)一次,直至總線拉高,計(jì)算低電平時(shí)間;當(dāng)總線被拉高后重新計(jì)數(shù)檢測(cè)80us的高電平。如果檢測(cè)到響應(yīng)信號(hào)之后的80us高電平,就準(zhǔn)備開始接收數(shù)據(jù)。實(shí)際上DHT11的響應(yīng)時(shí)間并不是標(biāo)準(zhǔn)的80us,往往存在誤差,當(dāng)響應(yīng)時(shí)間處于20~100us之間時(shí)就可以認(rèn)定響應(yīng)成功。從機(jī)響應(yīng)信號(hào)如圖4-4所示。圖4-4從機(jī)響應(yīng)信號(hào)(3)數(shù)據(jù)傳輸DHT11在拉高總線80us后開始傳輸數(shù)據(jù)。每1bit數(shù)據(jù)都以50us低電平時(shí)隙開始,告訴主機(jī)開始傳輸一位數(shù)據(jù)了。DHT11以高電平的長(zhǎng)短定義數(shù)據(jù)位是0還是1,當(dāng)50us低電平時(shí)隙過后拉高總線,高電平持續(xù)26~28us表示數(shù)據(jù)“0”;持續(xù)70us表示數(shù)據(jù)“1”。數(shù)據(jù)格式信號(hào)如圖4-5所示。圖4-5數(shù)據(jù)格式信號(hào)當(dāng)最后1bit數(shù)據(jù)傳送完畢后,DHT11拉低總線50us,表示數(shù)據(jù)傳輸完畢,隨后總線由上拉電阻拉高進(jìn)入空閑狀態(tài)。信號(hào)發(fā)送時(shí)序圖如圖4-6所示。圖4-6信號(hào)發(fā)送時(shí)序圖4.3水位檢測(cè)驅(qū)動(dòng)程序WaterSensor水位傳感器能夠監(jiān)測(cè)水位。該模塊主要是利用三極管的電流放大原理:當(dāng)液位高度使三極管的基極與電源正極導(dǎo)通的時(shí)候,在三極管的基極和發(fā)射極之間就會(huì)產(chǎn)生一定大小的電流,此時(shí)在三極管的集電極和發(fā)射極之間就會(huì)產(chǎn)生一個(gè)一定放大倍數(shù)的電流,該電流經(jīng)過發(fā)射極的電阻產(chǎn)生特點(diǎn)電壓,被AD轉(zhuǎn)換器采集。STM32F103C8T6芯片具有2個(gè)12位的AD轉(zhuǎn)換接口,在本次設(shè)計(jì)當(dāng)中我將水位傳感器的輸出端,與單片機(jī)的PA0口相連,在確定外圍電路之后,下一步便是開啟PA端口的時(shí)鐘,設(shè)置PA端口為模擬輸入,再使能ADC1的時(shí)鐘,之后再設(shè)置ADC1的工作模式,并開啟AD轉(zhuǎn)換。以上步驟完成之后,便可以讀取到ADC的值,再將值保存在DMA里面,即可讓單片機(jī)調(diào)取。水位檢測(cè)驅(qū)動(dòng)流程圖如圖4-7所示。圖4-7水位檢測(cè)驅(qū)動(dòng)流程圖4.4液晶顯示驅(qū)動(dòng)程序LCD1602總共有四種操作時(shí)序,分別為讀狀態(tài),寫指令和讀數(shù)據(jù)以及寫數(shù)據(jù)。需注意的是,在對(duì)控制器進(jìn)行讀寫操作之前,讀需要進(jìn)行讀寫檢測(cè),確保讀寫操作指令是否使能,否則將無法進(jìn)行讀寫操作。LCD1602液晶顯示屏輸出數(shù)據(jù)的流程為:首先運(yùn)行顯示器的初始化操作,初始化后執(zhí)行延時(shí)程序,等待信號(hào)的采集,采集完成后先寫入一些指令和顯示字符的地址,再通過單片機(jī)系統(tǒng)向液晶顯示器傳輸采集到的信息,信息傳輸結(jié)束后,液晶顯示器讀取寫入的地址并顯示出來,最后返回。LCD1602驅(qū)動(dòng)流程圖如圖4-8所示。圖4-8LCD1602驅(qū)動(dòng)流程圖液晶顯示模塊是一個(gè)慢顯示器件,當(dāng)模塊的忙標(biāo)志為高電平時(shí),表示液晶顯示為忙狀態(tài),無法執(zhí)行指令。因此,我們務(wù)必要在運(yùn)行每條指令前,查看液晶顯示模塊是否處于忙狀態(tài),如果是,則我們輸出的指令就會(huì)失去效應(yīng)。我們想顯示出一個(gè)字符的時(shí)候,應(yīng)該在代碼指令中攜帶該字符的顯示地址,通知LCD在哪個(gè)位置顯示字符。

第五章軟硬件調(diào)試5.1硬件調(diào)試硬件調(diào)試主要是為了確保電路能否正常工作,功能是否達(dá)標(biāo)以及器件選項(xiàng)是否正確,是一項(xiàng)必不可少的一道檢查。硬件作為整個(gè)電路的核心部分。其重要程度非常大,稍有不慎便只能重頭開始,硬件設(shè)計(jì)樣板周期較長(zhǎng),出現(xiàn)問題必將耗費(fèi)許多時(shí)間精力。在硬件設(shè)計(jì)完成后,便將決定整個(gè)電路的上下限。在對(duì)電路設(shè)計(jì)完成之后,便將進(jìn)行單個(gè)電路的仿真調(diào)試,在仿真中對(duì)單個(gè)電路在進(jìn)行可行性分析,確保功能能夠?qū)崿F(xiàn)。在本設(shè)計(jì)當(dāng)中,使用的是ISIS7professional軟件,該軟件是英國(guó)Labcenterelectronics公司出版的仿真工具軟件。常用于單片機(jī)等數(shù)字電路仿真。有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS一232動(dòng)態(tài)仿真、1C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等[13]。當(dāng)確定電路能夠?qū)崿F(xiàn)之后,便開始進(jìn)行原理圖的PCB設(shè)計(jì),PCB設(shè)計(jì)采用AltiumDesigner繪圖軟件。作為現(xiàn)在市場(chǎng)上最為常用的繪圖軟件之一,AltiumDesigner功能十分強(qiáng)大,是一款將電路原理圖設(shè)計(jì)、PCB板圖設(shè)計(jì)功能集一體的設(shè)計(jì)軟件。在對(duì)原理圖封裝器件確定之后,便進(jìn)行PCB板圖的繪制,PCB版圖繪制完成之后進(jìn)行DesignRuleVerificationReport檢測(cè)PCB電氣連接是否合格。全自動(dòng)加濕器主控板如圖5-1所示[14]。圖5-1全自動(dòng)加濕器主控板PCB電路設(shè)計(jì)完成打樣之后,根據(jù)硬件電路圖以及PCB設(shè)計(jì)封裝類型,進(jìn)行元器件的焊接,焊接應(yīng)確定線路連接正常無虛焊。在完成元器件焊接之后,進(jìn)行上電前測(cè)試,先著重對(duì)電源模塊進(jìn)行分析,確保電路電源部分可靠運(yùn)行。再進(jìn)行全局測(cè)量用邏輯筆、萬用表等工具檢查有無短路、虛焊等現(xiàn)象,經(jīng)檢查無誤后方可按調(diào)試操作程序進(jìn)行通電調(diào)試。主控板焊接圖如圖5-2所示。圖5-2主控板焊接圖5.2軟件調(diào)試使用KeiluVision5軟件通過ST-LINK下載器進(jìn)行程序下載,在成功下載程序之后,進(jìn)行系列功能測(cè)試。尋找一個(gè)環(huán)境濕度為60%以下的地方,此時(shí)查看加濕器是否加濕,當(dāng)環(huán)境濕度達(dá)到60%時(shí),查看超聲波霧化模塊是否停止工作。水位傳感器檢測(cè)到水位低于20%時(shí),測(cè)試加水功能是否運(yùn)行。水位低于15%時(shí),報(bào)警模塊是否啟動(dòng)[15]。在進(jìn)行實(shí)物測(cè)試之后,測(cè)試結(jié)果正常。當(dāng)加濕器處于濕度50%以下時(shí)開始加濕,到60%停止加濕,水位低于20%時(shí)進(jìn)行加水,80%停止加水,水位低于15%時(shí)開啟報(bào)警模塊LED和蜂鳴器啟動(dòng)。實(shí)物測(cè)試圖如圖5-3所示。圖5-3實(shí)物測(cè)試圖

結(jié)論本文主要研究了基于STM32芯片的加濕器設(shè)計(jì),通過對(duì)本項(xiàng)目設(shè)計(jì)的系統(tǒng)進(jìn)行調(diào)試與分析,本次設(shè)計(jì)的全自動(dòng)加濕器采用了分模塊化的設(shè)計(jì)方法,使用單片機(jī)對(duì)各個(gè)模塊進(jìn)行協(xié)同調(diào)用,模塊之間獨(dú)立性強(qiáng)。不僅提供了便利性,同時(shí)還滿足了智能化操作。達(dá)到了全自動(dòng)的社會(huì)需求。另外,通過這幾個(gè)月對(duì)全自動(dòng)加濕器的研究和學(xué)習(xí),我對(duì)市面上現(xiàn)有加濕器產(chǎn)品都有了相對(duì)的熟悉。全自動(dòng)加濕器將在未來,絕對(duì)是人們生活中普遍需要的一個(gè)產(chǎn)品。在現(xiàn)如今的市場(chǎng)上,各類加濕器還并不完善,加濕方式都有各自的欠缺,并對(duì)加濕水源的質(zhì)量有著很大的要求。綜上所述,加濕器系列產(chǎn)品具有十分廣闊的進(jìn)步空間。此次全自動(dòng)加濕器,雖未解決這些難題,但也優(yōu)于傳統(tǒng)的加濕設(shè)備,實(shí)現(xiàn)了全自動(dòng)智能控制。為廣大使用者解放了部分精力,提供了一個(gè)更好的生活環(huán)境。參考文獻(xiàn)[1][2]靳繼來,謝艷新,鐘成梁,郭俊志,李雨澤.基于單片機(jī)的家用多功能加濕器設(shè)計(jì)[J].農(nóng)業(yè)信息網(wǎng),2017,(2):112-115.[3]高操,羅小華,仲雪倩.基高性能的智能加濕器設(shè)計(jì)[J].江南大學(xué)學(xué)報(bào):自然科學(xué)版,2011,10(5):546-550.[4],2016,21(11):30-30.[5]胡銀偉,王恒杰,段書.多源智能超聲霧化加濕器的設(shè)計(jì)[J].醫(yī)療衛(wèi)生裝備,2019,40(1):41-45.[6]G.SBERVEGLIERI,G.RINCHETTI,S.GROPPELLI,G.FAGLIA,Capacitivehumidit-ysensorwithcontrolledperformance,basedonporousAI2O3thinfilmgrownonSiO2-Sisubstratel[J].Sen.ActuatorsB.1994,(18/19):551-553.[7]S.A.El_Agou.M.Abugderah.Experimentalanalysisofhumidificationprocessbyairpassingthroughseawater[J].EnergyConversionandManagement,2008,49.[8]杜深慧,溫濕度檢測(cè)裝置的設(shè)計(jì)與實(shí)現(xiàn)[D].華北電力大學(xué),2004.[9]陳松鵬,陳松,吳奇洲.基于數(shù)字控制的智能加濕器設(shè)計(jì)[J].電子測(cè)試,2017,(6):5-7.[10]李雯婷.基于單片機(jī)的工業(yè)加濕器控制系統(tǒng)[D].成都理工大學(xué),2010,(5).[11]樊亞玲,楊宏亮.多功能加濕器控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].國(guó)外電子測(cè)量技術(shù),2015,3(3):32-36.[12]韓廣興,電子元器件與實(shí)用電路基礎(chǔ)[M].電子工業(yè)出版社,2005.[13]任文霞,電子電路仿真技術(shù)[M].中國(guó)電力出版社,2008.[14]王雷,俞鵬.AltiumDesigner10入門與PCB設(shè)計(jì)實(shí)例[M].國(guó)防工業(yè)出版社,2013:69-225.[15]K.Arshak,K.Twomey,D.Heffernan.Developmentofamicrocontroller-basedhumiditysensingsystem[Z].MCBUPLtd,2002.

附錄A硬件原理圖硬件主控電路原理圖如圖附錄A1所示。附錄圖A1硬件主控電路原理圖硬件霧化電路原理圖如圖附錄A2所示。附錄圖A2硬件霧化電路原理圖硬件顯示電路原理圖如圖附錄A3所示。附錄圖A3硬件顯示電路原理圖硬件傳感器電路原理圖如圖附錄A4所示。附錄圖A4硬件傳感器電路原理圖硬件報(bào)警電路原理圖如圖附錄A5所示。附錄圖A5硬件報(bào)警電路原理圖硬件加水電路原理圖如圖附錄A6所示。附錄圖A6硬件加水電路原理圖

附錄B軟件驅(qū)動(dòng)程序DHT11驅(qū)動(dòng)程序#include"stm32f10x.h"#include"delay.h"#include"dht11.h"#include"lcd1602.h"#defineDHT_SetBit() GPIO_SetBits(DHT_GPIO,DHT_GPIO_PIN)#defineDHT_ResetBit() GPIO_ResetBits(DHT_GPIO,DHT_GPIO_PIN)#defineDHT_ReadBit() GPIO_ReadInputDataBit(DHT_GPIO,DHT_GPIO_PIN)staticvoidDHT_Set_Output(void); //設(shè)置為輸出模式staticvoidDHT_Set_Input(void); //設(shè)置為輸入模式intrec_dat[4];unsignedintT_H,T_L,H_H,H_L,Check;DHT11_TypeDefDHT11; //全局變量voidDHT_Set_Output(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT_RCC,ENABLE); GPIO_InitStructure.GPIO_Pin=DHT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(DHT_GPIO,&GPIO_InitStructure); } voidDHT_Set_Input(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT_RCC,ENABLE); GPIO_InitStructure.GPIO_Pin=DHT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(DHT_GPIO,&GPIO_InitStructure); }/***@brief初始化IO口和參數(shù)*@paramnone.*@retvalnone.*/voidDHT11_Init(void){ //RCC_APB2PeriphClockCmd(DHT_RCC,ENABLE); DHT_Set_Output(); DHT11.Tem_H=0; DHT11.Tem_L=0; DHT11.Hum_H=0; DHT11.Hum_L=0;}/***@brief讀取8bit數(shù)據(jù)*@paramnone.*@retvalnone.*/intDH11_ReadByte(void){ intdata=0; chari; charcout; for(i=0;i<8;i++) { //讀取50us的低電平 cout=1; while(!DHT_ReadBit()&&cout++); //延時(shí)30us之后讀取IO口的狀態(tài) SYSTICK_Cofing_us(30); //先把上次的數(shù)據(jù)移位,再保存本次的數(shù)據(jù)位 data=data<<1; if(DHT_ReadBit()==1) { data|=1; } //等待輸入的是低電平,進(jìn)入下一位數(shù)據(jù)接收 cout=1; while(DHT_ReadBit()&&cout++); } returndata;}/***@brief讀取40bit數(shù)據(jù)*@paramnone.*@retval1讀取成功,0讀取失敗.*/intDHT11_ReadData(void){ unsignedintcout=1; //設(shè)置為IO口輸出模式 DHT_Set_Output(); //1、MCU開始起始信號(hào) DHT_ResetBit(); SYSTICK_Cofing_ms(20); //拉低至少18ms //DHT_SetBit(); SYSTICK_Cofing_us(40); //拉高20~40us //設(shè)置為IO口輸入模式 DHT_Set_Input(); SYSTICK_Cofing_us(50); //2、讀取DH21響應(yīng) if((DHT_ReadBit()==0)) { //等待80us的低電平 cout=1; while(!DHT_ReadBit()&&cout++); //等待80us的高電平 cout=1; while(DHT_ReadBit()&&cout++); //讀取8bit的濕度整數(shù)數(shù)據(jù) H_H=DH11_ReadByte(); //讀取8bit的濕度小數(shù)數(shù)據(jù) H_L=DH11_ReadByte(); //讀取8bit的溫度整數(shù)數(shù)據(jù) T_H=DH11_ReadByte(); //讀取8bit的溫度小數(shù)數(shù)據(jù) T_L=DH11_ReadByte(); //讀取8bit的校驗(yàn)和 Check=DH11_ReadByte(); if(Check==(H_H+H_L+T_H+T_L)) { rec_dat[0]=H_H; rec_dat[1]=H_L; rec_dat[2]=T_H; rec_dat[3]=T_L; return1; } else { return0; } } return0;}/***@brief獲取溫度*@paramnone.*@retvalTemp,溫度值*/intDHT11_GetTem(void){ return(DHT11.Tem_H<<8|DHT11.Tem_L);}/***@brief獲取濕度*@paramnone.*@retvalHum,濕度值*/intDHT11_GetHum(void){ return(DHT11.Hum_H<<8|DHT11.Hum_L);}voidDHT11_DIS(void){if(DHT11_ReadData()){ Lcd_1Put(9,0,rec_dat[0]/10+0x30); Lcd_1Put(10,0,rec_dat[0]%10+0x30); Lcd_Write_Data('.'); Lcd_1Put(12,0,rec_dat[1]/10+0x30); Lcd_Puts(13,0,"%RH"); Lcd_1Put(0,0,rec_dat[2]/10+0x30); Lcd_1Put(1,0,rec_dat[2]%10+0x30); Lcd_Write_Data('.'); Lcd_1Put(3,0,rec_dat[3]/10+0x30); Lcd_Write_Data(0xDF); Lcd_Puts(5,0,"C"); SYSTICK_Cofing_ms(100);}elseLcd_Puts(0,0,"DHT11:NOFOUND"); }水位傳感器驅(qū)動(dòng)程序#include"adc.h"#defineADC1_DR_Address((u32)0x4001244C)unsignedintAD_value;__IOu16ADC_ConvertedValue;/*配置采樣通道端口使能GPIO時(shí)鐘 設(shè)置ADC采樣PA0端口信號(hào)*/voidADC1_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(ADC_GPIO_CLK,ENABLE); GPIO_InitStructure.GPIO_Pin=ADC_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //GPIO設(shè)置為模擬輸入GPIO_Init(ADC_GPIO_DOOR,&GPIO_InitStructure);}/*配置ADC1的工作模式為MDA模式*/voidADC1_Mode_Config(void){DMA_InitTypeDefDMA_InitStructure;ADC_InitTypeDefADC_InitStructure; RCC_AHBPeriphClockCmd(ADC_GPIO_DMA,ENABLE);//使能MDA1時(shí)鐘 /*DMAchannel1configuration*/DMA_DeInit(DMA1_Channel1);//指定DMA通道DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;//設(shè)置DMA外設(shè)地址DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue; //設(shè)置DMA內(nèi)存地址,ADC轉(zhuǎn)換結(jié)果直接放入該地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//外設(shè)為設(shè)置為數(shù)據(jù)傳輸?shù)膩碓碊MA_InitStructure.DMA_BufferSize=1; //DMA緩沖區(qū)設(shè)置為1;DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;DMA_InitStructure.DMA_Priority=DMA_Priority_High;DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;DMA_Init(DMA1_Channel1,&DMA_InitStructure);/*EnableDMAchannel1*/DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA通道RCC_APB2PeriphClockCmd(ADC_GPIO_ADC,ENABLE); //使能ADC1時(shí)鐘/*ADC1configuration*/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//使用獨(dú)立模式,掃描模式ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//無需外接觸發(fā)器ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//使用數(shù)據(jù)右對(duì)齊ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=1;//只有1個(gè)轉(zhuǎn)換通道ADC_Init(ADC1,&ADC_InitStructure);/*ADC1regularchannel11configuration*/ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//通道1采樣周期55.5個(gè)時(shí)鐘周期/*EnableADC1DMA*/ADC_DMACmd(ADC1,ENABLE); //使能ADC的DMA/*EnableADC1*/ADC_Cmd(ADC1,ENABLE);//使能ADC1/*EnableADC1resetcalibarationregister*/ADC_ResetCalibration(ADC1);/*ChecktheendofADC1resetcalibrationregister*/while(ADC_GetResetCalibrationStatus(ADC1));/*StartADC1calibaration*/ADC_StartCalibration(ADC1);/*ChecktheendofADC1calibration*/while(ADC_GetCalibrationStatus(ADC1));/*StartADC1SoftwareConversion*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);//開始轉(zhuǎn)換}/*初始化ADC1*/voidADC1_Init(void){ ADC1_GPIO_Config(); ADC1_Mode_Config();}voidADC_DISPLAY(void){ AD_value=(((ADC_ConvertedValue*825)/1024)/20); Lcd_1Put(8,1,AD_value/10+0x30); Lcd_1Put(9,1,AD_value%10+0x30); Lcd_Puts(10,1,"%"); Lcd_Puts(0,1,"Water:"); SYSTICK_Cofing_ms(100);}LCD1602驅(qū)動(dòng)程序#include"lcd1602.h"/************************端口初始化*******************************/voidLcd_GPIO_init(void){GPIO_InitTypeDefGPIO_InitStructure;//聲明結(jié)構(gòu)體/********Data端口設(shè)置*************/ RCC_APB2PeriphClockCmd(RCC_GPIO_DATA,ENABLE);//打開端口B時(shí)鐘GPIO_InitStructure.GPIO_Pin=GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN;//DB8~DB15GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//標(biāo)準(zhǔn)輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時(shí)鐘速度GPIO_Init(GPIO_DATA_0,&GPIO_InitStructure);//初始化端口 /********使能端口設(shè)置**********/ RCC_APB2PeriphClockCmd(RCC_GPIO_EN,ENABLE); //打開端口時(shí)鐘GPIO_InitStructure.GPIO_Pin=GPIO_EN_PIN; //使能端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//標(biāo)準(zhǔn)輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時(shí)鐘速度GPIO_Init(GPIO_EN,&GPIO_InitStructure); /********讀/寫端口設(shè)置**********/ RCC_APB2PeriphClockCmd(RCC_GPIO_RW,ENABLE);//打開端口時(shí)鐘GPIO_InitStructure.GPIO_Pin=GPIO_RW_PIN;//使能端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//標(biāo)準(zhǔn)輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時(shí)鐘速度GPIO_Init(GPIO_RW,&GPIO_InitStructure); /********指令/數(shù)據(jù)端口設(shè)置**********/ RCC_APB2PeriphClockCmd(RCC_GPIO_RS,ENABLE);//打開端口時(shí)鐘GPIO_InitStructure.GPIO_Pin=GPIO_RS_PIN;//使能端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽復(fù)用輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時(shí)鐘速度GPIO_Init(GPIO_RS,&GPIO_InitStructure);}/******************************************************************/voidLcd_Init(void)//初始化{ Lcd_GPIO_init(); delay_us(1500);//延時(shí)15ms Lcd_Write_Command(0x38,0);//寫指令38H不檢測(cè)忙信號(hào) delay_us(500); //延時(shí)5msLcd_Write_Command(0x38,0);//寫指令38H不檢測(cè)忙信號(hào) delay_us(500); //延時(shí)5msLcd_Write_Command(0x38,0);//寫指令38H不檢測(cè)忙信號(hào) //以后每次寫指令、讀/寫數(shù)據(jù)操作之前需檢測(cè)忙信號(hào) Lcd_Write_Command(0x38,1);//顯示模式設(shè)置Lcd_Write_Command(0x08,1); //顯示關(guān)閉 Lcd_Write_Command(0x01,1);//顯示清屏Lcd_Write_Command(0x06,1);//顯示光標(biāo)移動(dòng)設(shè)置Lcd_Write_Command(0x0C,1); //顯示開、光標(biāo)不顯示}/******************************************************/voidLcd_En_Toggle(void)//發(fā)使能脈沖{ SET_EN;//使能1 delay_us(5);//延時(shí)160us CLE_EN;}voidLcd_Busy(void)//判斷忙{ unsignedintlater0=0;GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_GPIO_DATA,ENABLE);//打開DATA端口時(shí)鐘GPIO_InitStructure.GPIO_Pin=GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN;//DB8~DB15GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//輸入模式=上拉輸入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時(shí)鐘速度GPIO_Init(GPIO_DATA_7,&GPIO_InitStructure);//打開忙檢測(cè)端口 CLE_RS;//RS=0 //delay_us(1);//延時(shí)10us SET_RW;//RW=1 //delay_us(1);//延時(shí)10us SET_EN;//EN=1 //delay_us(2);//延時(shí)20uswhile((GPIO_ReadInputDataBit(GPIO_DATA_7,GPIO_DATA_7_PIN))&&(later0<20000))//循環(huán)等待忙檢測(cè)端口=0 { delay_us(5); later0++; } CLE_EN;//EN=0//恢復(fù)端口為輸出狀態(tài) RCC_APB2PeriphClockCmd(RCC_GPIO_DATA,ENABLE);//打開DATA端口時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN;//DB8~DB15GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時(shí)鐘速度GPIO_Init(GPIO_DATA_7,&GPIO_InitStructure);}voidGpio_data(unsignedcharx)//端口置入數(shù)據(jù){GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_0_PIN);//DB0GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_1_PIN);//DB1GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_2_PIN);//DB2GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_3_PIN);//DB3GPIO_ResetBits(GPIO_DATA_0,GP

溫馨提示

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

評(píng)論

0/150

提交評(píng)論