當前位置:首頁 » 編程軟體 » 單片機編譯溫度檢測系統

單片機編譯溫度檢測系統

發布時間: 2022-05-23 23:29:03

Ⅰ 單片機溫度採集系統的流程圖總編程~~~

sbit DQ=P3^5; //數據傳輸線接單片機的相應的引腳
unsigned char tempL=0; //設全局變數
unsigned char tempH=0;
bit fg=1; //溫度正負標志

//******************延時子程序 *******************************

//這個延時程序的具體延時時間是time="i"*8+10,適用於小於2ms的延時

//************************************************************
void delay(unsigned char i)
{
for(i;i>0;i--);
}

//***********************************************************

// 延時子程序

//************************************************************
/*void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延時124*8+10=1002us
} */

//*****************************初始化程序 *********************************//

Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
delay(8); //稍延時
DQ=0; //發送復位脈沖
delay(80); //延時(>480us)
DQ=1; //拉高數據線
delay(5); //等待(15~60us)
x=DQ; //用X的值來判斷初始化有沒有成功,18B20存在的話X="0",否則X="1"
delay(20);
}

//**********讀一個位元組************//

ReadOneChar(void) //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
{
unsigned char i=0; //每個讀周期最短的持續時間為60us,各個讀周期之間必須有1us以上的高電平恢復期
unsigned char dat=0;
for (i=8;i>0;i--) //一個位元組有8位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}

//*********************** **寫一個位元組**************************//

WriteOneChar(unsigned char dat)
{
unsigned char i=0; //數據線從高電平拉至低電平,產生寫起始信號。15us之內將所需寫的位送到數據線上,
for(i=8;i>0;i--) //在15~60us之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。
{
DQ=0; //在開始另一個寫周期前必須有1us以上的高電平恢復期。
DQ=dat & 0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}

//讀溫度值(低位放tempL;高位放tempH;)
void Tempcor(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0x44); //啟動溫度轉換
}

void ReadTemp(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
tempL=ReadOneChar(); //讀出溫度的低位LSB
tempH=ReadOneChar(); //讀出溫度的高位MSB

if(tempH>0x7f) //最高位為1時溫度是負
{
tempL=~tempL+1; //補碼轉換,取反加一
tempH=~tempH;
fg=0; //讀取溫度為負時fg="0"
}

}
/*ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delay(200); //轉換需要一點時間,延時
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
tempL=ReadOneChar(); //讀出溫度的低位LSB
tempH=ReadOneChar(); //讀出溫度的高位MSB

if(tempH>0x7f) //最高位為1時溫度是負
{
tempL=~tempL+1; //補碼轉換,取反加一
tempH=~tempH;
fg=0; //讀取溫度為負時fg="0"
}
} */

//**************************** //主程序

/*float Temperature()
{
float tvalue;
ReadTemperature();
tvalue=tempL/16+tempH*16+(tempL & 0x0f)*0.0625;
if(!fg) tvalue=-tvalue;
fg=1;
return(tvalue);
} */

float Temperature()
{
float temp;
ReadTemp();
temp=tempL/16+tempH*16+(tempL & 0x0f)*0.0625;
if(fg)
{
return(temp);
}
else
{
fg=1;
return(-temp);
}

}

DS18B20溫度採集,通過調用Temperature()函數可得到溫度數據。

Ⅱ 基於單片機的溫度控制系統的設計

利用溫度感測器DS18B20檢測環境溫度並直接輸出數字溫度信號給單片機AT89C52進行處理。

在LCD液晶上顯示當前環境溫度值、預設溫度值、使用者設定的溫度差以及目前風扇所處的檔位。其中預設溫度值只能為整數形式,檢測到的當前環境溫度可精確到小數點後一位。

同時採用PWM脈寬調制方式來改變直流風扇電機的轉速。

並通過兩個按鍵改變預設溫度值,一個提高預設溫度,另一個降低預設溫度值。通過另一個按鍵控制溫度差的大小。

設有紅外熱釋感測器檢測環境范圍內是否有人,如果有人確定出風方向,如果無人,降低轉速或一定時間內自動關閉。

回答

正如你所說的,一共用了DS18B20模塊,LCD模塊,紅外感測模塊,按鍵,直流電機模塊,程序方面只有一個PWM。現在一一為你分析:

DS18B20模塊:

下圖是它的原理圖,採用單匯流排來進行開發,不像電賽的哪個溫度感測器需要AD轉換,它是可以直接傳出數字信號的。

Ⅲ 求助編一個51單片機自動溫度檢測報警系統的程序

;********************************************************************
;DS18B20溫度計 *
;採用4位LED共陽顯示器顯示測溫值,顯示精度0.1℃,測溫范圍-55~+125*
;用AT89C2051單片機,12MHZ晶振 *
;********************************************************************
;***************常數定義********************
TIMEL EQU 0E0H ;20ms,定時器0時間常數
TIMEH EQU 0B1H
TEMPHEAD EQU 36H
;********************工作內存定義**********************
BITST DATA 20H
TIME1S0K BIT BITST.1
TEMPONEOK BIT BITST.2
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 28H
TEMPLC DATA 29H
SCANLED DATA 2AH
;*****************引腳定義*****************************
TEMPDIN BIT P3.7
;*****************中斷向量區***************************
ORG 0000H
LJMP START
ORG 000BH
LJMP T01T
;***************系統初始化****************************
ORG 0030H
START: MOV SP,#60H
CLSMEM: MOV R0,#20H
MOV R1,#60H
CLSMEM1: MOV @R0,#00H
INC R0
DJNZ R1,CLSMEM1
MOV TMOD,#00100001B ;定時器0工作方式1(16位)
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000) ;5ms
SJMP INIT
ERROR: NOP
LJMP START
NOP
INIT: NOP
SETB ET0
SETB TR0
SETB EA
MOV PSW,#00H
CLR TEMPONEOK
MOV 50H,#10
MOV 51H,#10
MOV 52H,#10
MOV 53H,#10
LJMP MAIN
;*******************************************************************
;定時器0中斷服務程序
;*******************************************************************
T01T: CLR TR0
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000) ;5ms
SETB TR0
LEDDIS:
MOV DPTR,#TAB
MOV R1,#50H
MOV A,SCANLED
ADD A,R1
MOV R1,A
MOV A,SCANLED
JNZ LEDDIS1
MOV P3,#08H
SJMP LEDDIS4
LEDDIS1:
DEC A
JNZ LEDDIS2
MOV P3,#04H
SJMP LEDDIS4
LEDDIS2:
DEC A
JNZ LEDDIS3
MOV P3,#02H
SJMP LEDDIS4
LEDDIS3:
MOV P3,#01H
LEDDIS4:
MOV A,@R1
MOVC A,@A+DPTR
MOV P1,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T0CNT
MOV SCANLED,#0
T0CNT:
INC R7
CJNE R7,#200,T0IT1
MOV R7,#00H
SETB TIME1S0K ;1s定時到標志
T0IT1: RETI
;********************************************************************
; 主程序
;********************************************************************
MAIN:
JNB TIME1S0K,MAIN
CLR TIME1S0K ;測溫每1s一次
LCALL READTEMP ;讀出溫度值子程序
LCALL CONVTEMP ;溫度BCD碼計算處理子程序
LCALL DISPBCD ;顯示區BCD碼溫度值刷新子程序
LJMP MAIN
;********************************************************************
; 子程序區
;********************************************************************
;***************復位DS18B20*****************************************
INITDS1820: SETB TEMPDIN
NOP
CLR TEMPDIN
MOV R6,#251 ;延時>480μs
DJNZ R6,$
SETB TEMPDIN
MOV R6,#37 ;
LOOP1820: MOV C,TEMPDIN
JC INITDS1820OUT
DJNZ R6,LOOP1820
SJMP INITDS1820
RET
INITDS1820OUT:
MOV R6,#06BH ;延時200μs
DJNZ R6,$
SETB TEMPDIN
RET
;*******讀DS18B20的程序,從DS18B20中讀出1位元組的數據*****
READDS1820: MOV R7,#08H
READDS1820LOOP: CLR TEMPDIN
NOP
NOP
SETB TEMPDIN
MOV R6,#07 ;延時15μs
DJNZ R6,$
MOV C,TEMPDIN
RRC A
MOV R6,#25
DJNZ R6,$
DJNZ R7,READDS1820LOOP
RET
;******寫DS18B20的程序,從DS18B20中寫1位元組數據*****
WRITEDS1820: MOV R7,#08H
WRITEDS1820LOP: CLR TEMPDIN
MOV R6,#07H ;延時15μs
DJNZ R6,$
RRC A
MOV TEMPDIN,C
MOV R6,#30 ;延時104μs
DJNZ R6,$
SETB TEMPDIN
NOP
DJNZ R7,WRITEDS1820LOP
SETB TEMPDIN
RET
;******************讀TEMP******************88
READTEMP: LCALL INITDS1820
MOV A,#0CCH
LCALL WRITEDS1820 ;Skip ROM
MOV A, #44H
LCALL WRITEDS1820 ;開始轉換
MOV R6,#250 ;延時
DJNZ R6,$
READTEMP1: LCALL INITDS1820
MOV A,#0CCH
LCALL WRITEDS1820 ;Skip ROM
MOV A,#0BEH
LCALL WRITEDS1820 ;中間結果寄存器
MOV R6,#34H ;延時104μs
DJNZ R6,$
READTEMP2: LCALL READDS1820
MOV TEMPL,A
LCALL READDS1820
MOV TEMPH,A
READTEMPOUT: RET
;**************處理溫度BCD碼子程序***********
CONVTEMP: MOV A,TEMPH
ANL A,#80H
JZ TEMPC1
CLR C
MOV A,TEMPL
CPL A
ADD A,#01H
MOV TEMPL,A
MOV A,TEMPH ;"-"
CPL A
ADDC A,#00H
MOV TEMPH,A ;TEMPHC HI=符號位
MOV TEMPHC,#0BH
SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH ;"+"
TEMPC11:
MOV R6,#4H
TEMPC12:
MOV A,TEMPH
RRC A
MOV TEMPH,A
MOV A,TEMPL
RRC A
MOV TEMPL,A
DJNZ R6,TEMPC12
RET
;*****************小數部分碼表*********
TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB 06H,07H,08H,08H,09H,09H
;************顯示區BCD碼溫度值刷新子程序********
DISPBCD: MOV 53H,TEMPHC
MOV A,TEMPL
MOV B,#10
DIV AB
MOV 50H,B
MOV B,#10
DIV AB
MOV 51H,B
JZ DISPBCD2
MOV 52H,A
RET
DISPBCD2: MOV 52H,#10
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;共陽段碼表 "0","1","2","3","4","5","6","7","8","9","不亮","-"
END

