MSP430單片機(jī)溫度單片機(jī)課程設(shè)計(jì)_第1頁(yè)
MSP430單片機(jī)溫度單片機(jī)課程設(shè)計(jì)_第2頁(yè)
MSP430單片機(jī)溫度單片機(jī)課程設(shè)計(jì)_第3頁(yè)
MSP430單片機(jī)溫度單片機(jī)課程設(shè)計(jì)_第4頁(yè)
MSP430單片機(jī)溫度單片機(jī)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、山東理工大學(xué)計(jì)算機(jī)學(xué)院課 程 設(shè) 計(jì)單片機(jī)系統(tǒng)設(shè)計(jì)班 級(jí) 計(jì)科1104 姓 名 學(xué) 號(hào) 指導(dǎo)教師 李業(yè)德 韓慧 二 一四 年 十一 月 日課程設(shè)計(jì)任務(wù)書及成績(jī)?cè)u(píng)定課題名稱_溫度測(cè)試系統(tǒng)設(shè)計(jì)_I、 題目的目的和要求: 利用溫度傳感器和MSP430單片機(jī)設(shè)計(jì)一個(gè)溫度測(cè)試系統(tǒng),將測(cè)試結(jié)果(十進(jìn)制)在LED上顯示出來(lái),并定義一個(gè)保持按鍵,當(dāng)按下該鍵時(shí),將當(dāng)前測(cè)試值保持不變(按鍵不動(dòng)作時(shí)為正常測(cè)量顯示)。溫度顯示格式為:XXX 。II、 設(shè)計(jì)進(jìn)度及完成情況日 期內(nèi) 容11.10選取題目,進(jìn)行資料搜集和系統(tǒng)分析工作11.14進(jìn)行單獨(dú)程序設(shè)計(jì)以及完成單獨(dú)接口電路11.16將全部程序綜合并進(jìn)行整體程序調(diào)試和連

2、接整體接口電路11.18書寫課程設(shè)計(jì)報(bào)告并寫下相關(guān)問(wèn)題總結(jié)11.20進(jìn)行課程設(shè)計(jì)答辯,并打印上交III、 主要參考文獻(xiàn)及資料MSP430系列16位低功耗單片機(jī)原理及應(yīng)用DS18B20溫度傳感器的使用智能儀器原理及應(yīng)用學(xué)科部主任 李業(yè)德、 成績(jī)?cè)u(píng)定:設(shè)計(jì)成績(jī): (教師填寫)指導(dǎo)老師: (簽字)二 年 月 日 目錄I、題目的目的和要求:2II、設(shè)計(jì)進(jìn)度及完成情況2III、主要參考文獻(xiàn)及資料3、 成績(jī)?cè)u(píng)定:3目錄4本次課程設(shè)計(jì)的目的和意義5設(shè)計(jì)題目6系統(tǒng)的主要功能、作用以及主要技術(shù)性能指標(biāo)7總體設(shè)計(jì)方案、工作和組成原理8系統(tǒng)設(shè)計(jì)11設(shè)計(jì)總結(jié)26作品的使用或操作說(shuō)明27設(shè)計(jì)圖紙或圖表28本次課程設(shè)計(jì)的

3、目的和意義課程設(shè)計(jì)是讓我熟練掌握了課本上的一些理論知識(shí),課程設(shè)計(jì)也是一個(gè)學(xué)習(xí)新知識(shí)、鞏固加深所學(xué)課本理論知識(shí)的過(guò)程,它培養(yǎng)了我們綜合運(yùn)用知識(shí)的能力,獨(dú)立思考和解決問(wèn)題的能力。加深我們對(duì)單片機(jī)原理與應(yīng)用課程的理解設(shè)計(jì)題目溫度測(cè)試系統(tǒng)設(shè)計(jì):利用溫度傳感器DS18B20和MSP430單片機(jī)設(shè)計(jì)一個(gè)溫度測(cè)試系統(tǒng),將測(cè)試結(jié)果(十進(jìn)制)在LED上顯示出來(lái),并定義一個(gè)保持按鍵,當(dāng)按下該鍵時(shí),將當(dāng)前測(cè)試值保持不變(按鍵不動(dòng)作時(shí)為正常測(cè)量顯示)。溫度顯示格式為:XXX 。系統(tǒng)的主要功能、作用以及主要技術(shù)性能指標(biāo)系統(tǒng)的主要功能是單片機(jī)實(shí)時(shí)從溫度傳感器讀取溫度數(shù)據(jù)信息,并在數(shù)碼管顯示,同時(shí)掃描是否有保持按鍵按下,如

