


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片微型計(jì)算機(jī)原理 與接口技術(shù)課程設(shè)計(jì)報(bào)告題目: 溫度測(cè)量班級(jí):學(xué)號(hào): 姓名: 指導(dǎo)老師 : 實(shí)習(xí)日期 : 6.277.11、課程設(shè)計(jì)要求(1通過(guò)按鍵設(shè)置溫度上、下限(2讀入 A/D 轉(zhuǎn)換數(shù)據(jù):若數(shù)據(jù) 下限,則顯示溫度并顯示L、報(bào)警并使步進(jìn)電機(jī)正轉(zhuǎn); 若數(shù)據(jù)上限,則顯示溫度并顯示 H 、報(bào)警并使步進(jìn)電機(jī)反轉(zhuǎn); 若下限 數(shù)據(jù)上限,則顯示 C(3本機(jī)地址為06H,當(dāng)接到上位機(jī)發(fā)的06H時(shí),貝卩回發(fā)06H 當(dāng)接到上位機(jī)發(fā)的 AAH 時(shí),則將當(dāng)前溫度發(fā)給上位機(jī) 當(dāng)接到上位機(jī)發(fā)的 55H 時(shí),則小燈亮,提示修改上、下限2、方案論證因?yàn)楸驹O(shè)計(jì)是于AT89C51單片機(jī)的溫度測(cè)量系統(tǒng),可以使用熱敏電阻之類的器
2、件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上將被測(cè)溫度顯示出來(lái)。但是這種設(shè)計(jì)需要用到 A/D轉(zhuǎn)換電路,還要涉及到電 阻與溫度的對(duì)應(yīng)值的計(jì)算,比較麻煩。所以采用 DS18B2溫度傳感器,這 樣可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,電路簡(jiǎn)單,精度高,軟硬 件都容易實(shí)現(xiàn),而且使用單片機(jī)的接口便于系統(tǒng)的再擴(kuò)展,滿足設(shè)計(jì)要 求。步進(jìn)電機(jī)模塊,因?yàn)椴竭M(jìn)電機(jī)的額定工作電流過(guò)大,單片機(jī)無(wú)法獨(dú)立 驅(qū)動(dòng)其工作,因而在接口電路與步進(jìn)電機(jī)之間加入U(xiǎn)LN2003A驅(qū)動(dòng)芯片,利用驅(qū)動(dòng)芯片的電流放大作用,使步進(jìn)電機(jī)可靠的運(yùn)轉(zhuǎn)??傮w設(shè)計(jì)方框圖如圖2.
3、1所示。溫度傳感器步進(jìn)電機(jī)單片機(jī)顯示報(bào)警控制按鍵圖2.1總體設(shè)計(jì)方框圖3、硬件系統(tǒng)設(shè)計(jì)及原理圖3.1單片機(jī)主控電路本設(shè)計(jì)中采用美國(guó)Atmel公司的8位單片機(jī)AT89C51作為單片機(jī)控制 模塊的核心部件,該型單片機(jī)在本設(shè)計(jì)中的應(yīng)用如下:晶振采用 12MHZ,復(fù)位電路采用上電加按鈕復(fù)位。C1 I.31>uT Ldh -TEXT>r i X1c1*CRYSTAL<TEXT>3()u<TEXT>>XTAL1ieXTAL2RSTR11 Ok vT 隼 XT*U119sXTALI19XTAL29RST23FSEN30ALE3 1EA圖復(fù)位電路3.2顯示電路顯示電路
4、采用4位共陰極LED數(shù)碼管,P 0 口由上拉電阻提高驅(qū)動(dòng)能力,作為段碼輸出并作為數(shù)碼管的驅(qū)動(dòng)。P2 口的低四位作為數(shù)碼管的位選端。采用動(dòng)態(tài)掃描的方式顯示。fO.QWDORJ.2/AD2 poam P0.4l';iWpa.&'AEtR17/AD7P2.WAEP2.W P3.2/A1D P2.SA11 P2 4JAI2圖3.2數(shù)碼管顯示電路3.3溫度傳感器DS18B2 0溫度傳感器是美國(guó)DALLA S半導(dǎo)體公司最新推出的一種改進(jìn)型 智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè) 溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方P0.6/A
5、D6P0.7/AD73332P2.0/A8P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2 5/A13 P2.6/A14 P27/A1521222324運(yùn)262728R11k <TEXT>U2P3.0/RXD P3 1/TXD P3.2/INT0 m 7I/INT1VCCDQGND 27.0DS18B20 <TEXT>圖3.3溫度傳感器與單片機(jī)的連接3.4溫度上下限調(diào)整按鍵本系統(tǒng)設(shè)計(jì)三個(gè)按鍵,采用查詢方式,一個(gè)用于選擇切換設(shè)置溫度上下限和當(dāng)前溫度,另外兩個(gè)分別用于設(shè)置報(bào)警溫度的加和減。均采用軟件消抖P2 O/AS 戶 2.1/AS P2.2/A
6、10 P2.3/A11 P2 4/A12 P2 5/A13 P2.6/A14 P2 7/A1S2122232425262728P3 D/RXD F3.1/TXD P3.2INT0' P3.3INT1P3 4/TO P3 S/T1P3.6/WRP3.7/RD10TTIR2R11k17i l,<ADD:£刑16圖3.4按鍵電路3.5步進(jìn)電機(jī)步進(jìn)電機(jī)驅(qū)動(dòng)電路本設(shè)計(jì)選用驅(qū)動(dòng)芯片ULN2003驅(qū)動(dòng)四相步進(jìn)電機(jī)。ULN2003是高耐壓、大電流達(dá)林頓陳列,由七個(gè)硅NPN達(dá)林頓管組成。ULN2003的每一對(duì)達(dá)林頓都串聯(lián)一個(gè) 2.7K的基極電阻,在5V的工作 電壓下它能與TTL和CMOS
7、電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn) 邏輯緩沖器來(lái)處理的數(shù)據(jù)。ULN2003工作電壓高,工作電流大,灌電流可達(dá)500mA,并且能夠在關(guān)態(tài)時(shí)承受50V的電壓,輸出還可以在高負(fù)載電流并行運(yùn)行。圖 3.5.2.1 ULN2003 方框圖表3.5.2 ULN2003極限值參數(shù)參數(shù)名稱符號(hào)數(shù)值單位輸入電壓Vipf30V輸入電流lN25mA功耗Pd1W工柞壞境溫度Topr-20 to +85貯存溫度Tstg-55【0+150'CULN2003與單片機(jī)連接驅(qū)動(dòng)步進(jìn)電機(jī)原理圖如下:崖:2= lt-1冒 F11F PFPFPPPF圖3.522步進(jìn)電機(jī)驅(qū)動(dòng)電路3.6雙機(jī)通信利用單片機(jī)串行口實(shí)現(xiàn)兩個(gè)單片機(jī)
8、 主機(jī)、從機(jī))之間的通信,其中一個(gè)單片機(jī)作為主機(jī) 發(fā)送方),另一個(gè)為從機(jī) 接收方),主機(jī)讀入按鍵值并將相應(yīng)命令發(fā)送給從機(jī),從機(jī)收到命令后執(zhí)行相應(yīng)的功能。雙機(jī)通信示意圖如下:AT89C51AT89C51圖3.6雙機(jī)通信示意圖4、軟件清單系統(tǒng)程序主要包括主程序和通信程序。其中主程序包括延時(shí)函數(shù)、掃描顯示函數(shù)、DS18B20復(fù)位函數(shù)、DS18B20 寫(xiě)命令函數(shù)、DS18B20讀1字節(jié)函數(shù)、讀出溫度函數(shù)、溫度數(shù)據(jù)處理函數(shù)、報(bào)警函數(shù)、步進(jìn)電機(jī)函數(shù)、設(shè)置溫度顯示轉(zhuǎn)換函數(shù)、按鍵查詢程序、主函數(shù)。通信上位機(jī)程序包括延時(shí)函數(shù)、掃描顯示函數(shù)、初始化函數(shù)、按鍵查詢程序、主函數(shù)。下位機(jī)函數(shù)包括初始化、接收程序、主函數(shù)
9、上位機(jī)軟件清單0: dm=table_dmdisplay0 。 delay(50>。 w0=1 。1: dm=table_dmdisplay1 。 delay(50>。 w1=1 。2: dm=table_dmdisplay2 。 delay(50>。 w2=1 。3: dm=table_dmdisplay3 。 delay(50>。 w3=1 。#include "reg51.h"#include "intrins.h" _nop_(>。延時(shí)函 數(shù)用#define dm P0 /段碼輸出口#define uchar uns
10、igned char#define uint unsigned int uint h。sbit w0=P2A0o /數(shù)碼管 4sbit w仁P2A1o /數(shù)碼管 3sbit w2=P2A2。 /數(shù)碼管 2sbit w3=P2A3。 /數(shù)碼管 1sbit aa=P1A0。sbit bb=P1A1。sbit cc=P1A2。uchar idata buf1。uchar code table_dm15=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0 x07,0x7f,0x6f,0x00,0x40,0x38,0x76,0x3 9。/共陰 LED 段碼表 "0&quo
11、t; "1" "2" "3" "4" "5" "6" "7" "8" "9" " 不亮 " "-"'L''H''C'switch (j> case w0=0 case w1=0 case w2=0 case w3=0 /* 初始化函數(shù) */ void init(>TMOD=0x20。 TH1=0xfd 。TL1=0xf
12、d 。PCON=0x00。uchardataSCON=0x50。display4=0x00,0x00,0x00,0x00 。/顯示單元數(shù)據(jù),共 4 個(gè)數(shù)據(jù)和一個(gè)運(yùn) 算暫用keyscan/*11us 延時(shí)函數(shù)*/void delay(uint t>for (。 t>0。 t->。scanvoid scan(>int j。for(j=0。 j<4。 j+>void keyscan(>if (aa=0>SBUF=0x06。do while(TI=0> 。 TI=0。else if (bb=0>SBUF=0xaa。do while(TI=0&
13、gt; 。 TI=0。TR1=1 。else if(cc=0> SBUF=0x55 。 display3=0x0d 。 display2=0x0d 。 display1=0x0d 。 display0=0x0d 。do while(TI=O> 。 TI=O。 else 。mainvoid main(>init(> 。dm=OxOO。 /初始化端口wO=O。w1=O。w2=O。w3=O。for(h=O 。 h<4 。 h+> / 開(kāi) 機(jī) 顯 示"OOOO"displayh=O。while(1>scan(>。keyscan(>
14、;。if(RI=1>RI=O。bufO=SBUF。 if(bufO=Ox55>else if(bufO=OxO6>display3=OxOa。display2=OxOa。 display1=bufO%1OO/1O 。 displayO=bufO%1O 。elsedisplay3=OxOa。display2=OxOe。 display1=bufO%1OO/1O 。 displayO=bufO%1O 。下位機(jī)件清單#include "reg51.h"#include "intrins.h" _nop_(>。延時(shí)函數(shù)用#define d
15、m PO /段碼輸出口#define uchar unsigned char#define uint unsigned int ucharcodeTable4=OxO3,OxO6,OxOc,OxO9 。 ucharcodeTable14=OxO9,OxOc,OxO6,OxO3 。sbit DQ=P2A7O 溫度輸入口sbit w0=P2A0o /數(shù)碼管 4sbit w1=P2A1。 /數(shù)碼管 3sbit w2=P2A2。 /數(shù)碼管 2sbit w3=P2A3。 /數(shù)碼管 1sbit beep=P3A7。 /蜂鳴器和指示燈sbit set=P2A6。 /溫度設(shè)置切換鍵sbit add=P2A4。
16、 /溫度加sbit dec=P2A5。 /溫度減sbit lig=P3A6。int temp1=0。/顯示當(dāng)前溫度和設(shè)置溫度的標(biāo)志位為 0 時(shí)顯示當(dāng)前溫度 uint h。uint temp。uchar r。uchar high=35,low=20。uchar sign。uchar q=0。uchar tt=0。uchar scale。uchar idata buf1=0x00 。int num=0。int num1=0。/* 溫度小數(shù)部分用查表法 */ ucharcode ditab16=0x00,0x01,0x01,0x02,0x03, 0x03,0x04,0x04,0x05,0x06,0x
17、06,0x07,0 x08,0x08,0x09,0x09 。/小數(shù)斷碼表uchar code table_dm15=0x3f,0x06,0x5b,0x4f,0x 66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40 ,0x38,0x76,0x39 。/共陰 LED 段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" " 不亮&qu
18、ot; "-"'L''H''C' uchar table_dm1=0xbf,0x86,0xdb,0xcf,0xe 6,0xed,0xfd,0x87,0xff,0xef 。 /個(gè)位帶 小數(shù)點(diǎn)的斷碼表uchar data temp_data2=0x00,0x00 。 / 讀出溫 度暫放uchar data display5=0x00,0x00,0x00,0x00,0x00 。 / 顯示單元數(shù)據(jù),共 4 個(gè)數(shù)據(jù)和一 個(gè)運(yùn)算暫用延時(shí)函數(shù)void delay(uint tfor (。t0。t-。/* 掃描顯示函數(shù) */void scan
19、(int j 。for(j=0 。 j4 。 j+switch (jcase 0: dm=table_dmdisplay0 。 w0=0。 delay(50。 w0=1。 /xiaoshu case 1: dm=table_dm1display1 。 w1=0。 delay(50。 w1=1。 /gewei case 2: dm=table_dmdisplay2 。 w2=0。 delay(50。 w2=1。 /shiwei case 3: dm=table_dmdisplay3 w3=0。 delay(50。 w3=1。 /baiwei復(fù)位函數(shù)*/* 18B20 ow_reset(voidc
20、har presence=1。 while(presencewhile(presenceDQ=1。 _nop_(。 _nop_(。 / 從高拉 倒低DQ=0。delay(50。 /550 usDQ=1。delay(6。 /66 uspresence=DQ /presence=0復(fù)位成功,繼續(xù)下一步delay(45。 /延時(shí) 500 us presence=DQ。DQ=1。 /拉高電平/*DS18B20 寫(xiě)命令函數(shù) */ /向 1-WIRE 總線上寫(xiě) 1 個(gè)字節(jié) void write_byte(uchar valuchar i。for(i=8 。 i0。 i-DQ=1。 _nop_(。 _nop
21、_(。 /從高拉 倒低DQ=0 。_nop_( 。_nop_( 。_nop_(。 _nop_(。 /5 usDQ=val&0x01。 /最低位移出 delay(6。 /66 us val=val/2。 /右移 1 位DQ=1。delay(1。/*S18B20 讀 1 字節(jié)函數(shù) */ /從總線上取 1 個(gè)字節(jié) uchar read_byte(void>uchar i。uchar value=0。for(i=8 o i>0 o i->DQ=1o _nop_(>o _nop_(>o value>>=1oDQ=0o_nop_(>o_nop_(&g
22、t;o_nop_(>o _nop_(>o /4 usDQ=1o_nop_(>o_nop_(>o_nop_(>o _nop_(>o /4 us if(DQ>value|=0x80odelay(6>o /66 us/*讀出溫度函數(shù) */DQ=1o return(value>o read_temp(>ow_reset(>o /總線復(fù)位delay(200>owrite_byte(0xcc>o /發(fā)命令 write_byte(0x44>o /發(fā)轉(zhuǎn)換命令 ow_reset(>odelay(1>owrite_by
23、te(0xcc>o /發(fā)命令 write_byte(0xbe>o temp_data0=read_byte(>o / 讀溫度 值的第字節(jié)temp_data1=read_byte(>o / 讀溫度 值的高字節(jié)temp=temp_data1otemp<<=8o temp=temp|temp_data0o / 兩字節(jié)合 成一個(gè)整型變量。/*溫度數(shù)據(jù)處理函數(shù) */return tempo /返回溫度值 work_temp(uint tem>display4=tem&0x0f o / 取小數(shù)部分 的值display0=ditabdisplay4 o /
24、存入小 數(shù)部分顯示值display4=tem>>4 o / 取中間八位 ,即 整數(shù)部分的值display3=display4/100 o / 取百位 數(shù)據(jù)暫存display1=display4%100 o / 取后兩 位數(shù)據(jù)暫存display2=display1/10 o / 取十位數(shù) 據(jù)暫存display1=display1%10 o /個(gè)位數(shù)據(jù) r=display1+display2*10+display3* 100o/ 符號(hào)位顯示判斷 /if(r<high>if(r>low>display3=0x0eoelsedisplay3=0x0coelsedis
25、play3=0x0doif(!display2>display2=0x0ao /次高位為 0 時(shí)不顯 示*報(bào)警函數(shù) */void BEEP(>if(r>high&&r<129>|r<low>beep=!beepoelse beep=0。步進(jìn)電機(jī)函數(shù) */* void stepper(> if(r>high>TR0=1。if(num1<8>dowhile(!TF0> 。 num1+TH0=0x06。 TL0=0x06。else num1=0。P1=Tablenum。num+。if(num=4> n
26、um=0 。else if(r<low>TR0=1。if(num1<8>dowhile(!TF0> 。 num1+TH0=0x06。 TL0=0x06。else num1=0。P1=Table1num。num+。if(num=4> num=0 。else TR0=0。/* 設(shè)置溫度顯示轉(zhuǎn)換 */ void xianshi(int horl> if(horl=high> display3=0x0d。 display2=horl%100/10。 display1=horl%10 。display0=0 。else display3=0x0c。 dis
27、play2=horl%100/10。 display1=horl%10 。display0=0 。 if(!display2>display2=0x0a。 /次高位為 0 時(shí)不顯 示按鍵查詢程序 */void keyscan(>/int temp1 。 /最高溫度和最低溫度標(biāo) 志位if(set=0>while(1>delay(500>。 /消抖 if(set=0>temp1+。 while(!set> scan(>。if(temp1=1>xianshi(high> 。 scan(>。if(add=0>while(!add&
28、gt; scan(>。 high+=1。if(dec=0>while(!dec> scan(>。high-=1。 if(temp1=2> xianshi(low> 。 if(add=0>while(!add> scan(>。 low+=1 。TR1=1。SCON=0x50。SBUF=0x55 。接收函數(shù)void receive (> buf0=SBUF。 if(buf0=0x06> lig=1。SBUF=0x06。 if(dec=0> while(!dec> scan(>。 low-=1 。 scan(>
29、。 if(temp1>=3> temp1=0。 break。do while(TI=0> 。 TI=0。 else if(buf0=0xaa>lig=1。SBUF=r 。do while(TI=0> 。 TI=0。 else if(buf0=0x55>lig=0x00 。SBUF=0x55 。 do while(TI=0> 。 TI=0。 else。主函數(shù) */*void main(>init(> 。dm=0x00。 / 初始化端口w0=0。w1=0。w2=0。初始化void init (void>TMOD=0x22 。TH0=0x0
30、6。 TL0=0x06。TH1=0xfd。TL1=0xfd。PCON=0x00。w3=0。for(h=0 。 h<4 。 h+> / 開(kāi) 機(jī) 顯 示"0000"displayh=0 。ow_reset(>。 /開(kāi)機(jī)先轉(zhuǎn)換一次 write_byte(0xcc>。 /Skip ROMwrite_byte(0x44。/ 發(fā)轉(zhuǎn)換命令for(h=0 。 h100 。h+ / 開(kāi) 機(jī) 顯 示work_temp(read_temp(。 / 處理溫度"0000"數(shù)據(jù)stepper(。scan(。scan(。 /顯示溫度值BEEP(。while(1keyscan(。if(RI=1elseRI=0。keyscan(。recei
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 張掖中考試題及答案
- 物業(yè)完整試題及答案
- 淘寶客服溝通培訓(xùn)
- 路基施工(路基排水施工)
- 經(jīng)驗(yàn)交流活動(dòng)策劃與實(shí)施
- 溫控設(shè)備管理員工培訓(xùn)
- 2025年中國(guó)母嬰用品行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 2025生物課標(biāo)培訓(xùn)
- 針灸出科門(mén)診病例分析專題報(bào)告
- 籃球教學(xué)工作總結(jié)
- 小學(xué)用電安全課件
- 2024年河南省蘭考縣教育局公開(kāi)招聘試題含答案分析
- 2025年北京市高考英語(yǔ)試卷真題(含答案解析)
- 招商運(yùn)營(yíng)筆試題目及答案
- 湟水河河湟新區(qū)段北岸防洪生態(tài)綜合治理項(xiàng)目 社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告
- JG/T 272-2010預(yù)制高強(qiáng)混凝土薄壁鋼管樁
- JG/T 266-2011泡沫混凝土
- 雜屋轉(zhuǎn)讓合同協(xié)議書(shū)
- 智能藥盒創(chuàng)新創(chuàng)業(yè)計(jì)劃書(shū)
- 護(hù)理小組文化建設(shè)與管理
- 情侶送禮轉(zhuǎn)賬協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論