Ⅳ 基於單片機的溫度監測系統設計的總體大概的講一下測溫和無線傳輸顯示的過程

感測器DS18B20具有體積更小、精度更高、適用電壓更寬、採用一線匯流排、可組網等優點,在實際應用中取得了良好的測溫效果[7]。
美國Dallas半導體公司的數字化溫度感測器DS1820是世界上第一片支持 「一線匯流排」介面的溫度感測器,在其內部使用了在板(ON-B0ARD)專利技術。全部感測元件及轉換電路集成在形如一隻三極體的集成電路內。「一線匯流排」獨特而且經濟的特點,使用戶可輕松地組建感測器網路,為測量系統的構建引入全新概念。現在,新一代的DS18B20體積更小、更經濟、更靈活。使你可以充分發揮「一線匯流排」的優點。 同DS1820一樣,DS18B20也支持「一線匯流排」介面,測量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內,精度為±0.5°C。現場溫度直接以「一線匯流排」的數字方式傳輸,大大提高了系統的抗干擾性。適合於惡劣環境的現場溫度測量,如:環境控制、設備或過程式控制制、測溫類消費電子產品等。與前一代產品不同,新的產品支持3V~5.5V的電壓范圍,使系統設計更靈活、方便。而且新一代產品更便宜,體積更小[8]。
1. DS18B20的特性 [9]
(1)適應電壓范圍更寬,電壓范圍:3.0~5.5V,寄生電源方式下可由數據線供。
(2)獨特的單線介面方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。
(3)DS18B20支持多點組網功能,多個DS18B20可以並聯在唯一的三線上,實現組網多點測溫。
(4)DS18B20在使用中不需要任何外圍元件,全部感測元件及轉換電路集成在形如一隻三極體的集成電路內。
(5)溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃。
(6)可編程的解析度為9~12位,對應的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現高精度測溫。
(7)在9位解析度時最多在93.75ms內把溫度轉換為數字,12位解析度時最多在750ms內把溫度值轉換為數字,速度更快。
(8)測量結果直接輸出數字溫度信號,以「一線匯流排」串列傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力。
(9)負壓特性:電源極性接反時,晶元不會因發熱而燒毀,但不能正常工作。
2.DS18B20內部結構及DS18B20的管腳排列
64位光刻ROM是出廠前被光刻好的,它可以看作是該DS18B20的地址序列號。不同的器件地址序列號不同。DS18B20內部結構主要由四部分組成:64位光刻ROM,溫度感測器,非揮發的溫度報警觸發器TH和TL,高速暫存器。
DS18B20的引腳定義:
(1)DQ為數字信號輸入/輸出端
(2)GND為電源地
(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)
另外,站長團上有產品團購,便宜有保證