4、果按下則不再繼續(xù)從溫度傳感器讀取溫度數(shù)據(jù)信息,保持溫度值不變。作用是可以實(shí)時(shí)讀取環(huán)境中的溫度信息,供用戶查看,同時(shí)當(dāng)用戶需要觀察某溫度時(shí),可以按下按鍵保持溫度不變。主要技術(shù)指標(biāo):1. 基本范圍0-992. 精度誤差小于0.53. LED數(shù)碼直讀顯示4. 掃描按鍵保持?jǐn)?shù)值總體設(shè)計(jì)方案、工作和組成原理數(shù)字溫度計(jì)設(shè)計(jì)方案論證方案一 由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(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)換電路,感溫電路比較麻煩。方案二 進(jìn)而考慮到用溫度傳感器

5、,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。主控制器單片機(jī)采用MSP430單片機(jī),處理能力強(qiáng),功耗低,實(shí)現(xiàn)該功能僅需一個(gè)按鍵,8位數(shù)碼管顯示,以及DS18B20溫度傳感器。顯示電路: 顯示電路采用8位共陰LED數(shù)碼管,從P4口輸出段碼。圖一總體設(shè)計(jì)框圖溫度傳感器: DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元

6、件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)912位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下: 獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信; 多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能; 無(wú)須外部器件; 可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.05.5; 零待機(jī)功耗; 溫度以9或12位數(shù)字; 用戶可定義報(bào)警設(shè)置; 報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件; 負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; DS18B20內(nèi)部結(jié)構(gòu)框圖如圖2所示。64位ROM的結(jié)構(gòu)開(kāi)始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有4

7、8位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器和,可通過(guò)軟件寫入戶報(bào)警上下限。DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖3所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)和的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖3所示。低5位一直為1,是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試

