📄 main.c
字号:
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 + -