Ⅳ 基於單片機的溫度控制系統

加熱部件可以在淘寶上買個
usb
5v
加熱片,usb供電的電流不會超過
500ma,
控制可以用單片機腳控制一個
c8050三極體控制加熱片的通斷電。

Ⅵ 基於單片機的溫度數據採集系統設計

單片機課程設計任務書

題目:基於單片機的溫度數據採集系統設計
一.設計要求
1.被測量溫度范圍:0~500℃,溫度解析度為0.5℃。
2.被測溫度點:4個,每2秒測量一次。
3.顯示器要求:通道號1位,溫度4位(精度到小數點後一位)。
顯示方式為定點顯示和輪流顯示。
4.鍵盤要求:
(1)定點顯示設定;(2)輪流顯示設定;(3)其他功能鍵。
二.設計內容
1.單片機及電源管理模塊設計。
單片機可選用AT89S51及其兼容系列,電源管理模塊要實
現高精密穩壓輸出,為單片機及A/D轉換器供電。
2.感測器及放大器設計。
感測器可以選用鎳鉻—鎳硅熱電偶(分度號K),放大器要實現熱電偶輸出的mV級信號到A/D輸入V級信號放大。
3.多路轉換開關及A/D轉換器設計。
多路開關可以選用CD4052,A/D可選用MC14433等。
4.顯示器設計。
可以選用LED顯示或LCD顯示。
5.鍵盤電路設計。
實現定點顯示按鍵;輪流顯示按鍵;其他功能鍵。
6.系統軟體設計。
系統初始化模塊,鍵盤掃描模塊,顯示模塊,數據採集模塊,標度變換模塊等。

引言:
在生產和日常生活中,溫度的測量及控制十分重要,實時溫度檢測系統在各個方面應用十分廣泛。消防電氣的非破壞性溫度檢測,大型電力、通訊設備過熱故障預知檢測,各類機械組件的過熱預警,醫療相關設備的溫度測試等等都離不開溫度數據採集控制系統。
隨著科學技術的發展,電子學技術也隨之迅猛發展,同時帶動了大批相關產業的發展,其應用范圍也越來越廣泛。近年來單片機發展也同樣十分迅速,單片機已經滲透到工業、農業、國防等各個領域,單片機以其體積小,可靠性高,造價低,開發周期短的特點被廣泛推廣與應用。傳統的溫度採集不僅耗時而且精度低,遠不能滿足各行業對溫度數據高精度,高可靠性的要求。溫度的控制及測量對保證產品質量、提高生產效率、節約能源、生產安全、促進國民經濟的發展起到重要作用。在單片機溫度測量系統中關鍵是測量溫度,控制溫度和保持溫度。溫度測量是工業對象的主要被控參數之一。本此題目的總體功能就是利用單片機和熱敏原件實現溫度的採集與讀數,利用五位LED顯示溫度讀數和所選通道號,實現熱電轉化,實現溫度的精確測量。本設計是以Atmel公司的AT89S51單片機為控制核心,通過MC14433模數轉換對所測的溫度進行數字量變化,且通過數碼管進行相應的溫度顯示。採用微機進行溫度檢測,數字顯示,信息存儲及實時控制,對於提高生產效率和產品質量、節約能源等都有重要作用。
目錄:
一、系統總體功能及技術指標的描述........................................ 5
二、各模塊電路原理描述............................................................. 5
2.1單片機及電源模塊設計...................................................... 5
2.2、AT89S51引腳說明.......................................................... 7
2.3、數據採集模塊設計........................................................ 11
2.4、多路開關......................................................................... 12
2.5、放大器............................................................................. 15
2.6、A/D轉換器..................................................................... 16
2.7、顯示器設計..................................................................... 21
2.8、鍵盤電路設計................................................................. 22
2.9、電路總體設計圖........................................................... 22
三、軟體流程圖 ...................................................................... 24
四、程序清單.............................................................................. 25
五、設計總結及體會.................................................................... 31
六、參考資料................................................................................ 32

