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

📄 index.c

📁 1602+ds1302时钟显示+ds18b20温度报警
💻 C
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////                                                                                           /////
/////                                 电子温度计c语言程序                                       /////
/////                                                                                           /////
/////                                                                                           /////
/////////////////////////////////////////////////////////////////////////////////////////////////////


#include "reg52.h"	
#include "string.h"
#include "ds1302.h"
#include "ds18b20.h"
#include "lcd1602.h"

sbit RED=P1^3;	  //高温报警灯
sbit BLUE=P1^4;  //低温报警灯
sbit SPEAKER=P3^7;//蜂鸣器
sbit SET=P3^0;	  //以下按钮设置
sbit SET2=P3^1;
sbit SET3=P2^0;
sbit NEXT=P2^1;
sbit REDUCE=P2^2;
sbit ADD=P2^3;

int tH=-1,tL=-1;//报警状态,1为关闭
int m,keyon,keytype,out=0,out2=0;//设置报警温度时使用的中间变量
float temperatureH=35,temperatureL=18;  //报警温度

void delay(unsigned int time)
{
  unsigned int n;
  n=0;
  while(n<time) n++;
  return;
}

void ds_codechange()
{
  dis1[0]=code_switch(((int)month)/10);
  dis1[1]=code_switch(((int)month)%10);

  dis1[3]=code_switch(((int)date)/10);
  dis1[4]=code_switch(((int)date)%10);

  dis1[6]=code_switch(((int)hour)/10);
  dis1[7]=code_switch(((int)hour)%10);

  dis1[9]=code_switch(((int)minute)/10);
  dis1[10]=code_switch(((int)minute)%10);

  dis1[12]=code_switch(((int)second)/10);
  dis1[13]=code_switch(((int)second)%10);

  dis1[15]=code_switch((int)week);
}
void t_codechange()//主界面温度显示float转换成字符
{
  if(temperature>=0)
	{
      dis2[10]=code_switch((int)(temperature/100));
	  dis2[11]=code_switch(((int)(temperature)%100)/10);
	  dis2[12]=code_switch(((int)temperature)%10);
	  dis2[13]='.';
	  dis2[14]=code_switch(((int)(temperature*10))%10);
    }
  else
	{
      dis2[10]='-';
	  dis2[11]=code_switch(((int)(-temperature)%100)/10);
	  dis2[12]=code_switch(((int)(-temperature))%10);
	  dis2[13]='.';
	  dis2[14]=code_switch(((int)((-temperature)*10))%10);
    }
}

///////////////////////////温度报警设置显示/////////////////////////

void Display2()
{
  unsigned char i;
  if(tH==1)//高温开关值设置
	{
      dis1[9]='O';
	  dis1[10]='F';
	  dis1[11]='F';
	}
  else 
	{
      dis1[9]='O';
	  dis1[10]='N';
	  dis1[11]=' ';
	}
  if(temperatureH>=0)//高温温度值设置
	{
      dis1[13]=code_switch(((int)(temperatureH)%100)/10);
	  dis1[14]=code_switch(((int)temperatureH)%10);
	}
  else
	{
      dis1[13]='-';
	  dis1[14]=code_switch(((int)(-temperatureH))%10);
    }
    if(tL==1)//低温开关值设置
	{
      dis2[9]='O';
	  dis2[10]='F';
	  dis2[11]='F';
	}
  else 
	{
      dis2[9]='O';
	  dis2[10]='N';
	  dis2[11]=' ';
	}
    if(temperatureL>=0)//低温温度值设置
	{
      dis2[13]=code_switch(((int)(temperatureL)%100)/10);
	  dis2[14]=code_switch(((int)temperatureL)%10);
	}
  else
	{
      dis2[13]='-';
	  dis2[14]=code_switch(((int)(-temperatureL))%10);
    }
  lcd_pos(0);
  i=0;
  while(dis1[i]!='\0')
  {
    lcd_wdat(dis1[i]);
    i++;
  }
  lcd_pos(0x40);
  i=0;
  while(dis2[i]!='\0')
  {
    lcd_wdat(dis2[i]);
    i++;
  }
  switch (m)
  {
  case 0: lcd_pos(0x0a);break;
  case 1: lcd_pos(0x0E);break;
  case 2: lcd_pos(0x4a);break;
  case 3: lcd_pos(0x4E);break;
  }
}
/////////////////////////////报警设置显示结束///////////////////////////////////


