logo资料库

DS18b20温度检测及报警程序.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
#include"DS18B20.h" uchar DS18B20_ID[8]; bit RESET_DS18B20(void) { DS18B20_DQ = 1; DS18B20_DQ = 0; Delay_Us(247); DS18B20_DQ = 1; Delay_Us(27); if(DS18B20_DQ == 0) { } { } else } while(DS18B20_DQ == 0); return 0; return 1; void Write_DS18B20_DATA(uchar Value) { uchar i = 0; for(i = 0; i < 8; i ++) { } DS18B20_DQ = 1; DS18B20_DQ = 0; Delay_Us(5); DS18B20_DQ = Value & 0x01; Delay_Us(20); DS18B20_DQ = 1; Value >>= 1; } uchar Read_DS18B20_DATA(void) { uchar i = 0; uchar Value = 0; for(i = 0; i < 8; i ++)
{ DS18B20_DQ = 1; DS18B20_DQ = 0; Delay_Us(1); DS18B20_DQ = 1; Delay_Us(1); if(DS18B20_DQ) { } Value |= 0x01 << i; Delay_Us(17); DS18B20_DQ = 1; nop(); } return Value; } void Read_DS18B20_ID(void) { uchar i = 0; RESET_DS18B20(); Write_DS18B20_DATA(0x33); for(i = 0; i < 8; i++) //复位 DS18B20 //读 ROM 命令。读 ID 号 { } } DS18B20_ID[i] = Read_DS18B20_DATA(); uchar Read_DS18B20_TEMP(void) { uchar Temp_L = 0; uchar Temp_H = 0; uchar Temp = 0; bit ZF = 0; RESET_DS18B20(); Write_DS18B20_DATA(0xCC); Write_DS18B20_DATA(0x44); RESET_DS18B20(); Write_DS18B20_DATA(0xCC); Write_DS18B20_DATA(0xBE); Temp_L = Read_DS18B20_DATA(); Temp_H = Read_DS18B20_DATA(); Temp_L >>= 4; Temp_H <<= 4;
Temp = Temp_H | Temp_L; if(Temp & 0x80) else { } { } ZF = 0; ZF = 1; return Temp; } void Delay_Us(uchar i) { while(-- i); } /************************** R7,#0X01; MOV LCALL DELAY; 2 DELAY: DJNZ R7,DELAY; 2 RET 2 1 X = 5+I*2; **************************/ #ifndef #define _DS18B20_H_ _DS18B20_H_ #include #include #define #define uchar uint unsigned char unsigned int #define nop() _nop_()
extern uchar DS18B20_ID[8]; sbit DS18B20_DQ = P1^3; void Delay_Us(uchar i); bit RESET_DS18B20(void); void Read_DS18B20_ID(void); uchar Read_DS18B20_DATA(void); void Write_DS18B20_DATA(uchar Value); uchar Read_DS18B20_TEMP(void); #endif #ifndef #define _LCD_H_ _LCD_H_ #include #define LCD_DATA P0 sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^2; void LCD1602(void); void Read_Busy(void); void Write_Lcd(unsigned char Value, bit i); void Init_Lcd(void); void Delay(unsigned int i); void Display_LCD_Byte(unsigned char y,unsigned char x,unsigned char Value); void Display_LCD_TEXT(unsigned char y,unsigned char x,unsigned char *Value); #endif #include "LCD.h" void LCD1602(void) { EN = 0; RS = 1; RW = 1; LCD_DATA = 0xFF;
} void Read_Busy(void) { LCD_DATA = 0xFF; RS = 0; RW = 1; EN = 1; while(LCD_DATA & 0x80); EN = 0; } void Write_Lcd(unsigned char Value, bit i) { //i = 0 写指令.i = 1 写数据; Read_Busy(); LCD_DATA = Value; RS = i; RW = 0; EN = 1; EN = 0; } void Init_Lcd(void) { Delay(15000); Write_Lcd(0x38,0); Delay(5000); Write_Lcd(0x38,0); Delay(5000); Write_Lcd(0x38,0); Write_Lcd(0x08,0); Write_Lcd(0x01,0); Write_Lcd(0x06,0); Write_Lcd(0x0c,0); } void Display_LCD_Byte(unsigned char y,unsigned char x,unsigned char Value) { y &= 0x01; x &= 0x0F; if(y) { //y 不能大于 1 //x 不能大于 15 //是否显示在第二行; x += 0x40; //显示在第二行,加 0X40;
} x += 0x80; Write_Lcd(x,0); Write_Lcd(Value,1); } //写入显示的位置 //写入显示数据 /* void Display_LCD_TEXT(unsigned char y,unsigned char x,unsigned char *Value) { unsigned ListLength = 0; y &= 0x01; x &= 0x0F; while(x <= 15) { } }*/ Display_LCD_Byte(y,x,Value[ListLength]); x ++; ListLength ++; void Delay(unsigned int i) { while(-- i); } #include #include"DS18B20.H" #include"LCD.H" sbit BUZZ = P1^7; uchar Lcd_Disp[]= { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; void main(void) { uchar Temp = 0; LCD1602(); Init_Lcd(); Read_DS18B20_ID(); while(1) { Temp = Read_DS18B20_TEMP(); if(Temp > 25) else { } { } BUZZ = 0; BUZZ = 1; Display_LCD_Byte(0,0,'T'); Display_LCD_Byte(0,1,'E'); Display_LCD_Byte(0,2,'M'); Display_LCD_Byte(0,3,'P'); Display_LCD_Byte(0,4,':'); Display_LCD_Byte(0,5,Lcd_Disp[Temp/100]); Display_LCD_Byte(0,6,Lcd_Disp[Temp/10%10]); Display_LCD_Byte(0,7,Lcd_Disp[Temp%10%10]); } }
分享到:
收藏