一、系統總體功能及技術指標的描述
1. 系統的總體功能:
溫度數據採集系統,實現溫度的採集與讀書,利用五位LED顯示溫度讀數和所選通道號,實現熱電轉化的原理過程。
被測量溫度范圍:0~500℃,溫度解析度為0.5℃。被測溫度點4個,每2秒測量一次。顯示器要求:通道號1位,溫度4位(精度到小數點後一位)。顯示方式為定點顯示和輪流顯示,可以通過按鍵改變顯示方式。
2. 技術指標要求:
1.被測量溫度范圍:0~500℃,溫度解析度為0.5℃。
2.被測溫度點:4個,每2秒測量一次。
3.顯示器要求:通道號1位,溫度4位(精度到小數點後一位)。
顯示方式為定點顯示和輪流顯示。
4.鍵盤要求:
(1)定點顯示設定;(2)輪流顯示設定;(3)其他功能鍵。
二、各模塊電路原理描述
2.1單片機及電源模塊設計
如圖所示為AT89S51晶元的引腳圖。兼容標准MCS-51指令系統的AT89S51單片機是一個低功耗、高性能CHMOS的單片機,片內含4KB在線可編程Flash存儲器的單片機。它與通用80C51系列單片機的指令系統和引腳兼容。
AT89S51單片機片內的Flash可允許在線重新編程,也可用通用非易失性存儲編程器編程;片內數據存儲器內含128位元組的RAM;有40個引腳,32個外部雙向輸入/輸出(I/O)埠;具有兩個16位可編程定時器;中斷系統是具有6個中斷源、5個中斷矢量、2級中斷優先順序的中斷結構;震盪器頻率0到33MHZ,因此我們在此選用12MHZ的晶振是比較合理的;具有片內看門狗定時器;具有斷電標志POF等等。AT89S51具有PDIP、TQFP和PLCC三種封裝形式[8]。

圖5.1-1 AT89S51引腳圖

上圖就是PDIP封裝的引腳排列,下面介紹各引腳的功能。
2.2、AT89S51引腳說明
P0口:8位、開漏級、雙向I/O口。P0口可作為通用I/O口,但須外接上拉電阻;作為輸出口,每各引腳可吸收8各TTL的灌電流。作為輸入時,首先應將引腳置1。P0也可用做訪問外部程序存儲器和數據存儲器時的低8位地址/數據匯流排的復用線。在該模式下,P0口含有內部上拉電阻。在FLASH編程時,P0口接收代碼位元組數據;在編程效驗時,P0口輸出代碼位元組數據(需要外接上拉電阻)。
P1口:8位、雙向I/0口,內部含有上拉電阻。P1口可作普通I/O口。輸出緩沖器可驅動四個TTL負載;用作輸入時,先將引腳置1,由片內上拉電阻將其抬到高電平。P1口的引腳可由外部負載拉到低電平,通過上拉電阻提供電流。在FLASH並行編程和校驗時,P1口可輸入低位元組地址。在串列編程和效驗時,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分別是串列數據輸入、輸出和移位脈沖引腳。
P2口:具有內部上拉電阻的8位雙向I/O口。P2口用做輸出口時,可驅動4各TTL負載;用做輸入口時,先將引腳置1,由內部上拉電阻將其提高到高電平。若負載為低電平,則通過內部上拉電阻向外部輸出電流。CPU訪問外部16位地址的存儲器時,P2口提供高8位地址。當CPU用8位地址定址外部存儲時,P2口為P2特殊功能寄存器的內容。在FLASH並行編程和校驗時,P2口可輸入高位元組地址和某些控制信號。
P3口:具有內部上拉電阻的8位雙向口。P3口用做輸出口時,輸出緩沖器可吸收4各TTL的灌電流;用做輸入口時,首先將引腳置1,由內部上拉電阻抬位高電平。若外部的負載是低電平,則通過內部上拉電阻向輸出電流。在與FLASH並行編程和校驗時,P3口可輸入某些控制信號。P3口除了通用I/O口功能外,還有替代功能,如表5.3-1所示。

表5.3-1 P3口的替代功能

引腳

符號

說明

P3.0

RXD

串列口輸入

P3.1

TXD

串列口輸出

P3.2

/INT0

外部中斷0

P3.3

/INT1

外部中斷1

P3.4

T0

T0定時器的外部的計數輸入

P3.5

T1

T1定時器的外部的計數輸入

P3.6

/WR

外部數據存儲器的寫選通

P3.7

/RD

外部數據存儲器的讀選通

RST:復位端。當振盪器工作時,此引腳上出現兩個機器周期的高電平將系統復位。
ALE/ :當訪問外部存儲器時,ALE(允許地址鎖存)是一個用於鎖存地址的低8位位元組的書粗脈沖。在Flash 編程期間,此引腳也可用於輸入編程脈沖()。在正常操作情況下,ALE以振盪器頻率的1/6的固定速率發出脈沖,它是用作對外輸出的時鍾,需要注意的是,每當訪問外部數據存儲器時,將跳過一個ALE脈沖。如果希望禁止ALE操作,可通過將特殊功能寄存器中位地址為8EH那位置的「0」來實現。該位置的「1」後。ALE僅在MOVE或MOVC指令期間激活,否則ALE引腳將被略微拉高。若微控制器在外部執行方式,ALE禁止位無效。
:外部程序存儲器讀選取通信號。當AT89S51在讀取外部程序時, 每個機器周期 將PSEN激活兩次。在此期間內,每當訪問外部數據存儲器時,將跳過兩個信號。
/Vpp:訪問外部程序存儲器允許端。為了能夠從外部程序存儲器的0000H至FFFFH單元中取指令,必須接地,然而要注意的是,若對加密位1進行編程,則在復位時,的狀態在內部被鎖存。
執行內部程序應接VCC。不當選擇12V編程電源時,在Flash編程期間,這個引腳可接12V編程電壓。
XTAL1:振盪器反向放大器輸入端和內部時鍾發生器的輸入端。
XTAL2:振盪器反相放大器輸出端[9]。

電源模塊設計
在影響單片機系統可靠性的諸多因素中,電源干擾可謂首屈一指,據統計,計算機應用系統的運行故障有90%以上是由電源雜訊引起的。為了提高系統供電可靠性,交流供電應採用交流穩壓器,防止電源的過壓和欠壓,直流電源抗干擾措施有採用高質量集成穩壓電路單獨供電,採用直流開關電源,採用DC-DC變換器。本次設計決定採用MAXim公司的高電壓低功耗線性變換器MAX 1616作為電壓變換,採用該器件將輸入的24V電壓變換為5V電壓,給外圍5V的器件供電。MAX1616具有如下特點:
1.4~28V電壓輸入范圍。
2.最大80uA的靜態工作電流。
3.3V/5V電壓可選輸出。
4.30mA輸出電流。
5.2%的電壓輸出精度。
電源管理模塊電路圖如下:

本電路採用該器件將輸入的24V電壓變成5V電壓,給外圍5V的器件供電,其中二極體D1是保護二極體,防止輸入電壓接反可能帶來的對電路的影響和破壞。

Ⅶ 用單片機做溫度檢測系統 論文,

用DS18B20做的電子溫度計,非常簡單。

