


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片微型計算機原理 與接口技術課程設計報告題目: 溫度測量班級:學號: 姓名: 指導老師 : 實習日期 : 6.277.11、課程設計要求(1通過按鍵設置溫度上、下限(2讀入 A/D 轉換數據:若數據 下限,則顯示溫度并顯示L、報警并使步進電機正轉; 若數據上限,則顯示溫度并顯示 H 、報警并使步進電機反轉; 若下限 數據上限,則顯示 C(3本機地址為06H,當接到上位機發的06H時,貝卩回發06H 當接到上位機發的 AAH 時,則將當前溫度發給上位機 當接到上位機發的 55H 時,則小燈亮,提示修改上、下限2、方案論證因為本設計是于AT89C51單片機的溫度測量系統,可以使用熱敏電阻之類的器
2、件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉換后,就可以用單片機進行數據的處理,在顯示電路上將被測溫度顯示出來。但是這種設計需要用到 A/D轉換電路,還要涉及到電 阻與溫度的對應值的計算,比較麻煩。所以采用 DS18B2溫度傳感器,這 樣可以很容易直接讀取被測溫度值,進行轉換,電路簡單,精度高,軟硬 件都容易實現,而且使用單片機的接口便于系統的再擴展,滿足設計要 求。步進電機模塊,因為步進電機的額定工作電流過大,單片機無法獨立 驅動其工作,因而在接口電路與步進電機之間加入ULN2003A驅動芯片,利用驅動芯片的電流放大作用,使步進電機可靠的運轉。總體設計方框圖如圖2.
3、1所示。溫度傳感器步進電機單片機顯示報警控制按鍵圖2.1總體設計方框圖3、硬件系統設計及原理圖3.1單片機主控電路本設計中采用美國Atmel公司的8位單片機AT89C51作為單片機控制 模塊的核心部件,該型單片機在本設計中的應用如下:晶振采用 12MHZ,復位電路采用上電加按鈕復位。C1 I.31>uT Ldh -TEXT>r i X1c1*CRYSTAL<TEXT>3()u<TEXT>>XTAL1ieXTAL2RSTR11 Ok vT 隼 XT*U119sXTALI19XTAL29RST23FSEN30ALE3 1EA圖復位電路3.2顯示電路顯示電路
4、采用4位共陰極LED數碼管,P 0 口由上拉電阻提高驅動能力,作為段碼輸出并作為數碼管的驅動。P2 口的低四位作為數碼管的位選端。采用動態掃描的方式顯示。fO.QWDORJ.2/AD2 poam P0.4l';iWpa.&'AEtR17/AD7P2.WAEP2.W P3.2/A1D P2.SA11 P2 4JAI2圖3.2數碼管顯示電路3.3溫度傳感器DS18B2 0溫度傳感器是美國DALLA S半導體公司最新推出的一種改進型 智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測 溫度,并且可根據實際要求通過簡單的編程實現9-12位的數字值讀數方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運262728R11k <TEXT>U2P3.0/RXD P3 1/TXD P3.2/INT0 m 7I/INT1VCCDQGND 27.0DS18B20 <TEXT>圖3.3溫度傳感器與單片機的連接3.4溫度上下限調整按鍵本系統設計三個按鍵,采用查詢方式,一個用于選擇切換設置溫度上下限和當前溫度,另外兩個分別用于設置報警溫度的加和減。均采用軟件消抖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步進電機步進電機驅動電路本設計選用驅動芯片ULN2003驅動四相步進電機。ULN2003是高耐壓、大電流達林頓陳列,由七個硅NPN達林頓管組成。ULN2003的每一對達林頓都串聯一個 2.7K的基極電阻,在5V的工作 電壓下它能與TTL和CMOS
7、電路直接相連,可以直接處理原先需要標準 邏輯緩沖器來處理的數據。ULN2003工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關態時承受50V的電壓,輸出還可以在高負載電流并行運行。圖 3.5.2.1 ULN2003 方框圖表3.5.2 ULN2003極限值參數參數名稱符號數值單位輸入電壓Vipf30V輸入電流lN25mA功耗Pd1W工柞壞境溫度Topr-20 to +85貯存溫度Tstg-55【0+150'CULN2003與單片機連接驅動步進電機原理圖如下:崖:2= lt-1冒 F11F PFPFPPPF圖3.522步進電機驅動電路3.6雙機通信利用單片機串行口實現兩個單片機
8、 主機、從機)之間的通信,其中一個單片機作為主機 發送方),另一個為從機 接收方),主機讀入按鍵值并將相應命令發送給從機,從機收到命令后執行相應的功能。雙機通信示意圖如下:AT89C51AT89C51圖3.6雙機通信示意圖4、軟件清單系統程序主要包括主程序和通信程序。其中主程序包括延時函數、掃描顯示函數、DS18B20復位函數、DS18B20 寫命令函數、DS18B20讀1字節函數、讀出溫度函數、溫度數據處理函數、報警函數、步進電機函數、設置溫度顯示轉換函數、按鍵查詢程序、主函數。通信上位機程序包括延時函數、掃描顯示函數、初始化函數、按鍵查詢程序、主函數。下位機函數包括初始化、接收程序、主函數
9、上位機軟件清單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_(>。延時函 數用#define dm P0 /段碼輸出口#define uchar uns
10、igned char#define uint unsigned int uint h。sbit w0=P2A0o /數碼管 4sbit w仁P2A1o /數碼管 3sbit w2=P2A2。 /數碼管 2sbit w3=P2A3。 /數碼管 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 /* 初始化函數 */ void init(>TMOD=0x20。 TH1=0xfd 。TL1=0xf
12、d 。PCON=0x00。uchardataSCON=0x50。display4=0x00,0x00,0x00,0x00 。/顯示單元數據,共 4 個數據和一個運 算暫用keyscan/*11us 延時函數*/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+> / 開 機 顯 示"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 。下位機件清單#include "reg51.h"#include "intrins.h" _nop_(>。延時函數用#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 /數碼管 4sbit w1=P2A1。 /數碼管 3sbit w2=P2A2。 /數碼管 2sbit w3=P2A3。 /數碼管 1sbit beep=P3A7。 /蜂鳴器和指示燈sbit set=P2A6。 /溫度設置切換鍵sbit add=P2A4。
16、 /溫度加sbit dec=P2A5。 /溫度減sbit lig=P3A6。int temp1=0。/顯示當前溫度和設置溫度的標志位為 0 時顯示當前溫度 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。/* 溫度小數部分用查表法 */ ucharcode ditab16=0x00,0x01,0x01,0x02,0x03, 0x03,0x04,0x04,0x05,0x06,0x
17、06,0x07,0 x08,0x08,0x09,0x09 。/小數斷碼表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 。 /個位帶 小數點的斷碼表uchar data temp_data2=0x00,0x00 。 / 讀出溫 度暫放uchar data display5=0x00,0x00,0x00,0x00,0x00 。 / 顯示單元數據,共 4 個數據和一 個運算暫用延時函數void delay(uint tfor (。t0。t-。/* 掃描顯示函數 */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復位函數*/* 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復位成功,繼續下一步delay(45。 /延時 500 us presence=DQ。DQ=1。 /拉高電平/*DS18B20 寫命令函數 */ /向 1-WIRE 總線上寫 1 個字節 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 字節函數 */ /從總線上取 1 個字節 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/*讀出溫度函數 */DQ=1o return(value>o read_temp(>ow_reset(>o /總線復位delay(200>owrite_byte(0xcc>o /發命令 write_byte(0x44>o /發轉換命令 ow_reset(>odelay(1>owrite_by
23、te(0xcc>o /發命令 write_byte(0xbe>o temp_data0=read_byte(>o / 讀溫度 值的第字節temp_data1=read_byte(>o / 讀溫度 值的高字節temp=temp_data1otemp<<=8o temp=temp|temp_data0o / 兩字節合 成一個整型變量。/*溫度數據處理函數 */return tempo /返回溫度值 work_temp(uint tem>display4=tem&0x0f o / 取小數部分 的值display0=ditabdisplay4 o /
24、存入小 數部分顯示值display4=tem>>4 o / 取中間八位 ,即 整數部分的值display3=display4/100 o / 取百位 數據暫存display1=display4%100 o / 取后兩 位數據暫存display2=display1/10 o / 取十位數 據暫存display1=display1%10 o /個位數據 r=display1+display2*10+display3* 100o/ 符號位顯示判斷 /if(r<high>if(r>low>display3=0x0eoelsedisplay3=0x0coelsedis
25、play3=0x0doif(!display2>display2=0x0ao /次高位為 0 時不顯 示*報警函數 */void BEEP(>if(r>high&&r<129>|r<low>beep=!beepoelse beep=0。步進電機函數 */* 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。/* 設置溫度顯示轉換 */ 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 時不顯 示按鍵查詢程序 */void keyscan(>/int temp1 。 /最高溫度和最低溫度標 志位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 。接收函數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。主函數 */*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+> / 開 機 顯 示"0000"displayh=0 。ow_reset(>。 /開機先轉換一次 write_byte(0xcc>。 /Skip ROMwrite_byte(0x44。/ 發轉換命令for(h=0 。 h100 。h+ / 開 機 顯 示work_temp(read_temp(。 / 處理溫度"0000"數據stepper(。scan(。scan(。 /顯示溫度值BEEP(。while(1keyscan(。if(RI=1elseRI=0。keyscan(。recei
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校生物園管理制度
- 學校詩詞曲管理制度
- 學法校資產管理制度
- 學生穿校服管理制度
- 安全生產部管理制度
- 安裝隊科室管理制度
- 定銷房銷售管理制度
- 實訓室環境管理制度
- 審核制度及管理制度
- 客棧經營與管理制度
- 安全生產事故案例分析課件
- 運用PDCA循環減少靜脈用藥集中調配貼簽錯誤的探討靜配中心質量持續改進案例
- 液化氣站雙控風險告知卡
- 小學班主任如何做好學生的思政教育工作
- 中國特色社會主義思想概論 課件 第四章 堅持以人民為中心
- 西班牙語入門語法(修正)
- 2023年06月湖北孝感市檢察機關招考聘用雇員制檢察輔助人員73人筆試題庫含答案詳解
- 財新穿透安邦資本魔術
- 當代大學德語4答案(1-12)
- 古今字通假字異體字繁簡字
- 零件清理、精整作業指導書
評論
0/150
提交評論