📄 scan_time.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 + -