?? main.c
字號:
/************DS18B20溫度測量程序+ 紅外線解碼程序***********/
/*功能改進:對溫度顯示進行了削隱處理,例如:028.7C顯示為 28.7C
還繼承了上次的改進效果,0度以下或拔下傳感器,顯示00000
10s顯示一次溫度值,減小了處理器的負擔;
*/
/*問題:當傳感器拔下時,最后一位,保留并不消隱*/
/****硬件平臺:中山51單片機開發板,DS18B20單總線溫度傳感器***********/
/****硬件連接:P2_2接DQ(信號線2pin),電源3in,地1pin****************/
/****程序功能:顯示實時溫度,溫度范圍:0-125C,精度:0.1C************/
/****編程流程:初始化--寫指令--讀數據--數據處理--顯示溫度************/
#include <at89x52.h>
#include <DS18B20.h>
#include <display.h>
#include <IR.h>
unsigned int temperature,count;
bit TemperatureSign;
main()
{
TMOD=0x01;
TH0=0xd1; //晶振為11.0592MHz;定時為~13ms
TL0=0x33;
EA=1;
ET0=1;
TR0=1;
EX0=1; //允許外部中斷0
IT0=1; //外部中斷觸發方式下降沿觸發
temperature=0;
while(1)
{
/****************紅外線操作************************/
P1=Decode;//把數據反碼送給P1口
/****************10s讀取一次溫度*******************/
if(TemperatureSign==0) //10s到了嗎,TemperatureSign=0有效
{
temperature=ReadTemperature();//此段程序不能放在定時器里面,因為此函數運行需要的時間比較長
TemperatureSign=1;
}
}
}
/********刷新顯示,定時讀取溫度**********/
timer0() interrupt 1
{
TH0=0xd1; //晶振為11.0592MHz;定時為~13ms,刷新頻率~75Hz;
TL0=0x33;
display(temperature); //顯示溫度
count++;
if(count>=769) //10s讀一次數據,769*13ms=10s
{
TemperatureSign=0;
count=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -