📄 main.c
字号:
//=========================================
//温度传感器18b20测温 2008.4.24
// 黄锐
//=========================================
#include<reg52.h>
#include<Lcd1602.h>
#include<DS18B20.h>
#include<ISD1420.h>
#define uchar unsigned char
#define uint unsigned int
void temperature_display(uint display_data);
void Set_Limit( );
uint temperature;
void main( ) //主函数
{
uchar stop=0;
uint temp;
TCON=0X01; //设置外中断0边沿触发控制语音报温
EA=0;
EX0=1;
Lcd1602_Initial( );
DS18B20_Initial( );
Lcd1602_Write_String(1,0,"Waiting!");
Lcd1602_Write_String(2,0,"Set The Limit!");
while(1) //死循环
{
key_scan( );
if(num=='A')
{
delay(10,100);
if(num=='A')
{
Lcd1602_Clear_Line(1);
Lcd1602_Clear_Line(2);
Lcd1602_Write_String(1,0,"Highlimit is:");
Lcd1602_Write_String(2,0,"Lowlimit is:");
Set_Limit( );
delay(10,100);
}
}
if(num=='C')
{
Lcd1602_Clear_Line(1);
Lcd1602_Clear_Line(2);
while(!stop)
{
delay(50,10);
temperature=Read_temperature( ); //调用读温度函数
temperature_display(temperature); //调用显示函数
if(IE0==1)
{
temp = temperature*6.25;
du_wen(temp);
IE0=0;
}
if(num=='A')
stop=1;
}
}
}
}
//=============================================
//设置温度上下限函数
//=============================================
void Set_Limit( )
{
uchar stop=0;
uchar Highlimit_shi=0;
uchar Highlimit_ge=0;
uchar Lowlimit_shi=0;
uchar Lowlimit_ge=0;
while(!stop)
{
num=key_scan( );
if(num=='0')
{
delay(10,100);
if(num=='0')
{
Highlimit_shi++;
if(Highlimit_shi==10)
Highlimit_shi=0;
}
}
delay(10,100);
Lcd1602_Write_Data(1,14,Highlimit_shi+'0');
delay(10,100);
if(num=='1')
{
delay(10,100);
if(num=='1')
{
Highlimit_ge++;
if(Highlimit_ge==10)
Highlimit_ge=0;
}
}
delay(10,100);
Lcd1602_Write_Data(1,15,Highlimit_ge +'0');
delay(10,100);
if(num=='2')
{
delay(10,100);
if(num=='2')
{
Lowlimit_shi++;
if(Lowlimit_shi==10)
Lowlimit_shi=0;
}
}
delay(10,100);
Lcd1602_Write_Data(2,14,Lowlimit_shi+'0');
delay(10,100);
if(num=='3')
{
delay(10,100);
if(num=='3')
{
Lowlimit_ge++;
if(Lowlimit_ge==10)
Lowlimit_ge=0;
}
}
delay(10,100);
Lcd1602_Write_Data(2,15,Lowlimit_ge+'0');
delay(10,100);
if(num=='B')
{
Highlimit = Highlimit_shi*10+Highlimit_ge-1; //此处有误差1°
Lowlimit = Lowlimit_shi*10+Lowlimit_ge;
}
if(num=='C')
stop=1;
}
}
//=================================================================
//显示温度值及报警提示函数
//=================================================================
void temperature_display(uint display_data) //显示函数
{
uint Temp,Temp2;
uchar t[5]; //存放温度值数组
Temp=display_data*6.25; //最小分辨率0.0625,在此先放大100倍
t[0]=Temp/1000; //温度十位
t[1]=Temp%1000/100; //温度个位
t[2]='.'-'0';
t[3]=Temp%1000%100/10; //温度十分位
t[4]=Temp%1000%100%10; //温度百位
Temp2=Temp/100;
if(Temp2>Highlimit) //上限报警
{
Lcd1602_Clear_Line(1);
delay(100,100);
Lcd1602_Write_String(1,0,"tempe is high!");
}
else if (Temp2<Lowlimit) //下限报警
{
Lcd1602_Clear_Line(1);
delay(100,100);
Lcd1602_Write_String(1,0,"tempe is low!");
}
else
{
Lcd1602_Write_String(1,0,"tempe is normal!");
}
Lcd1602_Write_String(2,0,"tempe is:");
Lcd1602_Write_Data(2,9, t[0]+'0');
Lcd1602_Write_Data(2,10,t[1]+'0');
Lcd1602_Write_Data(2,11,t[2]+'0');
Lcd1602_Write_Data(2,12,t[3]+'0');
Lcd1602_Write_Data(2,13,t[4]+'0');
Lcd1602_Write_Data(2,14,0xdf);
Lcd1602_Write_Data(2,15,'C');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -