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

📄 scan_time.c

📁 校园打铃系统
💻 C
字号:
code int class[]={80000,//1
                  84500,
                  85500,//2
                  94000,
                  100000,//3
                  104500,
                  105500,//4
                  114000,
                  115000,//5
                  123500,
                  133000,//6
                  141500,
                  142500,//7
                  151000,
                  152000,//8
                  161500
                       };
sbit ds=P2^5;
/***************************ds18b20*************************/
/********************************
//延时//
********************************/
void delay(uchar time)
/*{t=t/8;
{while(t)//一个while耗时8 us
{t--;}
}
}*/
{time=time-10;
 	time=time/6;
 	while(time!=0)time--;

}


/********************************
//复位//
********************************/
void ds_reset(void)
{ds=0;
 delay(520);//
 ds=1;
 //delay(16);
 while(ds);
 delay(240);
 ds=1;
 }


/*********************************
//写一位
*********************************/
void ds_write_1(uchar b)
{_nop_();
_nop_();
_nop_();
ds=0;
_nop_();
_nop_();
_nop_();
_nop_();
ds=b;
delay(56);
ds=1;
_nop_();
_nop_();
}


/********************************
//读一位
********************************/
bit ds_read_1(void)
{bit r;
ds=0;
_nop_();
_nop_();
_nop_();
_nop_();
 ds=1;
_nop_();
_nop_();
r=ds;
delay(64);
ds=1;
return(r);
}




/**********************************
//写一字节
**********************************/
void ds_write_byte(uchar b)
{   uchar i;
    uchar temp;


    for (i=0;i<8;i++)
    {
        temp=b>>i;
        temp&=0x01;
        ds_write_1(temp);   //调写位函数

    }

}



/*********************************
//读一字节
**********************************/
int ds_read_byte(void)
{
    uchar i;
    uchar j;
    int value=0;


    for (i=0;i<8;i++)
    {
        j=ds_read_1();     //调读位函数

        if (j)               //如果是 1 置1
        {
            value|=(0x0001<<i);  //先读低位,再读高位
           delay(8);
        }
    }                         //否则置 0
    return(value);
}

/***************************************************************/
/*****************************************************************/






sbit fm=P2^2; 
longe time_change;
/******************************************************************/
/****************************判断是上课的时间还是下课的时间段*****/
/******************************************************************/
void scan_time()
{
Read_RTC();
time_change=read_rtc_code[2]*10000+read_rtc_code[1]*100+read_rtc_code[0];
if(class[0]<=time_change<class[1] || class[2]<=time_change<class[3] || class[4]<=time_change<class[5] ||
       class[6]<=time_change<class[7] || class[8]<=time_change<class[9] || class[10]<=time_change<class[11] ||
       class[12]<=time_change<class[13] || class[14]<=time_change<class[15] )//上课时间段
    
   {class_start();
   }
else
  if(class[1]<=time_change<class[2] || class[3]<=time_change<class[4] || class[5]<=time_change<class[6] ||
     class[7]<=time_change<class[8] || class[9]<=time_change<class[10] || class[11]<=time_change<class[12] ||
     class[13]<=time_change<class[14] || class[15]<=time_change)
    {class_end();
    }
}

/************************************************************************/
/***********************************************************************/


