資源簡介
2 用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器

代碼片段和文件信息
//-----------------------------------------------------------------
//??名稱:?DS18B20溫度傳感器程序
//-----------------------------------------------------------------
#define?F_CPU?1000000UL
#include?
#include?
#define?INT8U?unsigned?char
#define?INT16U??unsigned?int
#define?INT8?signed?char
//DS18B20引腳定義
#define?DQ?PB7
//設(shè)置數(shù)據(jù)方向
#define?DQ_DDR_0()????DDRB?&=?~_BV(DQ)
#define?DQ_DDR_1()????DDRB?|=??_BV(DQ)
//溫度管引腳操作定義
#define?DQ_1()????????PORTB?|=??_BV(DQ)
#define?DQ_0()????????PORTB?&=?~_BV(DQ)
#define?RD_DQ_VAL()???(PINB??&???_BV(DQ))?//注意保留這一行的括號(hào)
//溫度小數(shù)對(duì)照表(四位的溫度值0000~1111對(duì)應(yīng)16個(gè)小數(shù)位)
const?INT8U?df_Table[]={0112334456678899};
char?RomCodePrompt[]?=?{“?--?ROM?CODE?--?“};
char?RomCodeString[]?=?{“0000000000000000“};
//報(bào)警溫度提示信息及報(bào)警溫度上下限值
char?Alarm_Temp[]??????=?{“--?ALARM?TEMP?--“};
char?Alarm_HI_LO_STR[]?=?{“Hi:?????Lo:?????“};
//當(dāng)前讀取的溫度整數(shù)部分
INT8U?CurrentT?=?0?;??
//從DS18B20讀取的溫度值
INT8U?Temp_Value[]?=?{0x000x00};
//待顯示的各溫度數(shù)位
INT8U?Display_Digit[]?=?{0000};
//傳感器狀態(tài)標(biāo)志
INT8U?DS18B20_ERROR?=?0;
//當(dāng)前溫度顯示緩沖
char?Current_Temp_Display_Buffer[]?=?{“?TEMP:??????????“};
INT8?Alarm_Temp_HL[2];
//-----------------------------------------------------------------
//高低溫報(bào)警標(biāo)志
volatile?INT8U?HI_Alarm=0LO_Alarm=0;
//-----------------------------------------------------------------
//-----------------------------------------------------------------
//?初始化DS18B20?
//-----------------------------------------------------------------
INT8U?Init_DS18B20()
{
INT8U?status;
DQ_DDR_1();
DQ_0();?_delay_us(500);
DQ_DDR_0();_delay_us(50);
status=RD_DQ_VAL();_delay_us(500);
DQ_1();
return?status;
}
//-----------------------------------------------------------------
//?讀一字節(jié)?
//-----------------------------------------------------------------
INT8U?ReadOneByte()
{
????INT8U?idat=0;
for(i=0;i<8;i++)
{
DQ_DDR_1();
DQ_0();
DQ_DDR_0();
if(RD_DQ_VAL())?dat|=_BV(i);
_delay_us(80);
}
return?dat;
}
//-----------------------------------------------------------------
//?寫一字節(jié)?
//-----------------------------------------------------------------
void?WriteOneByte(INT8U?dat)
{
?INT8U?i;
for(i=0x01;i!=0x00;i<<=1)
{
DQ_DDR_1();
DQ_0();
if(dat&i)?DQ_1();
else?DQ_0();
_delay_us(80);
DQ_1();
}
}
//-----------------------------------------------------------------
//?讀取溫度值?
//-----------------------------------------------------------------
void?Read_Temperature()
{
if(Init_DS18B20()!=0x00)
DS18B20_ERROR=1;
{
WriteOneByte(0XCC);
WriteOneByte(0X44);
Init_DS18B20();
WriteOneByte(0XCC);
WriteOneByte(0XBE);
Temp_Value[0]=ReadOneByte();
Temp_Value[1]=ReadOneByte();
Alarm_Temp_HL[0]=ReadOneByte();
Alarm_Temp_HL[1]=ReadOneByte();
DS18B20_ERROR=0;
}
}
void?Temperature_Convert()
{
INT8U?ng=0;
INT8?Curr_int_temp=0;
INT8U?Curr_df_temp=0;
if((Temp_Value[1]&0xF8)==0XF8)
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-11-30?13:36??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\
?????目錄???????????0??2012-11-30?13:36??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\.dep\
?????文件??????????64??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\.dep\main.o.d
?????文件????????4937??2012-11-22?16:50??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\DS18B20.c
?????文件?????????158??2012-09-29?08:50??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\DS18B20_LCD1602.pnproj
?????文件??????????68??2012-09-29?08:50??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\DS18B20_LCD1602.pnps
?????文件????????1922??2012-11-22?16:22??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\DS18B20溫度傳感器測試.PWI
?????文件???????49683??2012-11-23?08:20??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\Last?Loaded?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器.DBK
?????文件????????2693??2012-10-23?15:48??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\LCD1602.c
?????文件????????3164??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.c
?????文件??????????13??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.eep
?????文件???????14977??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.elf
?????文件????????9418??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.hex
?????文件???????68713??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.lss
?????文件???????54515??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.lst
?????文件???????28006??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.map
?????文件???????19420??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.o
?????文件?????????147??2012-09-28?14:05??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.pnproj
?????文件??????????57??2012-09-28?14:05??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.pnps
?????文件????????2789??2012-11-22?16:57??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\main.sym
?????文件???????17507??2012-09-28?11:59??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\Makefile
?????文件???????49683??2012-11-29?08:05??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器.DSN
?????文件????????1483??2012-11-29?08:05??12?用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器\用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器.PWI
評(píng)論
共有 條評(píng)論