#include <reg51.h>
#include\"AscLed.h\"
#include <intrins.h>
#include <stdio.h>
//********************************************************
#define Seck (500/TK) //1秒中的主程序的系數
#define OffLed (Seck*5*60) //自動關機的時間5分鍾!
//********************************************************
#if (FHz==0)
#define NOP_2uS_nop_()
#else
#define NOP_2uS_nop_();_nop_()
#endif
//**************************************
#define SkipK 0xcc //跳過命令
#define ConvertK 0x44 //轉化命令
#define RdDs18b20K 0xbe //讀溫度命令
//*******************************************
extern LedOut(void);
//*************************************************
sbit PNP1=P3^4;
sbit PNP2=P3^5;
sbit BEEP=P3^2;
//***********************************
#defineDQ PNP2 //原來的PNP2 BEEP
//***********************************
static unsigned char Power=0;
//************************************
union{
unsigned char Temp[2]; //單位元組溫度
unsigned int Tt; //2位元組溫度
}T;
//***********************************************
typedef struct{
unsigned char Flag; //正數標志 0;1==》負數
unsigned char WenDu; //溫度整數
unsigned int WenDuDot; //溫度小數放大了10000

}WENDU;
//***********************************************
WENDU WenDu;
unsigned char LedBuf[3];
//----------------------------------
//功能:10us 級別延時
// n=1===> 6Mhz=14uS 12MHz=7uS
//----------------------------------
void Delay10us(unsigned char n){

do{
#if (FHz==1)
NOP_2uS;NOP_2uS;
#endif
}while(--n);
}
//-----------------------------------
//功能:寫18B20
//-----------------------------------
void Write_18B20(unsigned char n){
unsigned char i;
for(i=0;i<8;i++){
DQ=0;
Delay10us(1);//延時13us 左右
DQ=n & 0x01;
n=n>>1;
Delay10us(5);//延時50us 以上
DQ=1;
}
}
//------------------------------------
//功能:讀取18B20
//------------------------------------
unsigned char Read_18B20(void){
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++){
temp=temp>>1;
DQ=0;
NOP_2uS;//延時1us
DQ=1;
NOP_2uS;NOP_2uS;//延時5us
if(DQ==0){
temp=temp&0x7F;
}else{
temp=temp|0x80;
}
Delay10us(5);//延時40us
DQ=1;
}
return temp;
}
//-----------------------------------
void Init (void){
DQ=0;
Delay10us(45);//延時500us
DQ=1;
Delay10us(9);//延時90us
if(DQ){ //0001 1111b=1f
Power =0; //失敗0
}else{
Power++;
DQ=1;
}
}
//----------------------------------
void Skip(void){
Write_18B20(SkipK);
Power++;
}
//----------------------------------
void Convert (void){
Write_18B20(ConvertK);
Power++;
}
//______________________________________
void Get_Ds18b20L (void){
T.Temp[1]=Read_18B20(); //讀低位
Power++;
}
//______________________________________
void Get_Ds18b20H (void){
T.Temp[0]=Read_18B20(); //讀高位
Power++;
}
//------------------------------------
//規范化成浮點數
// sssss111;11110000
// sssss111;1111(0.5,0.25,0.125,0.0625)
//------------------------------------
void ReadTemp (void){
unsigned char i;
unsigned intF1=0;
char j=1;
code int Code_F[]={6250,1250,2500,5000};

WenDu.Flag=0;

if (T.Temp[0] >0x80){ //負溫度
T.Tt =~T.Tt+1; //取反+1=源嗎 +符號S
WenDu.Flag=-1;
}
T.Tt <<= 4; //左移4位
WenDu.WenDu=T.Temp[0]; // 溫度整數
//**************************************************
T.Temp[1]>>=4;
//---------------------------
for (i=0;i<4;i++){ //計算小數位
F1 +=(T.Temp[1] & 0x01)*Code_F;
T.Temp[1]>>=1;
}
WenDu.WenDuDot=F1; //溫度的小數
Power=0;
}
//----------------------------------
void Delay1S (void){
static unsigned int i=0;

if (++i==Seck) {i=0ower++;}
}
//----------------------------------
void ReadDo (void){
Write_18B20(RdDs18b20K);
Power++;
}
/**********************************
函數指針定義
***********************************/
code void (code *SubTemp[])()={
Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L,
Get_Ds18b20H,ReadTemp
};
//**************************************
void GetTemp(void){
(*SubTemp[Power])();
}
//---------------------------------------------------
//將溫度顯示,小數點放大了10000.
void GetBcd(void){
LedBuf[0]=WenDu.WenDu / 10;
LedBuf[1]=WenDu.WenDu % 10 +DotK;
LedBuf[2]=(WenDu.WenDuDot/1000)%10;

if(LedBuf[0]==0)LedBuf[0]=Black;

if(WenDu.Flag==0) return;
if(LedBuf[0] !=Black){
LedBuf[2]=LedBuf[1];
LedBuf[1]=LedBuf[0];
LedBuf[0]=Led_Pol; //'-'
}else{
LedBuf[0]=Led_Pol; //'-'
}
}
/*
//---------------------------------------------------
void JbDelay (void){
static long i;
if (++i>=OffLed){
P1=0xff;
P2=0xff;
PCON=0x02;
}
}
*/
/*****************************************************
主程序開始
1:2002_10_1 設計,採用DS18B20測量
2:採用函數數組讀取DS18B20.LED數碼管顯示正常!
3:改變FHz可以用6,12MHz工作!
******************************************************/
code unsigned char Stop[3] _at_ 0x3b;
void main (void){
P1=0xff;
WenDu.WenDu=0;
while (1){
GetTemp();
GetBcd();
// JbDelay();
LedOut();
}
}
復制代碼
20091012_[1].jpg (12 KB)

2009-10-21 23:21 上傳
下載次數:0

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:705
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:968
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:676
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:828
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:737
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1076
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:308
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:188
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:875
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:829