基于msp430溫度數(shù)碼管顯示_第1頁
基于msp430溫度數(shù)碼管顯示_第2頁
基于msp430溫度數(shù)碼管顯示_第3頁
基于msp430溫度數(shù)碼管顯示_第4頁
基于msp430溫度數(shù)碼管顯示_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、/* 程序功能:用 DS18B20 測量室溫并在數(shù)碼管上顯示。 測試說明:觀察顯示溫度數(shù)值。 */ #include #include DS18B20.h #include DS18B20.c #define wei_h P5OUT|= BIT5 #define wei_l P5OUT /數(shù)碼管七段碼; 0-f uchar scandata16 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71; /數(shù)碼管位選變量 uchar cnt = 0; vo

2、id Disp_Numb(uint temper); /* 主函數(shù) */ void main(void) /* 下面六行程序關(guān)閉所有的 IO 口*/ P5DIR = 0 xff; P5OUT = 0 xff;P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; uchar i; WDTCTL=WDTPW+WDTHOLD; /*

3、選擇系統(tǒng)主時鐘為 8MHz*/ / 打開 XT2 高頻晶體振蕩器 BCSCTL1 do IFG1 /清除晶振失敗標(biāo)志 for (i = 0 xFF; i 0; i-); /等待 8MHz 晶體起振 /晶振失效標(biāo)志仍然存在? /MCLK 和 SMCLK 選擇高頻晶振 /關(guān)閉電平轉(zhuǎn)換 /關(guān)閉電平轉(zhuǎn)換 關(guān)閉蜂鳴器 while (IFG1 BCSCTL2 |= SELM_2 + SELS; P6DIR |= BIT6;P6OUT |= BIT6; P5DIR |= BIT5;P5OUT |= BIT5; P6DIR |= BIT7;P6OUT |= BIT7; / / 設(shè)置看門狗定時器,初始化控制數(shù)碼

4、管的 IO WDTCTL = WDT_ADL Y_1_9; IE1 |= WDTIE; / P4DIR = 0 xff; / P5DIR = 0 xFF; / P5OUT = 0 xff; /P4OUT = 0 xff; /P6DIR = 0 xff; /P6OUT = 0 xFF; /計數(shù)時鐘選擇 SMLK=8MHz , 1/8 分頻后為 1MHz TACTL |= TASSEL_2 + ID_3; /打開全局中斷 _EINT(); /循環(huán)讀數(shù)顯示 while(1) Disp_Numb(Do1Convert();/ 不停地轉(zhuǎn)換顯示 /* 函數(shù)名稱: watchdog_timer 功 能:看門

5、狗定時器中斷服務(wù)函數(shù),進行數(shù)碼 管動態(tài)掃描 參 數(shù):無 返回值 :無 */ #pragma vector = WDT_VECTOR _interrupt void watchdog_timer(void) / P4OUT = 0 xFF; / wei_h; / wei_l; P4OUT = scandatadN5-cnt; if(cnt=1) P4OUT |= BIT7;/ 在第二位顯示小數(shù)點 duan_h; duan_l; P4OUT = (1cnt); wei_h; wei_l; cnt+; if(cnt = 6) cnt = 0; /* 函數(shù)名稱: Disp_Numb 功 能:將從 DS

6、18B20 讀取的 11bit 溫度數(shù)據(jù)轉(zhuǎn)換 成數(shù)碼管顯示的溫度數(shù)字 參數(shù): temper-11bit 溫度數(shù)據(jù) 返回值 :無 */ void Disp_Numb(uint temper) uchar i; for(i = 0;i = 10) dN2 -= 10; dN3 += 1; if(temper if(temper if(temper if(temper if(temper if(dN4 = 10) dN4 -= 10; dN5 += 1; if(temper dN5 += 1; if(dN4 = 10) dN4 -= 10; dN5 += 1; if(temper dN5 += 3;

7、 if(dN4 = 10) dN4 -= 10; dN5 += 1; if(temper dN5 += 6; if(dN4 = 10) dN4 -= 10; dN5 += 1; if(dN5 = 10) dN5 -= 10; / /*18b20.C*/ #include typedef unsigned char uchar; typedef unsigned int uint; #define DQ1 P1OUT |= BIT6 #define DQ0 P1OUT / 增計數(shù)到 CCR0 /等待 /停止計數(shù) /清除中斷標(biāo)志 TACTL |= MC_1; while(!(TACTL TACTL

8、 TACTL /* 函數(shù)名稱: Init_18B20 功 能:對 DS18B20 進行復(fù)位操作 參 數(shù):無 返回值 :初始化狀態(tài)標(biāo)志: 1- 失敗, 0-成功 */ uchar Init_18B20(void) uchar Error; DQ_out; /拉高 _DINT(); /關(guān)閉中斷 DQ0; /拉低 DelayNus(500); DQ1; /拉高 DelayNus(55); DQ_in; /方向設(shè)置輸入 _NOP(); if(DQ_val) /輸入值為 1 Error = 1; /初始化失敗 else /輸入值為 0 Error = 0; /初始化成功 DQ_out; /設(shè)為輸出 DQ

9、1; /拉高 _EINT(); /中斷使能 DelayNus(400); return Error; /* 函數(shù)名稱: Write_18B20 功 能:向 DS18B20 寫入一個字節(jié)的數(shù)據(jù) 參數(shù): wdata- 寫入的數(shù)據(jù) 返回值 :無 void Write_18B20(uchar wdata) uchar i; _DINT(); for(i = 0; i = 1; DelayNus(50);/ 延時 50us DQ1; DelayNus(10);/ 延時 10us _EINT(); /* 函數(shù)名稱: Read_18B20 功 能:從 DS18B20 讀取一個字節(jié)的數(shù)據(jù) 返回值 :讀出的一個

10、字節(jié)數(shù)據(jù) */ uchar Read_18B20(void) uchar i; uchar temp = 0; _DINT(); for(i = 0;i = 1; DQ0; DelayNus(6);/ 延時 6us DQ1; DelayNus(8);/ 延時 9us DQ_in; _NOP(); if(DQ_val) temp |= 0 x80; DelayNus(45);/ 延時 45us DQ_out; DQ1; DelayNus(10); / 延時 10us /讀到的一個字節(jié) _EINT(); return temp; /* 函數(shù)名稱: Skip 功 能:發(fā)送跳過讀取產(chǎn)品 ID 號命令

11、參 數(shù):無 返回值 :無 */ void Skip(void) Write_18B20(0 xcc); /* 函數(shù)名稱: Convert 功 能:發(fā)送溫度轉(zhuǎn)換命令 參 數(shù):無 返回值 :無 */ void Convert(void) Write_18B20(0 x44); /* 函數(shù)名稱: Read_SP 功 能:發(fā)送讀 ScratchPad 命令 參 數(shù):無 返回值 :無 */ void Read_SP(void) Write_18B20(0 xbe); /* 函數(shù)名稱: ReadTemp 功 能:從 DS18B20 的 ScratchPad 讀取溫度轉(zhuǎn)換結(jié)果 參 數(shù):無 返回值 :讀取的溫

12、度數(shù)值 uint ReadTemp(void)uchar temp_low; uint temp; temp_low = Read_18B20();/ 讀低位 temp = Read_18B20();/ 讀高位 temp = (temp 0;i-) DelayNus(60000); / 延時 800ms 以上 do /發(fā)送讀 ScratchPad 命令 /讀取的溫度數(shù)值 i = Init_18B20(); while(i); Skip(); Read_SP(); return ReadTemp(); /* / * 18b20.h * void DelayNus(unsigned int n); unsigned char Init_18B20(voi

溫馨提示

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

評論

0/150

提交評論