⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 此程序是基于89s52单片机的c程序
💻 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 + -