基于单片机数字温度计(17)
时间:2025-05-05
时间:2025-05-05
这是本人在大学期间其中之一的课程设计希望对大家有用。
附录3 系统程序
/******************************************************************************************* #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit DQ =P3^6; sbit BEEP =P3^7; sbit HI_LED =P1^4; sbit LO_LED =P1^5; uchar code DSY_CODE[] = {
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x00 };
char Alarm_Temp_HL[1] ={30}; uchar CurrentT =0;
uchar Temp_Value[] ={0x00,0x00}; uchar Display_Digit[] ={0,0,0,0}; bit HI_Alarm =0; bit DS18B20_IS_OK =1; uint Time0_Count =0; void Delay(uint x) { while(--x); } uchar Init_DS18B20() { uchar status ; DQ =1;Delay(8); DQ =0;Delay(90); DQ =1;Delay(8); status =DQ; Delay(100); DQ =1;
return status; } uchar ReadOneByte() { uchar i,dat =0;
DQ =1;_nop_(); for (i=0;i<8;i++) {
DQ=0;dat>>=1;DQ=1;_nop_();_nop_(); if(DQ) dat|=0x80; Delay(30);DQ=1;
}
return dat; } void WriteOneByte(uchar dat)
{ uchar i; for (i=0;i<8;i++) {
DQ=0;DQ=dat
0x01;Delay(5);DQ=1;dat>>=1;
} }
void Read_Temperature() { if (Init_DS18B20()==1)
DS18B20_IS_OK=0; else
{ 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_IS_OK=1;
} }
void Set_Alarm_Temp_Value() {
Init_DS18B20(); WriteOneByte(0xCC); WriteOneByte(0x4E);
WriteOneByte(Alarm_Temp_HL[0]); WriteOneByte(Alarm_Temp_HL[1]); WriteOneByte(0x7F); Init_DS18B20(); WriteOneByte(0xCC); WriteOneByte(0x48); }
void Display_Temperature() { uchar i;
uchar t=150; uchar ng=0,np=0;
char Signed_Current_Temp; if ((Temp_Value[1]&0xF8)==0xF8) &
、