void class_start(void)
{
int pp,tt;
if(class[0]<=time_change<=class[0]+2 || class[2]<=time_changeclass[2]+2 || class[4]<=time_change<=class[4]+2 || 
    class[6]<=time_change<=class[6]+2 || class[8]<=time_change<=class[8]+2 || class[10]<=time_changeclass[10]+2 || 
    class[12]<=time_change<=class[12]+2 || class[14]<=time_change<=class[14]+2)
    {fm=~fm;
    }

if(class[0]<=time_change<class[1])
    {send(0x05,0x00);
     send(0x06,0x01);
    }
else
  if(class[2]<=time_change<class[3])
      {send(0x05,0x00);
       send(0x06,0x02);
      }
  else
    if(class[4]<=time_change<class[5])
       {send(0x05,0x00);
        send(0x06,0x03);
       }
    else
      if(class[6]<=time_change<class[7])
       {send(0x05,0x00);
        send(0x06,0x04);
       }
      else
        if(class[8]<=time_change<class[9])
         {send(0x05,0x00);
          send(0x06,0x05);
         }
      
        else
          if(class[10]<=time_change<class[11])
           {send(0x05,0x00);
            send(0x06,0x06);
           }
          else
            if(class[12]<=time_change<class[13])
             {send(0x05,0x00);
              send(0x06,0x07);
             }
            else
              if(class[14]<=time_change<class[15])
               {send(0x05,0x00);
                send(0x06,0x08);
               }

pp++;
if(pp==1000)
  {tt++;
   pp=0;
  }
if(tt==20)
  tt=0;

if(tt<10)
 {vs_time();/********************************/
 }
 else
  if(10<=tt<20)
    {v_temperature();/**********************/
    }
}
/********************************************************/

void vs_time()/******************************************/
{
uchar mm,mmh,mml;

if(class[0]<=time_change<class[1])
    {mm=(read_rtc_code[2]-8)*60+(read_rtc_code[1]-0);
     mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
    }
else
  if(class[2]<=time_change<class[3])
      {mm=(read_rtc_code[2]-8)*60+(read_rtc_code[1]-55);
     mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
      }
  else
    if(class[4]<=time_change<class[5])
       {mm=(read_rtc_code[2]-10)*60+(read_rtc_code[1]-0);
     mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
       }
    else
      if(class[6]<=time_change<class[7])
       {mm=(read_rtc_code[2]-10)*60+(read_rtc_code[1]-55);
        mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
       }
      else
        if(class[8]<=time_change<class[9])
         {mm=(read_rtc_code[2]-11)*60+(read_rtc_code[1]-50);
        mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
         }
      
        else
          if(class[10]<=time_change<class[11])
           {mm=(read_rtc_code[2]-13)*60+(read_rtc_code[1]-30);
        mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
           }
          else
            if(class[12]<=time_change<class[13])
             {mm=(read_rtc_code[2]-14)*60+(read_rtc_code[1]-25);
        mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
             }
            else
              if(class[14]<=time_change<class[15])
               {mm=(read_rtc_code[2]-15)*60+(read_rtc_code[1]-20);
        mm=45-mm;
     mmh=mm/10;
     mml=mm%10;
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,mmh);
     send(0x04,mml);
               }

}

void v_temperature()
{float v;
 int tem,z,teml,temh;
         ds_reset(); //复位等待从机应答
         ds_write_byte(0XCC);         //忽略ROM匹配
         ds_write_byte(0X44);         //发送温度转化命令
         delay(240);    //延时100-300us
         ds_reset();          //再次复位,等待从机应答

         ds_write_byte(0XCC);          //忽略ROM匹配
         ds_write_byte(0XBE);          //发送读温度命令
         teml=ds_read_byte();          //读出温度低8

         temh=ds_read_byte();          //读出温度高8位
         if(temh<=7)
        {z=0;
         }
          if(temh>=248)
           {z=1;}
         ds=1;                //释放总线
        temh=temh<<8;
        tem=teml|temh;
        tem&=0x07ff;
        if(z==0)
         {v=tem*0.0625;}
         else
         {v=((~tem)+1)*0.0625;
         }

if(z==0)
{    temh=(int)v/10;
     teml=(int)v%10;   
     send(0x01,0x0f);
     send(0x02,0x0f);
     send(0x03,temh);
     send(0x04,teml);
}
else
{temh=(int)v/10;
     teml=(int)v%10;   
     send(0x01,0x0f);
     send(0x02,0x10);
     send(0x03,temh);
     send(0x04,teml);
}
 
 
}













⌨️ 快捷键说明

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