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

📄 main.c

📁 校园打铃系统
💻 C
📖 第 1 页 / 共 2 页
字号:
 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);
}

/***************************************************************/
/*****************************************************************/
void scan_time(void);
void class_start(void);
void class_end(void);
void vs_time(void);
void v_temperature(void);


sbit fm=P1^0;
unsigned long time_change;
/******************************************************************/
/****************************判断是上课的时间还是下课的时间段*****/
/******************************************************************/
void scan_time()
{
Read_RTC();
time_change=10000.0*read_rtc_code[2]+100.0*read_rtc_code[1]+read_rtc_code[0];
if(class[0]<=time_change && time_change<class[1] || class[2]<=time_change && time_change<class[3] ||
   class[4]<=time_change && time_change<class[5] || class[6]<=time_change && time_change<class[7] ||
   class[8]<=time_change && time_change<class[9] || class[10]<=time_change&& time_change<class[11] ||
   class[12]<=time_change&& time_change<class[13] || class[14]<=time_change&& time_change<class[15] )//上课时间段

   {class_start();
   }
else
  if(class[0]>=time_change || class[1]<=time_change && time_change<class[2] || class[3]<=time_change && time_change<class[4] ||
     class[5]<=time_change && time_change<class[6] || class[7]<=time_change && time_change<class[8] ||
     class[9]<=time_change && time_change<class[10] || class[11]<=time_change && time_change<class[12] ||
     class[13]<=time_change && time_change<class[14] || class[15]<=time_change)
    {class_end();
    }
}

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


void class_start()
{
int pp,tt;
if(class[0]<=time_change && time_change<=class[0]+2 || class[2]<=time_change && time_change<=class[2]+2 ||
   class[4]<=time_change && time_change<=class[4]+2 || class[6]<=time_change && time_change<=class[6]+2 ||
   class[8]<=time_change && time_change<=class[8]+2 || class[10]<=time_change && time_change<=class[10]+2 ||
    class[12]<=time_change && time_change<=class[12]+2 || class[14]<=time_change && time_change<=class[14]+2)
    {fm=1;
    }
else
    fm=0;
if(class[0]<=time_change && time_change<class[1])
    {send(0x05,0x00);
     send(0x06,0x01);
    }
else
  if(class[2]<=time_change && time_change<class[3])
      {send(0x05,0x00);
       send(0x06,0x02);
      }
  else
    if(class[4]<=time_change && time_change<class[5])
       {send(0x05,0x00);
        send(0x06,0x03);
       }
    else
      if(class[6]<=time_change && time_change<class[7])
       {send(0x05,0x00);
        send(0x06,0x04);
       }
      else
        if(class[8]<=time_change && time_change<class[9])
         {send(0x05,0x00);
          send(0x06,0x05);
         }

        else
          if(class[10]<=time_change && time_change<class[11])
           {send(0x05,0x00);
            send(0x06,0x06);
           }
          else
            if(class[12]<=time_change && time_change<class[13])
             {send(0x05,0x00);
              send(0x06,0x07);
             }
            else
              if(class[14]<=time_change && time_change<class[15])
               {send(0x05,0x00);
                send(0x06,0x08);
               }

pp++;
if(pp>=40)
  {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 && 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 && 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 && 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 && 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 && 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 && 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 && 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 && 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,0x0e);
     send(0x02,0x0f);
     send(0x03,temh);
     send(0x04,teml);
}
else
{temh=(int)v/10;
     teml=(int)v%10;
     send(0x01,0x0e);
     send(0x02,0x10);
     send(0x03,temh);
     send(0x04,teml);
}


}

/**********************************************************/
/*******************上课处理完*****************************/
/*********************************************************/

/***********************下课*******************************/
/**********************************************************/
/************************************************************/
void class_end()
{uchar hour,minite;
 uchar hour_h,hour_l,minite_h,minite_l;
if(class[1]<=time_change && time_change<=class[1]+2 || class[3]<=time_change && time_change<=class[3]+2 ||
   class[5]<=time_change && time_change<=class[5]+2 || class[7]<=time_change && time_change<=class[7]+2 ||
   class[9]<=time_change && time_change<=class[9]+2 || class[11]<=time_change && time_change<=class[11]+2 ||
   class[13]<=time_change && time_change<=class[13]+2 || class[15]<=time_change && time_change<=class[15]+2)
   {fm=1;}
 else
    fm=0;

   send(0x05,0x0f);//LD1暗
   send(0x06,0x0f);
   send(0x07,0x8f);
   send(0x08,0x0f);//点亮
       hour=read_rtc_code[2];//读DS1302
       minite=read_rtc_code[1];
       hour_h=hour/10;
       hour_l=hour%10;
       send(0x01,hour_h);//显示小时
       send(0x02,hour_l);
       minite_h=minite/10;
       minite_l=minite%10;
       send(0x03,minite_h);//显示分钟
       send(0x04,minite_l);
}
/***************************************************************/
/**********************下课处理完********************************/
/****************************************************************/



void main()
 { Initial_7219();//初始化
   Set_RTC();

  while(1)
  {
 set_time();
 scan_time();

 }
 }







⌨️ 快捷键说明

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