8、模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來(lái)設(shè)置分辨率。溫度傳感器連接如下圖所示,DQ引腳與單片機(jī)的P5.3相連:系統(tǒng)設(shè)計(jì)接口電路設(shè)計(jì),程序設(shè)計(jì)(程序框圖和程序清單及注釋)其他有關(guān)的理論分析和計(jì)算接口電路設(shè)計(jì): 主控制器MSP430 溫度傳感器保持按鍵數(shù)碼管電路程序框圖:總體設(shè)計(jì)流程圖讀取溫度傳感器數(shù)據(jù)流程圖數(shù)碼管溫度顯示程序設(shè)計(jì):/*定義引腳*#define LED8PORT P2OUT /P2接8個(gè)LED燈#define LED8SEL P2SEL /P2接8個(gè)LED燈#define LED8DIR P2DIR /P2接8個(gè)LED燈#defi

9、ne DATAPORTP4OUT /數(shù)據(jù)口所在端口P4#define DATASEL P4SEL /數(shù)據(jù)口功能寄存器,控制功能模式#define DATADIR P4DIR /數(shù)據(jù)口方向寄存器#define CTRPORT P6OUT /控制線所在的端口P6#define CTRSEL P6SEL /控制口功能寄存器,控制功能模式#define CTRDIR P6DIR /控制口方向寄存器#define DCTR0 P6OUT &= BIT4 /數(shù)碼管段控制位信號(hào)置低#define DCTR1 P6OUT |= BIT4 /數(shù)碼管段控制位信號(hào)置高#define WCTR0 P6OUT &= B

10、IT3 /數(shù)碼管位控制位信號(hào)置低#define WCTR1 P6OUT |= BIT3 /數(shù)碼管位控制位信號(hào)置高#define KEYPORT P1OUT /按鍵所在的端口P1#define KEYSEL P1SEL /控制口功能寄存器,控制功能模式#define KEYDIR P1DIR /控制口方向寄存器#define KEYIN P1IN /鍵盤掃描判斷需要讀取IO口狀態(tài)值uchar key=0xFF; /鍵值變量uint temp_value;float truetemp;uint temp,A1,A2,A3; /定義的變量,顯示數(shù)據(jù)處理/*共陰數(shù)碼管顯示的斷碼表*uchar tabl

11、e=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ *系統(tǒng)時(shí)鐘初始化*void Clock_Init() uchar i; BCSCTL1&=XT2OFF; /打開(kāi)XT2振蕩器 BCSCTL2|=SELM1+SELS; /MCLK為8MHZ,SMCLK為8MHZ do IFG1&=OFIFG; /清楚振蕩器錯(cuò)誤標(biāo)志 for(i=0;i100;i+) _NOP(); while(IFG1&OFIFG)!=0); /如果標(biāo)志位1,則繼續(xù)循環(huán)等待 IFG1&=OFIFG; /*MSP

12、430內(nèi)部看門狗初始化*void WDT_Init() WDTCTL = WDTPW + WDTHOLD; /關(guān)閉看門狗/*MSP430IO口初始化*void Port_Init() LED8SEL = 0x00; /設(shè)置IO口為普通I/O模式,此句可省 LED8DIR = 0xFF; /設(shè)置IO口方向?yàn)檩敵?LED8PORT = 0xFF; /P2口初始設(shè)置為FF DATASEL = 0x00; /設(shè)置IO口為普通I/O模式,此句可省 DATADIR = 0xFF; /設(shè)置IO口方向?yàn)檩敵?DATAPORT = 0xFF; /P4口初始設(shè)置為FF CTRSEL = 0x00; /設(shè)置IO口為

13、普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4 +BIT2; /設(shè)置IO口方向?yàn)檩敵?控制口在P63,P64 CTRPORT = 0xFF; /P6口初始設(shè)置為FF KEYSEL = 0x00; /設(shè)置IO口為普通I/O模式,此句可省 KEYDIR = 0x0F; /高四位輸入模式,低四位輸出模式,外部上拉電阻 KEYPORT= 0xF0; /初始值0xF0/*74HC573控制數(shù)碼管動(dòng)態(tài)掃描鍵值顯示函數(shù)*void Display_Key(uchar num) uchar i,j; j=0x01; /此數(shù)據(jù)用來(lái)控制位選 for(i=0;i8;i+) /8個(gè)數(shù)碼管依次顯示

14、DCTR1; /控制數(shù)碼管段數(shù)據(jù)的74HC573的LE管腳置高 WCTR1; /控制數(shù)碼管位的74HC573的LE管腳置高 DATAPORT=j; /設(shè)置要顯示的位,也就是哪一個(gè)數(shù)碼管亮 WCTR0; /鎖存位數(shù)據(jù),下面送上段數(shù)據(jù)以后,就顯示出來(lái)了 DATAPORT=tablenum; /送要顯示的數(shù)據(jù),這里是鍵值 DCTR0; /鎖存段數(shù)據(jù),數(shù)碼管亮一個(gè)時(shí)間片刻 j=j1; /移位,準(zhǔn)備進(jìn)行下一位的顯示 delay_us(500); /顯示一個(gè)時(shí)間片刻,會(huì)影響亮度和閃爍性 Close_LED(); /顯示完8個(gè)數(shù)碼管后關(guān)閉數(shù)碼管顯示,否則可能導(dǎo)致各個(gè)數(shù)碼管亮度不一致/*鍵盤掃描子程序,采用逐

15、鍵掃描的方式*uchar Key_Scan(void) uchar key_check; uchar key_checkin; key_checkin=KEYIN; /讀取IO口狀態(tài),判斷是否有鍵按下 key_checkin&= 0xF0; /屏蔽掉低四位的不確定值 if(key_checkin!=0xF0) /IO口值發(fā)生變化則表示有鍵按下 delay_ms(20); /鍵盤消抖,延時(shí)20MS key_checkin=KEYIN; /再次讀取IO口狀態(tài) if(key_checkin!=0xF0) /確定是否真正的有鍵按下 key_check=KEYIN; /有鍵按下,讀取端口值 switch

16、 (key_check & 0xF0) /判斷是哪個(gè)鍵按下 case 0xE0:key=1;break; case 0xD0:key=2;break; case 0xB0:key=3;break; case 0x70:key=4;break; else key=0xFF; /無(wú)鍵按下,返回FF return key;/*74HC573控制數(shù)碼管動(dòng)態(tài)掃描顯示函數(shù),顯示采集到的溫度*void Display_DS18B20(uint data_b,uint data_s,uint data_g) uchar i,j; j=0x01; /此數(shù)據(jù)用來(lái)控制位選 for(i=0;i3;i+) /用后3位數(shù)

17、碼管來(lái)顯示 DCTR1; WCTR1; DATAPORT=j; WCTR0; j=(j1); DATAPORT=0x00; /前5位都不顯示,送數(shù)據(jù)00即可 DCTR0; delay_ms(2); DCTR1; /開(kāi)始顯示第6位,即十位 WCTR1; DATAPORT=j; WCTR0; j=(j1); /DATAPORT=tableA1; DATAPORT=tabledata_b; DCTR0; delay_ms(1); DCTR1; /開(kāi)始顯示個(gè)位 WCTR1; DATAPORT=j; WCTR0; j=(j1); /DATAPORT=tableA2|0x80; /顯示小數(shù)點(diǎn) DATAPO

18、RT=tabledata_s|0x80; /顯示小數(shù)點(diǎn) DCTR0; delay_ms(1); DCTR1; /開(kāi)始顯示小數(shù)點(diǎn)后面的數(shù)據(jù) WCTR1; DATAPORT=j; WCTR0; j=(j1); /DATAPORT=tableA3; DATAPORT=tabledata_g; DCTR0; delay_ms(1); DCTR1; /開(kāi)始顯示溫度單位 WCTR1; DATAPORT=j; WCTR0; j=(j1); /DATAPORT=tableA3; DATAPORT=0x63; DCTR0; delay_ms(1); DCTR1; /開(kāi)始顯示溫度單位 WCTR1; DATAPOR

19、T=j; WCTR0; j=(j480uS) if (i) return 0x00; else return 0x01; /*DS18B20讀一個(gè)字節(jié)函數(shù)* unsigned char ds1820_read_byte(void) unsigned char i; unsigned char value = 0; for (i = 8; i != 0; i-) value = 1; DQ_OUT; DQ_CLR; delay_us(4); /*延時(shí)4uS DQ_SET; DQ_IN; delay_us(10); /*延時(shí)10uS if (DQ_R) value|=0x80; delay_us(

20、60); /*延時(shí)60uS return(value);/*向18B20寫一個(gè)字節(jié)函數(shù)*/*DS18B20字節(jié)寫入函數(shù)*/void ds1820_write_byte(unsigned char value) unsigned char i; for (i = 8; i != 0; i-) DQ_OUT; DQ_CLR; delay_us(4); /延時(shí)4uS if (value & 0x01) DQ_SET; delay_us(80); /延時(shí)80uS DQ_SET; /位結(jié)束 value = 1; /*發(fā)送溫度轉(zhuǎn)換命令*/*啟動(dòng)ds1820轉(zhuǎn)換*/void ds1820_start(voi

21、d) DS18B20_Reset(); ds1820_write_byte(0xCC); /勿略地址 ds1820_write_byte(0x44); /啟動(dòng)轉(zhuǎn)換/*DS8B20讀取溫度信息*unsigned int ds1820_read_temp(void) unsigned int i; unsigned char buf9; DS18B20_Reset(); ds1820_write_byte(0xCC); /勿略地址 ds1820_write_byte(0xBE); /讀取溫度 for (i = 0; i 9; i+) bufi = ds1820_read_byte(); i = b

22、uf1; i = 8; i |= buf0; temp_value=i; temp_value=(uint)(temp_value*0.625); /不是乘以0.0625的原因是為了把小數(shù)點(diǎn)后一位數(shù)據(jù)也轉(zhuǎn)化為可以顯示的數(shù)據(jù) /比如溫度本身為27.5度,為了在后續(xù)的數(shù)據(jù)處理程序中得到BCD碼,我們先放大到275 /然后在顯示的時(shí)候確定小數(shù)點(diǎn)的位置即可,就能顯示出27.5度了 return i;/*溫度數(shù)據(jù)處理函數(shù)*void data_do(uint temp_d) A3=temp_d%10; /分出百,十,和個(gè)位 temp_d/=10; A2=temp_d%10; A1=temp_d/10;/*

23、處理溫度數(shù)據(jù)*void handletemp() ds1820_start(); /啟動(dòng)一次轉(zhuǎn)換 ds1820_read_temp(); /讀取溫度數(shù)值 data_do(temp_value); /處理數(shù)據(jù),得到要顯示的值 truetemp=0.1*temp_value; /judgeAlarm(); /判斷是否觸發(fā)警報(bào)/已將其添加至按鍵程序/*顯示溫度*void showtemp() uchar j; for(j=0;j100;j+) Display_DS18B20(A1,A2,A3); /顯示溫度值 /delay_ms(100); /延時(shí)100ms/*主程序*void main(void)

24、 uchar flag1,flag2,flag3,flag4; /uint key_store=0x00; /沒(méi)有按鍵按下時(shí),默認(rèn)顯示1 WDT_Init(); /看門狗初始化 Clock_Init(); /時(shí)鐘初始化 Port_Init(); /端口初始化,用于控制IO口輸入或輸出 /Close_LED(); DS18B20_Reset(); /復(fù)位D18B20 delay_ms(100); /延時(shí)100ms while(1) Key_Scan(); /鍵盤掃描,看是否有按鍵按下 if(key!=0xff) /如果有按鍵按下,則顯示該按鍵鍵值14 switch(key) case 1: LED8PORT=0xfc;flag1=1;flag2=0;flag3=0;flag4=0;break;/對(duì)溫度數(shù)據(jù)處理判斷警報(bào),然后顯示,handletemp();showtemp(); case 2: LED8PORT=0xf3;flag1=0;flag2=1;flag3=0;flag4=0;break;/溫度數(shù)據(jù)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論