㈠ 基於單片機的溫濕度檢測系統設計
<<pic單片機復應用系統開發典型實例〉制〉有差不多的例子,不過 是數碼顯示,不是液晶顯示。液晶程序上網上找就行啊,www.pic16.com上有很多程序,或許有現成的。
㈡ 溫度採集與顯示
/********************************************************
* DS18B20溫度感測器 *
* C51 *
* yajou 2008-06-28 無CRC *
********************************************************/
#include "reg51.h"
#include "intrins.h"
#include "DS18B20.h"
/********************************************************
* us延時程序 *
********************************************************/
void Delayus(uchar us)
{
while(us--); //12M,一次6us,加進入退出14us(8M晶振,一次9us)
}
/********************************************************
* DS18B20初始化 *
********************************************************/
bit Ds18b20_Init(void) //存在返0,否則返1
{
bit temp = 1;
uchar outtime = ReDetectTime; //超時時間
while(outtime-- && temp)
{
Delayus(10); //(250)1514us時間可以減小嗎
ReleaseDQ();
Delay2us();
PullDownDQ();
Delayus(100); //614us(480-960)
ReleaseDQ();
Delayus(10); //73us(>60)
temp = dq;
Delayus(70); //us
}
return temp;
}
/********************************************************
* 寫bit2DS18B20 *
********************************************************/
void Ds18b20_WriteBit(bit bitdata)
{
if(bitdata)
{
PullDownDQ();
Delay2us(); //2us(>1us)
ReleaseDQ(); //(上述1-15)
Delayus(12); //86us(45- x,總時間>60)
}else
{
PullDownDQ();
Delayus(12); //86us(60-120)
}
ReleaseDQ();
Delay2us(); //2us(>1us)
}
/********************************************************
* 寫Byte DS18B20 *
********************************************************/
void Ds18b20_WriteByte(uchar chrdata)
{
uchar ii;
for(ii = 0; ii < 8; ii++)
{
Ds18b20_WriteBit(chrdata & 0x01);
chrdata >>= 1;
}
}
/********************************************************
* 寫 DS18B20 *
********************************************************/
//void Ds18b20_Write(uchar *p_readdata, uchar bytes)
//{
// while(bytes--)
// {
// Ds18b20_WriteByte(*p_readdata);
// p_readdata++;
// }
//}
/********************************************************
* 讀bit From DS18B20 *
********************************************************/
bit Ds18b20_ReadBit(void)
{
bit bitdata;
PullDownDQ();
Delay2us(); //2us( >1us)
ReleaseDQ();
Delay8us(); //8us( <15us)
bitdata = dq;
Delayus(7); //86us(上述總時間要>60us)
return bitdata;
}
/********************************************************
* 讀Byte DS18B20 *
********************************************************/
uchar Ds18b20_ReadByte(void)
{
uchar ii,chardata;
for(ii = 0; ii < 8; ii++)
{
chardata >>= 1;
if(Ds18b20_ReadBit()) chardata |= 0x80;
}
return chardata;
}
/********************************************************
* 讀 DS18B20 ROM *
********************************************************/
bit Ds18b20_ReadRom(uchar *p_readdata) //成功返0,失敗返1
{
uchar ii = 8;
if(Ds18b20_Init()) return 1;
Ds18b20_WriteByte(ReadROM);
while(ii--)
{
*p_readdata = Ds18b20_ReadByte();
p_readdata++;
}
return 0;
}
/********************************************************
* 讀 DS18B20 EE *
********************************************************/
bit Ds18b20_ReadEE(uchar *p_readdata) //成功返0,失敗返1
{
uchar ii = 2;
if(Ds18b20_Init()) return 1;
Ds18b20_WriteByte(SkipROM);
Ds18b20_WriteByte(ReadScr);
while(ii--)
{
*p_readdata = Ds18b20_ReadByte();
p_readdata++;
}
return 0;
}
/********************************************************
* 溫度採集計算 *
********************************************************/
bit TempCal(float *p_wen) //成功返0,失敗返1 (溫度范圍-55 --- +128)
{
uchar temp[9],ii;
uint tmp;
float tmpwen;
TR1 = 0;
TR0 = 0;
//讀暫存器和CRC值-----------------------
if(Ds18b20_ReadEE(temp))
{
TR1 = 1;
TR0 = 1;
return 1;
}
//-------------------------------------
//CRC校驗------------------------------
//
//此處應加入CRC校驗等
//
//
//-------------------------------------
//使溫度值寫入相應的wen[i]數組中-----
for(ii = i; ii > 0; ii--)
{
p_wen++;
}
i++;
if(i > 4) i = 0;
//-------------------------------------
//溫度正負數處理-----------------------
//
//-------------------------------------
//溫度計算-----------------------------
tmp = temp[1]; //
tmp <<= 8; //
tmp |= temp[0]; //組成溫度的兩位元組合並
tmpwen = tmp;
*p_wen = tmpwen / 16;
//-------------------------------------
//開始溫度轉換-------------------------
if(Ds18b20_Init())
{
TR1 = 1;
TR0 = 1;
return 1;
}
Ds18b20_WriteByte(SkipROM);
Ds18b20_WriteByte(Convert);
ReleaseDQ(); //寄生電源時要拉高DQ
//------------------------------------
TR1 = 1;
TR0 = 1;
return 0;
}
//////////DS18B20.h/////////////////////////
/********************************************************
* I/O口定義 *
********************************************************/
sbit dq = P1^3;
sbit dv = P1^4; //DS18B20強上拉電源
/********************************************************
* 命令字定義 *
********************************************************/
#define uchar unsigned char
#define uint unsigned int
#define ReleaseDQ() dq = 1; //上拉/釋放匯流排
#define PullDownDQ() dq = 0; //下拉匯流排
#define Delay2us() _nop_();_nop_(); //延時2us,每nop 1us
#define Delay8us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//設置重復檢測次次數,超出次數則超時
#define ReDetectTime 20
//ds18b20命令
#define SkipROM 0xCC
#define MatchROM 0x55
#define ReadROM 0x33
#define SearchROM 0xF0
#define AlarmSearch 0xEC
#define Convert 0x44
#define WriteScr 0x4E
#define ReadScr 0xBE
#define CopyScr 0x48
#define RecallEE 0xB8
#define ReadPower 0xB4
/********************************************************
* 函數 *
********************************************************/
void Delayus(uchar us);
//void Dog(void);
bit Ds18b20_Init(void); //DS18B20初始化,存在返0,否則返1
void Ds18b20_WriteBit(bit bitdata); //寫bit2DS18B20
void Ds18b20_WriteByte(uchar chrdata); //寫Byte DS18B20
void Ds18b20_Write(uchar *p_readdata, uchar bytes); //寫 DS18B20
bit Ds18b20_ReadBit(void); //讀bit From DS18B20
uchar Ds18b20_ReadByte(void); //讀Byte DS18B20
bit Ds18b20_ReadRom(uchar *p_readdata); //讀 DS18B20 ROM:成功返0,失敗返1
bit Ds18b20_ReadEE(uchar *p_readdata); //讀 DS18B20 EE :成功返0,失敗返1
bit TempCal(float *p_wen); //成功返0,失敗返1 (溫度范圍-55 --- +128)
㈢ 基於單片機的溫度數據採集系統設計
單片機課程設計任務書
題目:基於單片機的溫度數據採集系統設計
一.設計要求
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是保護二極體,防止輸入電壓接反可能帶來的對電路的影響和破壞。
㈣ 51單片機的溫度採集系統設計
第一章 確定系統功能與性能
本系統的功能主要有數據採集、數據處理、輸出控制。能對0~1000 �0�2c范圍內的各種電加熱爐的溫度進行精密測量,同時,四位LED顯示器直接跟蹤顯示被控對象的溫度值,准確度高,顯示清晰,穩定可靠,使用方便(在具體設計編程、調試過程中,為了調試方便,編程把溫度范圍設在0~100 �0�2c)。
本系統的原理框圖如下圖所示。
數據採集部分能完成對被測信號的采樣,顯示解析度0.1�0�2c,測量精度0.1�0�2c,控制精度0.1�0�2c,可以實現採集信號的放大及A/D轉換,並自動進行零漂校正,同時按設定值、所測溫度值、溫度變化速率,自動進行FID參數自整定和運算,並輸出0~10mA控制電流,配以主迴路實現溫度的控制。數據處理分為預處理、功能性處理、抗干擾等子功能。輸出控制部分主要是數碼管顯示控制。
第二章 確定系統基本結構及硬體設計
本單片機應用系統結構是以單片機為核心外部擴展相關電路的形式。確定了系統中的單片機、存儲器分配及輸入/輸出方式就可大體確定出單片機應用系統的基本組成。
1)單片機選用MCS-51系統的8031
8031是INTEL公司MCS-51系列單片機中最基本的產品,它採用INTEL公司可靠的CHMOS工藝技術製造的高性能8位單片機,屬於標準的MCS-51的HCMOS產品。它結合了HMOS的高速和高密度技術及CHMOS的低功耗特徵,標准MCS-51單片機的體系結構和指令系統。
8031內置中央處理單元、128位元組內部數據存儲器RAM、32個雙向輸入/輸出(I/O)口、2個16位定時/計數器和5個兩級中斷結構,一個全雙工串列通信口,片內時鍾振盪電路。但80C31片內並無程序存儲器,需外接ROM。
此外,8031還可工作於低功耗模式,可通過兩種軟體選擇空閑和掉電模式。在空閑模式下凍結CPU而RAM定時器、串列口和中斷系統維持其功能。掉電模式下,保存RAM數據,時鍾振盪停止,同時停止晶元內其它功能。8031有PDIP(40pin)和PLCC(44pin)兩種封裝形式。
主要功能特性:
· 標准MCS-51內核和指令系統
· 外部程序存儲器ROM地址空間64kB
· 32個可編程雙向I/O口
· 128x8bit內部RAM(可擴充64kB外部存儲器)
· 2個16位可編程定時/計數器
· 時鍾頻率3.5-16MHz
· 5個中斷源
· 5.0V工作電壓
· 全雙工串列通信口
· 布爾處理器
· 2層優先順序中斷結構
· 兼容TTL和CMOS邏輯電平
· PDIP(40)和PLCC(44)封裝形式
㈤ 溫度採集電路設計設計並製作一個溫度測量與顯示系統,基本原理:
溫度感測器——LM45/35
放大器——OP07/NE5532/TL082
A/D轉換器——ADC0809
ROM—— AT28C16
解碼電路——CD451
顯示電路——共陽數碼管
要求:( 1)被測溫度范圍 0∼99°C;
工作原理:
溫度感測器——LM45/35產生溫度的模擬信號電壓
放大器——OP07/NE5532/TL082:將代表溫度的模擬電壓放大到適合於ADC轉換的幅度。
A/D轉換器——ADC0809:將放大後的電壓進行轉換,變成適合顯示的數字信號,存入ROM中。
這個信號,可以直接顯示,也可以由單片機進行處理後再進行顯示。
解碼電路——CD451:將ROM保存的或單片機送出的待顯示的數據翻譯成適合於7段顯示數碼管的電平信號,去驅動數碼管實現對測量出來的溫度進行顯示。
㈥ 做一個溫度採集電路的課程設計 幫我理一理思路,謝謝
這個是數電的課程設計,很簡單其實就是adc測一個模擬輸出感測器然後按地址讀取rom值然後顯示,只是rom需要寫入內容
1、直接用lm35比較好,max6675需要前端接熱電偶
2、三個運放都可以,只是一般都要雙電源,接起來煩
3、tm7707精度太高了沒有必要,adc0809就好了