




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
畢業設計課題基于單片機的空調變頻器設計學生姓名學號專業電子信息工程班級院(系)機械與電子信息工程學院指導教師職稱二0一四年十一月三十日畢業設計真實性承諾及指導教師聲明學生畢業設計真實性承諾本人鄭重聲明:所提交的畢業設計是本人在指導教師的指導下,獨立進行研究工作所取得的成果,內容真實可靠,不存在抄襲、造假等學術不端行為。除文中已經注明引用的內容外,本設計不含其他個人或集體已經發表或撰寫過的研究成果。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明。如被發現設計中存在抄襲、造假等學術不端行為,本人愿承擔相應的法律責任和一切后果。學生(簽名): 日期:指導教師關于學生畢業設計真實性審核的聲明本人鄭重聲明:已經對學生畢業設計所涉及的內容進行嚴格審核,確定其成果均由學生在本人指導下取得,對他人論文及成果的引用已經明確注明,不存在抄襲等學術不端行為。指導教師(簽名): 日期: 注:此聲明由指導教師和學生本人親筆簽名。摘要傳統定速空調的壓縮機轉速是恒定不變的,所以制冷量大小也是始終一樣的,壓縮機依靠其不斷地“開、停”來調整室內溫度,其一開一停之間容易造成室溫忽冷忽熱,消耗較多電能,從而我們用到了變頻器。變頻器(Variable-frequencyDrive,VFD)是應用變頻技術與微電子技術,通過改變電機工作電源頻率方式來控制交流電動機的電力控制設備。變頻器主要由整流(交流變直流)、濾波、逆變(直流變交流)、制動單元、驅動單元、檢測單元微處理單元等組成。變頻器靠內部IGBT的開斷來調整輸出電源的電壓和頻率,根據電機的實際需要來提供其所需要的電源電壓,進而達到節能、調速的目的,另外,變頻器還有很多的保護功能,如過流、過壓、過載保護等等。同時也就克服了定速空調的不足。變頻空調則依靠壓縮機轉速的快慢達到控制室溫的目的,室溫波動小、電能消耗少,其舒適度大大提高。而運用變頻控制技術的變頻空調,可根據環境溫度自動選擇制熱、制冷和除濕運轉方式,使居室在短時間內迅速達到所需要的溫度并在低轉速、低能耗狀態下以較小的溫差波動,實現了快速、節能和舒適控溫效果。同時運用STC89C52單片機,用編寫好的程序,和溫度傳感器DS18B20所采集的溫度,把數據傳輸到LCD18B20液晶顯示屏上面,從而到達到目的。關鍵詞STC89C52LCD1602DS18B20abstractTraditional
fixedspeedair-conditioning
compressorspeed
isconstant,
so
therefrigeratingoutput
is
always
thesame,
compressoronitscontinuing"open,stop"toadjusttheindoortemperature,
theopeningbetweenthestopis
easytocausethetemperature
sometimeshotandsometimescold,
consumemorepower,
so
we
usethe
frequencyconverter.Thefrequencyconverter
(Variable-frequency
Drive,
VFD)
istheapplicationoffrequencyconversiontechnology
andmicroelectronictechnology,
electricalcontrolequipment
bychangingthemotorpowerfrequency
tocontrolACmotor.
Theconverter
ismainlycomposedofarectifying
(ACtoDC),
filter,inverter
(DCtoACconverter),
braking
unit,
driveunit,
detectionunit,
amicroprocessingunit
etc..
Theinverter
byinternal
IGBT
onvoltageand
frequencyoff
toadjusttheoutput
ofpowersupply,
thepowersupplyvoltage
needed
toprovide
accordingtotheactualneed
ofthemotor,
andthepurposesofenergysaving,
thepurposeofspeed,
inaddition,
inverter
and
many
protectionfunctions,
suchas
over-current,
over-voltage,
overloadprotection
andsoon.Atthesametimealso
overcomestheshortcomingsof
fixedspeedair-conditioning.Inverterairconditionerwilldependonthe
rotationalspeedofthecompressorspeed
tocontrolroomtemperature,
roomtemperaturefluctuationissmall,
lowpowerconsumption,
comfortgreatly
improved.
Whiletheuseof
variablefrequency
airconditioning
frequencyconversioncontroltechnology,itcanautomaticallyselect
heating,
refrigerating
and
dehumidifyingoperation
modeaccordingtothe
environment
temperature,
theroomquicklyinashorttime
toreachtherequiredtemperatureandat
lowspeed,
lowenergy
statetoasmallertemperaturefluctuations,
realizesfast,
energy-savingandcomfortabletemperaturecontrol
effect.Atthesametime,
theuseofSTC89C52microcontroller,
usingthe
compiledprogram,
andthetemperaturesensor
DS18B20acquisitionofthetemperature,
thedatatransmissiontothe
LCD18B20liquidcrystal
screenabove,
soasto
achievethepurposeof.KeywordsSTC89C52
LCD1602
DS18B20目錄摘要1Abstract2第一章方案的論證與設計51.1設計目標和實現方法51.2方案論證與設計5第二章硬件的介紹62.1運算模塊62.2基于STC89C52單片機72.3DS18B20溫度傳感器92.4LCD1602各個引腳及作用142.5輸入模塊17第三章軟件的設計183.1各個頭文件的源代碼主程序18第四章仿真及調試25第五章總結26參考文獻27附錄28附錄1原理圖28附錄2PCB圖29附錄3實物圖30致謝31第一章方案的論證與設計1.1設計目標和實現方法為了制作一個簡易的空調變頻器,我從單片機和電路作手,沒有選擇以往的空調變頻,而是采用了用單片機和電機,溫度傳感器,以及液晶顯示器,蜂鳴器為核心,來實現其工程的。設計仿真和調試要用到Protues、Keil等軟件。1.2方案論證與設計根據功能和指標要求,本系統選用MCS52單片機為主控機。通過擴展必要的外圍接口電路,實現對抽獎機的設計。主要設計方法如下:第一步:畫好原理圖及PCB圖第二部:用PROTEUS進行軟件仿真第三部:焊接第四步:軟件及硬件調試根據需要我們可以采用自上而下的程序設計方法,此方法先從主程序開始設計,然后再編制各從屬程序和子程序,層層細化逐步求精,最終完成一個復雜程序的設計。這種方法比較符合人們的日常思維,缺點是一級的程序錯誤會對整個程序產生影響第二章硬件的介紹本電路主要由主要分這幾大模塊電路,分別是電源模塊,單片機主控制電路模塊,DS18B20模塊,1602顯示模塊,LED顯示燈模塊,運算模塊。下面我對各個模塊或芯片一一介紹,電源模塊主要是USB供電。2.1運算模塊MCS-52單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數據存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O口、串行口、定時器/計數器、中斷系統及特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以進行很快地實現運算功能,如圖2-1所示:圖2-1AT89C51芯片2-2單片機外觀圖2.2基于STC89C52單片機單片機是我們電子產品實現自動化、智能化必不可少的電子元器件,它的外觀如圖2-2所示:上圖是它們的引腳配置:40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。電源引腳:Vcc40腳正電源腳,工作電壓為5V,另有AT89C51工作電壓則是2.7-6V,引腳功能一樣。GND20腳接地端。外接晶體引腳。外接晶體引腳如圖2-3所示:圖2-3外接晶體管引腳Pin19:時鐘XTAL1腳,Pin18:時鐘XTAL2腳,XTAL1是片內振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應直接加到XTAL1,而XTAL2懸空。內部方式時,時鐘發生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內選擇。電容取30PF左右。
型號同樣為AT89C51的芯片,在其后面還有頻率編號,有12,16,20,24MHz可選。大家在購買和選用時要注意了。如AT89C5112PC就是最高振蕩頻率為12MHz,40P6封裝的普通商用芯片。復位:在振蕩器運行時,有兩個機器周期(24個振蕩周期)以上的高電平出現在此引腳時,將使單片機復位,只要這個腳保持高電平,51芯片便循環復位。復位后P0-P3口均置1引腳表現為高電平,程序計數器和特殊功能寄存器SFR全部清零。當復位腳由高電平變為低電平時,芯片為ROM的0000H處開始運行程序。常用的復位電路如下圖2-4所示。復位操作不會對內部RAM有所影響。當8051通電,時鐘電路開始工作,在RESET引腳上出現24個時鐘周期以上的高電平,系統即初始復位。什么叫復位?復位是單片機重新執行程序代碼的意思。8051的復位方式可以是自動復位,也可以是手動復位,如圖2-5所示。此外,RESET/Vpd還是一復用腳,Vcc掉電期間,此腳可接上備用電源,以保證單片機內部RAM的數據不丟失,在本電路中我們不用復位電路,因為復位電路對自己目標的功能沒有什么意義。圖2-4復位電路圖圖2-5復位方式輸入輸出(I/O)引腳:P39-P32為P0.0-P0.7輸入輸出腳,稱為P0口,是一個8位漏極開路型雙向I/O口。內部不帶上拉電阻,當外接上拉電阻時,P0口能以吸收電流的方式驅動八個LSTTL負載電路。通常在使用時外接上拉電阻,用來驅動LCD1602的數據口。在訪問外部程序和外部數據存儲器時,P0口是分時轉換的地址(低8位)/數據總線,不需要外接上拉電阻。P1-P8為P1.0-P1.7輸入輸出腳,稱為P1口,是一個帶內部上拉電阻的8位雙向I/0口。P1口能驅動4個LSTTL負載。通常在使用時外不需要外接上拉電阻,就可以直接驅動發光二極管。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。P21-P28為P2.0-P2.7輸入輸出腳,稱為P2口,是一個帶內部上拉電阻的8位雙向I/O口,P2口能驅動4個LSTTL負載。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。對內部Flash程序存儲器編程時,接收高8位地址和控制信息。在訪問外部程序和16位外部數據存儲器時,P2口送出高8位地址。而在訪問8位地址的外部數據存儲器時其引腳上的內容在此期間不會改變。P10-P17為P3.0-P3.7輸入輸出腳,稱為P3口,是一個帶內部上拉電阻的8位雙向I/O口,P2口能驅動4個LSTTL負載,這8個引腳還用于專門的第二功能。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。P1-P3端口在做輸入使用時,因內部有上接電阻,被外部拉低的引腳會輸出一定的電流。除此之外P3端口還用于一些專門功能,具體請看下表3-1:P3引腳兼用功能P3.0串行通訊輸入(RXD)P3.1串行通訊輸出(TXD)P3.2外部中斷0(INT0)P3.3外部中斷1(INT1)P3.4定時器0輸入(T0)P3.5定時器1輸入(T1)P3.6外部數據存儲器寫選通WRP3.7外部數據存儲器寫選通RD表3-1P3口功能表其它的控制或復用引腳:(1)ALE/PROG30訪問外部存儲器時,ALE(地址鎖存允許)的輸出用于鎖存地址的低位字節。即使不訪問外部存儲器,ALE端仍以不變的頻率輸出脈沖信號(此頻率是振蕩器頻率的1/6)。在訪問外部數據存儲器時,出現一個ALE脈沖。對Flash存儲器編程時,這個引腳用于輸入編程脈沖PROG(2)PSEN29該引是外部程序存儲器的選通信號輸出端。當AT89C51由外部程序存儲器取指令或常數時,每個機器周期輸出2個脈沖即兩次有效。但訪問外部數據存儲器時,將不會有脈沖輸出。(3)EA/Vpp31外部訪問允許端。當該引腳訪問外部程序存儲器時,應輸入低電平。要使AT89S51只訪問外部程序存儲器(地址為0000H-FFFFH),這時該引腳必須保持低電平。對Flash存儲器編程時,用于施加Vpp編程電壓。2.3DS18B20溫度傳感器DS18B20數字溫度測量傳感器,網上介紹很多,我就不羅嗦了。見圖DS18B20與前產品DS1820的不同:DS18B20繼承了DS1820的全部優點,并做了如下改進1.供電范圍擴大為3.0--5.5V。2.溫度分辨力可編程。3.轉換速率有很大提高.4.內部存儲器映射關系發生變化。5.具有電源反接保護電路。5.體積減小一半。對我們使用來說最大的不同就是DS18B20可以程序設定9~12位的分辨率數字值,而DS1820為固定的9位數字值,且溫度轉換時的延時時間由2s減為750ms。。電路的接法:DS18B20說明書上介紹了幾種電路的接法,但我這里就說最常用的一種先介紹一下DS18B20內部的結構:常規的內部邏輯圖我就不說了,只說說跟我們使用直接相關的內容。
DS18B20的內部存儲資源分為8個字節的ROM、9個字節的RAM、3個字節的EEPROM如下圖:ROM:
在DS18B20內部光刻了一個長度為64bit的ROM,這個編碼是器件的身份識別標志。如下圖64位光刻ROM的排列是:開始(最低)8位是產品類型標號,對于DS18B20來說就是(28H),接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現一根總線上掛接多個DS18B20的目的。RAM:
高速暫存存儲器(RAM)由9個字節組成,包含了8個連續字節,前兩個字節是測得的溫度信息,第一個字節的內容是溫度溫度的低八位,第二個字節是溫度的高八位。第三個和第四個字節是溫度高限TH、溫度低限TL暫存區,第五個字節是配置寄存器暫存區,第6、7、8字節是系統保留用,就相當于DS18B20的運算內存,第九個字節是冗余檢驗字節。其分配如下表所示。對DS18B20的寫和讀操作;接下來就是主機發出各種操作命令,但各種操作命令都是向DS18B20寫0和寫1組成的命令字節,接收數據時也是從DS18B20讀取0或1的過程。因此首先要搞清主機是如何進行寫0、寫1、讀0和讀1的。
寫周期最少為60微秒,最長不超過120微秒。寫周期一開始做為主機先把總線拉低1微秒表示寫周期開始。隨后若主機想寫0,則繼續拉低電平最少60微秒直至寫周期結束,然后釋放總線為高電平。若主機想寫1,在一開始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結束。而做為從機的DS18B20則在檢測到總線被拉底后等待15微秒然后從15us到45us開始對總線采樣,在采樣期內總線為高電平則為1,若采樣期內總線為低電平則為0。讀寫時序圖對于讀數據操作時序也分為讀0時序和讀1時序兩個過程。讀時隙是從主機把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數據傳輸到單總線上。DS18B20在檢測到總線被拉低1微秒后,便開始送出數據,若是要送出0就把總線拉為低電平直到讀周期結束。若要送出1則釋放總線為高電平。主機在一開始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內的15微秒時間內完成對總線進行采樣檢測,采樣期內總線為低電平則確認為0。采樣期內總線為高電平則確認為1。完成一個讀時序過程,至少需要60us才能完成。(為什么不可以像寫時序那樣將采樣時間放在讀周期開始后的第15微秒到45微秒之間呢。
DS18B20的說明書上也說,由于主機拉低總線電平時間Tint、釋放總線時的恢復時間TRC與采樣時間Tsample之和必須小于15微秒。如下圖13。為了使讀出數據更可靠,說明書上建議Tint和TRC保持時間盡可能小,把控制器采樣時間放到15微秒周期的最后。如下圖14。控制器讀取”1”時序弄清了如何復位,如何寫1寫0和讀1讀0,我們現在就要看看在總線上如何進行實際的運用。
例如,我們做兩個操作,第一個是讓DS18B20進行一次溫度的轉換。第二是讀取RAM內的溫度。
①讓DS18B20進行一次溫度的轉換。前面已經講過每一個對DS18B20的操作都要有三個步驟。一是復位操作。二是對ROM的操作。三是對RAM的操作。現在我們要做的是讓DS18B20進行一次溫度的轉換,那具體的操作就是:1、主機先作個復位操作,2、主機再寫跳過ROM的操作(CCH)命令,3、然后主機接著寫個轉換溫度的操作命令,后面釋放總線至少一秒,讓DS18B20完成轉換的操作。在這里要注意的是每個命令字節在寫的時候都是低字節先寫,例如CCH的二進制為11001100,在寫到總線上時要從低位開始寫,寫的順序是“零、零、壹、壹、零、零、壹、壹”。整個操作的總線狀態如下圖。②讀取RAM內的溫度數據。同樣,這個操作也要接照三個步驟。1、主機發出復位操作并接收DS18B20的應答(存在)脈沖。2、主機發出跳過對ROM操作的命令(CCH)。3、主機發出讀取RAM的命令(BEH),隨后主機依次讀取DS18B20發出的從第0一第8,共九個字節的數據。如果只想讀取溫度數據,那在讀完第0和第1個數據后就不再理會后面DS18B20發出的數據即可。同樣讀取數據也是低位在前的。整個操作的總線狀態如下圖:在這里得說明一下,第二步跳過對ROM操作的命令是在總線上只有一個器件時,為節省時間而簡化的操作,若總線上不止一個器件,那么跳過ROM操作命令將會使幾器件同時響應,這樣就會出現數據沖突。2.4LCD1602各個引腳及作用LCD1602做主要顯示模塊是因為顯示方便,電路連接簡單,程序更簡單,在程序上與數碼管相比LCD1602不需要考慮段選與段選的間隔時間,再加上價格也不算太貴。功能簡介LCD1602是單片機應用系統中的一宗簡單而常用的輸出設備,其在系統中的主要作用是顯示單片機的輸出數據、狀態等。因而作為典型的外圍器件,LCD1602顯示單元是反映系統輸出和操作輸入的有效器件。LCD1602具備數字接口可以方便的和大年紀系統連接;它的優點是價格低,壽命長,能顯示多種字符,并且程序控制簡單。因而在單片機應用系統中獲得了廣泛的應用,所以在此設計中我首先選用了LCD1602作為顯示器件。如圖3-10所示:圖3-2LCD1602顯示模塊1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義CGRAM,顯示效果也不好)。LCD1602是指顯示的內容為16X2,即可顯示兩行,每行16個字符液晶模塊(顯示字符和數字)。市面上字符液晶大多數是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大部分的字符型液晶。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義CGRAM,顯示效果也不好)。LCD1602是指顯示的內容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數字)。市面上字符液晶大多數是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大部分的字符型液晶。管腳功能:1602采用標準的16腳接口,其中:第1腳:VSS為電源地。第2腳:VCC接5V電源正極。第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。第4腳:RS為寄存器選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執行指令。第7~14腳:D0~D7為8位雙向數據端。第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負極。操作控制:1602液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。指令集如圖所示:在單片機編程中還可以用字符型常量或變量賦值,如'A’。因為CGROM儲存的字符代碼與我們PC中的字符代碼是基本一致的,因此我們在向DDRAM寫C51字符代碼程序時甚至可以直接用P1=‘A’這樣的方法。PC在編譯時就把'A'先轉換為41H代碼了。字符代碼0x00~0x0F為用戶自定義的字符圖形RAM(對于5X8點陣的字符,可以存放8組,5X10點陣的字符,存放4組),就是CGRAM了。0x20~0x7F為標準的ASCII碼,0xA0~0xFF為日文字符和希臘文字符,其余字符碼(0x10~0x1F及0x80~0x9F)沒有定義。以下是1602的16進制ASCII碼表地址:讀的時候,先讀左邊那列,再讀上面那行,如:感嘆號!的ASCII為0x21,字母B的ASCII為0x42(前面加0x表示十六進制)。2.5輸入模塊計算器輸入數字和其他功能按鍵要用到很多按鍵,因為按鍵較少,所以使用獨鍵的方式。而且這里獨立鍵盤掃描也相對簡單。每個按鍵都有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤的一端通過電阻接GND而接地是通過程序輸出數字“0”實現的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態接地;另一個并行口輸入按鍵狀態,由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。當無按鍵閉合時,P1.0~P1.1之間開路;當有鍵閉合時,與閉合鍵相連的兩條I/O口線之間短路。圖3-1鍵盤電路第三章軟件的設計在LCD1602顯示以及LED燈顯示程序本人就不過多講解講解,對于這次的畢業設計我只是做了一個簡易的空調變頻,結合實際我將變頻這一塊實際化,變成了用STC89C52單片機控制,結合溫度傳感器DS18B20和LCD1602液晶顯示器為核心,同時采用蜂鳴器來檢測溫度,來簡易完成的室溫測試。當然我也也采用了一個小型電機,進行驅動,雖然不是那么理想化,但是還是能較完善的實現其功能的。3.1各個頭文件的源代碼主程序LCD1602.h頭文件#include<regX52.h>#defineucharunsignedchar#defineuintunsignedintsbitlcden=P2^2;//LCD控制端口sbitlcdrs=P2^0;#definelcd_data_portP0voiddelay(uintz){ uintx,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}voidwrite_com(ucharcom)/*LCD1602命令字寫入*/ { lcdrs=0; lcd_data_port=com; delay(5); lcden=1; delay(5); lcden=0;}voidwrite_data(uchardate) /*LCD1602數據字寫入*/{ lcdrs=1;lcd_data_port=date; delay(5); lcden=1; delay(5); lcden=0;}voidLCD1602_init() /*LCD1602初始化*/{ lcden=0; write_com(0x38);//顯示模式設置 write_com(0x0c); write_com(0x06);//顯示光標移動 write_com(0x01);//顯示清屏 write_com(0x80+0x1);}delay.h頭文件/*************************************************************************************函數名:N微秒延時函數調用:delay_nus(i);參數:1~65535返回值:無結果:占用CPU方式延時備注:應用于普通89C(S)51單片機,系統晶振11.0592MHz/*************************************************************************************/voiddelay_nus(unsignedinti) //延時:i>=12,i的最小延時單12us{ i=i/10; while(--i);}/************************************************************************************函數名:N毫秒延時函數調用:delay_nms(i);參數:1~65535返回值:無結果:占用CPU方式延時備注:應用于普通89C(S)51單片機,系統晶振11.0592MHz/************************************************************************************/voiddelay_nms(unsignedintn) //延時nms { n=n+1; while(--n) delay_nus(900); //延時1ms,同時進行補償}特殊說明:本來這里要求的晶振的時鐘頻率要求的是11.0592MHZ但是筆者已經買了12MHZ的晶振,而且設計要求對時鐘也不是很精確,所以用這個頭文件是可取的。DS18B20頭文件源程序/*DS18B20_3.H*/sbitDQ=P1^3;//定義DQ引腳為P1.3/*******************************延時函數*********************************功能:在11.059MHz的晶振條件下調用本函數需要24μs,然后每次計數需16μs**************************************************************************/voidDS18_delay(intuseconds){ints;for(s=0;s<useconds;s++);}/*******************************復位函數********************************功能:完成單總線的復位操作。*復位時間為480μs,因此延時時間為(480-24)/16=28.5,取29μs。*經過70μs之后檢測存在脈沖,因此延時時間為(70-24)/16=2.875,取3μs。**************************************************************************/unsignedcharow_reset(void){unsignedcharpresence;DQ=0;//將DQ線拉低DS18_delay(29);//保持480μsDQ=1;//DQ返回高電平DS18_delay(3);//等待存在脈沖presence=DQ;//獲得存在信號DS18_delay(25);//等待時間隙結束return(presence);//返回存在信號,0=器件存在,1=無器件}/******************************位寫入函數********************************功能:向單總線寫入1位值:bitval*************************************************************************/voidwrite_bit(charbitval){DQ=0;//將DQ拉低開始寫時間隙if(bitval==1)DQ=1;//如果寫1,DQ返回高電平DS18_delay(5);//在時間隙內保持電平值,DQ=1;//DS18_delay函數每次循環延時16μs,因此DS18_delay(5)=104μs}/****************************字節寫入函數********************************功能:向單總線寫入一個字節值:val*************************************************************************/voidds18write_byte(charval){unsignedchari;unsignedchartemp;for(i=0;i<8;i++){//寫入字節,每次寫入一位temp=val>>i;temp&=0x01;write_bit(temp);}DS18_delay(5);}/****************************位讀取函數*********************************功能:從單總線上讀取一位信號,所需延時時間為15μs,因此無法調用前面定義*的DS18_delay()函數,而采用一個for()循環來實現延時。************************************************************************/unsignedcharread_bit(void){unsignedchari;DQ=0;//將DQ拉低開始讀時間隙DQ=1;//thenreturnhighfor(i=0;i<3;i++);//延時15μsreturn(DQ);//返回DQ線上的電平值}/****************************字節讀取函數********************************功能:從單總線讀取一個字節的值*************************************************************************/unsignedcharDSread_byte(void){unsignedchari;unsignedcharvalue=0;for(i=0;i<8;i++){//讀取字節,每次讀取一個字節if(read_bit())value|=0x01<<i;//然后將其左移DS18_delay(6);}return(value);}/*******************************讀取溫度函數******************************功能:如果單總線節點上只有一個器件則可以直接掉用本函數。如果節點上有多個器*件,為了避免數據沖突,應使用MatchROM函數來選中特定器件。*注:本函數是根據DS1820的溫度數據格式編寫的,若用于DS18B20,必須根據*DS18B20的溫度數據格式作適當修改。**************************************************************************/unsignedintReadTemperature(void){unsignedcharget[10];unsignedchartemp_lsb,temp_msb;unsignedintt;unsignedchark;ow_reset();ds18write_byte(0xCC);//跳過ROMds18write_byte(0x44);//啟動溫度轉換DS18_delay(5);ow_reset();ds18write_byte(0xCC);//跳過ROMds18write_byte(0xBE);//讀暫存器for(k=0;k<2;k++){get[k]=DSread_byte();}temp_msb=get[1];//Signbyte+lsbittemp_lsb=get[0];//Tempdatapluslsbt=temp_msb*256+temp_lsb;t=t&0x0ff0;if(t<0xff&&t>0xf0)t=(-1)*t;returnt>>4;//temp_f=(((int)temp_c)*9)/5+32;//輸出華氏溫度值第四章仿真及調試在程序設計方法上,模塊化程序設計是單片機應用中最常用的程序設計方法。設計的中心思想是把一個復雜應用程序按整體功能劃分成若干相對獨立的程序模塊,各模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東環境保護工程職業學院高職單招職業技能測試近5年常考版參考題庫含答案解析
- 2025年廣東信息工程職業學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年平頂山工業職業技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年山西國際商務職業學院高職單招語文2019-2024歷年真題考點試卷含答案解析
- 2025年山東電子職業技術學院高職單招(數學)歷年真題考點含答案解析
- 2025年宜春幼兒師范高等專科學校高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年安順職業技術學院高職單招職業技能測試近5年常考版參考題庫含答案解析
- 2025年安徽中醫藥高等專科學校高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- Excel基礎知識培訓課件
- 內蒙古大學創業學院《病理生理學案例教學》2023-2024學年第一學期期末試卷
- 13J933-2體育場地與設施(二)
- 2024年(學習強國)思想政治理論知識考試題庫與答案
- 2024年海南省國有資本運營有限公司招聘筆試沖刺題(帶答案解析)
- 2024提高治療前腫瘤TNM評估率工作方案(修改版)
- 《阿Q正傳》(課件)2023-2024高二語文選擇性必修下冊
- 2024年高考語文新課標1卷講評+課件
- 身邊的昆蟲世界 人教版初中綜合實踐活動七年級下冊
- 風險管控措施方案(2篇)
- 期末考試-公共財政概論-章節習題
- 2023年水處理BOT合同模板范本
- ()地質填圖方法詳解
評論
0/150
提交評論