////////////////////////////////报警设置/////////////////////////////////////////
void seting()
{
   if(SET==1&&NEXT==1&&REDUCE==1&&ADD==1);	  //无键盘按下
   else						 /////有键盘按下时
    {
	  keyon=1;
	  if(SET==0)keytype=0;
	  if(NEXT==0)keytype=1;
	  if(REDUCE==0)keytype=2;
	  if(ADD==0)keytype=3;
	}
   if(keyon==1&&SET==1&&NEXT==1&&REDUCE==1&&ADD==1)		 //键盘松开后判断键盘状态
    {
	  if(keytype==1)////////////////菜单下翻
	    { 
		  if(m>=3)m=0;
	      else m++;
		 }
	  if(keytype==2)	////////////////加操作
	    {
		  if(m==0)tH=-tH;
		  if(m==1)
		    {
			  if(temperatureH>(temperatureL+1)) temperatureH--;
			  else temperatureH=99;
			}
		  if(m==2)tL=-tL;
		  if(m==3)
		    {
			  if(temperatureL>-9) temperatureL--;
			  else temperatureL=(temperatureH-1);
			}
		}
	  if(keytype==3)		 ////////////////减操作
	    {
		  if(m==0)tH=-tH;
		  if(m==1)
		    {
			  if(temperatureH<99) temperatureH++;
			  else temperatureH=(temperatureL+1);
			}
		  if(m==2)tL=-tL;
		  if(m==3)
		    {
			  if(temperatureL<(temperatureH-1)) temperatureL++;
			  else temperatureL=-9;
			}
		}
	  if(keytype==0)			  ///////////跳出温度设置
	    {
	      keyon=0;
	      keytype=4;
		  out=1;		
		}
	  keyon=0;
	  keytype=4;
	}
}
/////////////////////////////报警设置结束/////////////////////////////////////////
void  Too_hot ()
{   unsigned char i;
    unsigned char  m;
    lcd_init(); 
	delay(100);               //初始化LCD 
    lcd_pos(0);                //设置显示位置为第一行的第1个字符
     m = 0;
    while(cdis3[m] != '\0')
     {                         //显示字符
       lcd_wdat(cdis3[m]);
       m++;
     }

    lcd_pos(0x40);             //设置显示位置为第二行第1个字符
     m = 0;
    while(cdis4[m] != '\0')
     {
       lcd_wdat(cdis4[m]);      //显示字符
       m++;
     }
	 for(m=0;m<5;m++)
 	{
	RED=0;	
	SPEAKER=0;
	delay(10000);
	SPEAKER=1;
	RED=1;
	delay(10000);
	SPEAKER=0;  
    }
		if(SET==0)	/////////////////////////进入报警温度设定
	  {
	    out=0;
	    delay(300);
		while(SET==0);
		strcpy(dis1,"ALARM-H: ON  35 \0");
		strcpy(dis2,"ALARM-L: ON  18 \0");
		lcd_init2();
		lcd_pos(0);
        i=0;
        while(dis1[i]!='\0')
        {
          lcd_wdat(dis1[i]);
          i++;
        }
        lcd_pos(0x40);
        i=0;
        while(dis2[i]!='\0')
        {
          lcd_wdat(dis2[i]);
  	      i++;
        }
		lcd_pos(0x0a);//光标显示在高温开关位置
		if(SET==0)
		{
		lcd_pos(0);
        i=0;
        while(dis1[i]!='\0')
        {
          lcd_wdat(dis1[i]);
          i++;
        }
        lcd_pos(0x40);
        i=0;
        while(dis2[i]!='\0')
        {
          lcd_wdat(dis2[i]);
  	      i++;
        }
		lcd_pos(0x0a);
		}
		m=0;
		keyon=0;
		keytype=4;
		while(1)
		  {
		    Display2();	///OFF,ON
			seting();	 ///ADD,DEC
			if (out==1)
			{
			  lcd_init();
			  delay(10);
			  strcpy(dis1,"10-11 19:57:00 2\0");
	          strcpy(dis2,"NOW TEMP: 000.0 \0");
			  break;
			  }
			delay(1000);					    
		  }
		delay(200);
				while(SET==0);
         }
}
void  Too_cold ()
{   unsigned char i;
    unsigned char  m;
    lcd_init();
	delay(100);                //初始化LCD 
    lcd_pos(0);                //设置显示位置为第一行的第1个字符
     m = 0;
    while(cdis3[m] != '\0')
     {                         //显示字符
       lcd_wdat(cdis3[m]);
       m++;
     }

    lcd_pos(0x40);             //设置显示位置为第二行第1个字符
     m = 0;
    while(cdis5[m] != '\0')
     {
       lcd_wdat(cdis5[m]);      //显示字符
       m++;
     }
	 for(m=0;m<5;m++)
	{
	BLUE=0;
	SPEAKER=0;
	delay(10000);
	SPEAKER=1;
	BLUE=1;
	delay(10000);
	SPEAKER=0;
 	}  
		if(SET==0)	/////////////////////////进入报警温度设定
	  {
	    out=0;
	    delay(300);
		while(SET==0);
		strcpy(dis1,"ALARM-H: ON  35 \0");
		strcpy(dis2,"ALARM-L: ON  18 \0");
		lcd_init2();
		delay(50);
		lcd_pos(0);
        i=0;
        while(dis1[i]!='\0')
        {
          lcd_wdat(dis1[i]);
          i++;
        }
        lcd_pos(0x40);
        i=0;
        while(dis2[i]!='\0')
        {
          lcd_wdat(dis2[i]);
  	      i++;
        }
		lcd_pos(0x0a);//光标显示在高温开关位置
		if(SET==0)
		{	
		lcd_pos(0);
        i=0;
        while(dis1[i]!='\0')
        {
          lcd_wdat(dis1[i]);
          i++;
        }
        lcd_pos(0x40);
        i=0;
        while(dis2[i]!='\0')
        {
          lcd_wdat(dis2[i]);
  	      i++;
        }
		lcd_pos(0x0a);
		}
		m=0;
		keyon=0;
		keytype=4;
		while(1)
		  {
		    Display2();	///OFF,ON
			seting();	 ///ADD,DEC
			if (out==1)
			{
			  lcd_init();
			  delay(10);
			  strcpy(dis1,"10-11 19:57:00 2\0");
	          strcpy(dis2,"NOW TEMP: 000.0 \0");
			  break;
			  }
			delay(1000);					    
		  }
		delay(200);
				while(SET==0);
         }
}
////////////////////////////////时间设置显示///////////////////////////////////////

void Display3()
{
  unsigned char i;

  dis1[12]=code_switch(((int)year)/10);
  dis1[13]=code_switch(((int)year)%10);

  dis2[0]=code_switch(((int)month)/10);
  dis2[1]=code_switch(((int)month)%10);

  dis2[3]=code_switch(((int)date)/10);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -