📄 tz_clock.c
字号:
switch(BS_RSEG)
{ case 0:{if(bs0==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 1:{if(bs1==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 2:{if(bs2==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 3:{if(bs3==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 4:{if(bs4==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 5:{if(bs5==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 6:{if(bs6==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 7:{if(bs7==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 8:{if(bs8==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 9:{if(bs9==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 10:{if(bs10==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 11:{if(bs11==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 12:{if(bs12==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 13:{if(bs13==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 14:{if(bs14==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 15:{if(bs15==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 16:{if(bs16==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 17:{if(bs17==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 18:{if(bs18==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 19:{if(bs19==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 20:{if(bs20==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 21:{if(bs21==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 22:{if(bs22==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
case 23:{if(bs23==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
default:{}
}
DAT8279= *(pdis+0);
DAT8279= *(pdis+10);DAT8279= *(pdis+10);//报时的段码“bb”
DAT8279= *(pdis+(BS_RSEG%10));
DAT8279= *(pdis+(BS_RSEG/10));
DAT8279= *(pdis+(BS_RSEG%10));
DAT8279= *(pdis+(BS_RSEG/10));
}break; /*要显示报时的段码!*/
case 13:
{ if(ZM_FLAG==1)
{
p_timeslave=hms_variant;p_timeslave+=5;
DAT8279=*(pdis+12);
DAT8279=*(pdis+12);
DAT8279=*(pdis+11);
DAT8279=*(pdis+11);
DAT8279=*(pdis+(p_timeslave->hour%10));
DAT8279=*(pdis+(p_timeslave->hour/10));
DAT8279=*(pdis+(p_timeslave->hour%10));
DAT8279=*(pdis+(p_timeslave->hour/10));
} /*要显示照明上限的段码!*/
else
{
p_timeslave=hms_variant;p_timeslave+=6;
DAT8279=*(pdis+13);
DAT8279=*(pdis+13);
DAT8279=*(pdis+11);
DAT8279=*(pdis+11);
DAT8279=*(pdis+(p_timeslave->hour%10));
DAT8279=*(pdis+(p_timeslave->hour/10));
DAT8279=*(pdis+(p_timeslave->hour%10));
DAT8279=*(pdis+(p_timeslave->hour/10));
}/*要显示照明下限的段码!*/
}break;
}
}
void dis_pub(COMPLEX *ux)
{ uchar temp1;uchar temp2;
temp1=ux->second/10;
temp2=ux->second%10;
DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);
temp1=ux->minute/10;
temp2=ux->minute%10;
DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);
temp1=ux->hour/10;
temp2=ux->hour%10;
DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);
DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);//再补充上两个数码管
}
void pushdata_12887(void)
{
XBYTE[0x4004]=p_timemu->hour; /*将母钟的时间压入日历芯片里!*/
XBYTE[0x4002]=p_timemu->minute;
XBYTE[0x4000]=p_timemu->second;
p_timeslave=&hms_variant[1];
XBYTE[0x4010]=p_timeslave->hour;/*将东面子钟的时间压入日历芯片里!*/
XBYTE[0x4011]=p_timeslave->minute;
XBYTE[0x4012]=p_timeslave->second;
p_timeslave=&hms_variant[2];
XBYTE[0x4013]=p_timeslave->hour;/*将南面子钟的时间压入日历芯片里!*/
XBYTE[0x4014]=p_timeslave->minute;
XBYTE[0x4015]=p_timeslave->second;
p_timeslave=&hms_variant[3];
XBYTE[0x4016]=p_timeslave->hour;/*将西面子钟的时间压入日历芯片里!*/
XBYTE[0x4017]=p_timeslave->minute;
XBYTE[0x4018]=p_timeslave->second;
p_timeslave=&hms_variant[4];
XBYTE[0x4019]=p_timeslave->hour;/*将北面子钟的时间压入日历芯片里!*/
XBYTE[0x401a]=p_timeslave->minute;
XBYTE[0x401b]=p_timeslave->second;
}
void get_all_time(void)
{
p_timemu=hms_variant;
p_timemu->second=XBYTE[0x4000];
p_timemu->minute=XBYTE[0x4002];
p_timemu->hour=XBYTE[0x4004];/*对应母钟的时间*/
//p_timeslave=hms_variant;
//p_timeslave++;//千万不能写成p_timeslave+=1形式
p_timeslave=&hms_variant[1];
p_timeslave->hour=XBYTE[0x4010];//取东面子钟的时间
p_timeslave->minute=XBYTE[0x4011];
p_timeslave->second=XBYTE[0x4012];
p_timeslave=&hms_variant[2];
p_timeslave->hour=XBYTE[0x4013];//取南面子钟的时间
p_timeslave->minute=XBYTE[0x4014];
p_timeslave->second=XBYTE[0x4015];
p_timeslave=&hms_variant[3];
p_timeslave->hour=XBYTE[0x4016];//取西面子钟的时间
p_timeslave->minute=XBYTE[0x4017];
p_timeslave->second=XBYTE[0x4018];
p_timeslave=&hms_variant[4];
p_timeslave->hour=XBYTE[0x4019];//取北面子钟的时间
p_timeslave->minute=XBYTE[0x401a];
p_timeslave->second=XBYTE[0x401b];
p_timeslave=&hms_variant[5];
p_timeslave->second=0x00;
p_timeslave->minute=0x00;
p_timeslave->hour=0x12;/*初始化对应照明上限的时间18:00:00*/
p_timeslave=&hms_variant[6];
p_timeslave->second=0x00;
p_timeslave->minute=0x00;
p_timeslave->hour=0x05;/*初始化对应照明下限的时间5:00:00*/
}
void initial_8279(void)
{
COM8279=0xd2;/*总清除命令*/
do{ACC=COM8279;}
while(ACC^7==1);/*等待清除结束8279可用!*/
COM8279=0x00;COM8279=0x34;/*键盘、显示方式及时钟分频命令*/
}
void initial_12887(void)
{
RL12887A=0x2f;
RL12887B=0x06;
}
void initial_first(void)
{
TMOD=0x21;
PCON=0x80;
SCON=0x50;
TH0=-50000/256;
TL0=-50000%256;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
}
void key_which_hour(void)
{ p_timeslave=hms_variant;
switch(DIS_RSEG)
{
case 4:{p_timeslave=&hms_variant[1];func_slavehour();}break;
case 5:{p_timeslave=&hms_variant[2];func_slavehour();}break;
case 6:{p_timeslave=&hms_variant[3];func_slavehour();}break;
case 7:{p_timeslave=&hms_variant[4];func_slavehour();}break;
case 0:{p_timemu=hms_variant;func_muhour();}break;
case 13:
{ if(ZM_FLAG==1)
{ p_timeslave=&hms_variant[5];func_zmhour();}
else
{ p_timeslave=&hms_variant[6];func_zmhour();}
}break;
}
}
void key_which_min(void)
{ p_timeslave=hms_variant;
switch(DIS_RSEG)
{
case 4:{p_timeslave=&hms_variant[1];func_slavemin();}break;
case 5:{p_timeslave=&hms_variant[2];func_slavemin();}break;
case 6:{p_timeslave=&hms_variant[3];func_slavemin();}break;
case 7:{p_timeslave=&hms_variant[4];func_slavemin();}break;
case 0:{p_timemu=hms_variant;func_mumin();}break;
case 13:{;}break;
}
}
void func_slavehour(void)
{
if(ADD_SUB_FLAG==0)
{ p_timeslave->hour++;p_timeslave->hour%=12;}
else
{ p_timeslave->hour--;
if(p_timeslave->hour==0xff){p_timeslave->hour=11;}
}
}
void func_slavemin(void)
{
if(ADD_SUB_FLAG==0)
{ p_timeslave->minute++;p_timeslave->minute%=60;}
else
{ p_timeslave->minute--;
if(p_timeslave->minute==0xff){p_timeslave->minute=59;}
}
}
void func_muhour(void)
{
if(ADD_SUB_FLAG==0)
{ p_timemu->hour++;p_timemu->hour%=24;}
else
{ p_timemu->hour--;
if(p_timemu->hour==0xff){p_timemu->hour=23;}
}
}
void func_mumin(void)
{
if(ADD_SUB_FLAG==0)
{ p_timemu->minute++;p_timemu->minute%=60;}
else
{ p_timemu->minute--;
if(p_timemu->minute==0xff){p_timemu->minute=59;}
}
}
void func_zmhour(void)
{
if(ADD_SUB_FLAG==0)
{ p_timeslave->hour++;p_timeslave->hour%=24;}
else
{ p_timeslave->hour--;
if(p_timeslave->hour==0xff){p_timeslave->hour=23;}
}
}
uchar beijinghour(uchar *x,uchar *y)
{uchar high,low,temp;
high=*x;low=*y;
temp=(high-0x30)*10+(low-0x30);
temp+=8;//转换为北京时间的小时!
if(temp==24){temp=0;return(temp);}
else if(temp>24){temp-=24;return(temp);}
else{return(temp);}
}
uchar beijingmin(uchar *x,uchar *y)
{uchar high,low,temp;
high=*x;low=*y;
temp=(high-0x30)*10+(low-0x30);
return(temp);
}
void zm_on_off(void) //如果上限及下限都为同一个值,则照明无效!
{ p_timeslave=&hms_variant[5];
if(p_timemu->hour==p_timeslave->hour){ZM_PIN=0;}
else
{ p_timeslave++;
if(p_timemu->hour==p_timeslave->hour){ZM_PIN=1;}
}
}
bit function_bs(void)
{ uchar temp;
temp=p_timemu->hour;
temp++;if(temp==24){temp=0;}
switch(temp)
{ case 0:{if(bs0==0){return(0);}else{return(1);}}break;
case 1:{if(bs1==0){return(0);}else{return(1);}}break;
case 2:{if(bs2==0){return(0);}else{return(1);}}break;
case 3:{if(bs3==0){return(0);}else{return(1);}}break;
case 4:{if(bs4==0){return(0);}else{return(1);}}break;
case 5:{if(bs5==0){return(0);}else{return(1);}}break;
case 6:{if(bs6==0){return(0);}else{return(1);}}break;
case 7:{if(bs7==0){return(0);}else{return(1);}}break;
case 8:{if(bs8==0){return(0);}else{return(1);}}break;
case 9:{if(bs9==0){return(0);}else{return(1);}}break;
case 10:{if(bs10==0){return(0);}else{return(1);}}break;
case 11:{if(bs11==0){return(0);}else{return(1);}}break;
case 12:{if(bs12==0){return(0);}else{return(1);}}break;
case 13:{if(bs13==0){return(0);}else{return(1);}}break;
case 14:{if(bs14==0){return(0);}else{return(1);}}break;
case 15:{if(bs15==0){return(0);}else{return(1);}}break;
case 16:{if(bs16==0){return(0);}else{return(1);}}break;
case 17:{if(bs17==0){return(0);}else{return(1);}}break;
case 18:{if(bs18==0){return(0);}else{return(1);}}break;
case 19:{if(bs19==0){return(0);}else{return(1);}}break;
case 20:{if(bs20==0){return(0);}else{return(1);}}break;
case 21:{if(bs21==0){return(0);}else{return(1);}}break;
case 22:{if(bs22==0){return(0);}else{return(1);}}break;
case 23:{if(bs23==0){return(0);}else{return(1);}}break;
}
}
uchar compare_zf(COMPLEX * u, COMPLEX * v)
{
if(u->hour%12==v->hour)/*表示母钟小时与子钟小时相等*/
{
if(u->minute==v->minute)
{
//MOTO_FLAG=0;//在进行判断秒位的时候要将走时标志清零,以备别丢掉应该走时的状态!
if(u->second==v->second)
{ZHUISHI=3;}
else if(u->second>v->second && (u->second-v->second)>3 ){ZHUISHI=1;}
else if(u->second<v->second && (v->second-u->second)>3) {ZHUISHI=2;}
else{ZHUISHI=3;}
}
else if(u->minute>v->minute)
{ZHUISHI=1;}/*表示母钟分钟 大于 子钟分钟,子钟正转*/
else if(u->minute<v->minute)
{ZHUISHI=2;}/*表示母钟分钟 小于 子钟分钟,子钟反转*/
}
else if((u->hour%12)>v->hour && (u->hour%12)-v->hour<=6 )
{ZHUISHI=1;}/*表示母钟小时 大于 子钟小时,子钟正转*/
else if((u->hour%12)>v->hour && (u->hour%12)-v->hour>6)
{ZHUISHI=2;}/*表示母钟小时 大于 子钟小时,子钟反转*/
else if((u->hour%12)<v->hour && 6>v->hour-(u->hour%12))
{ZHUISHI=2;}/*表示母钟小时 小于 子钟小时,子钟反转*/
else if((u->hour%12)<v->hour && v->hour-(u->hour%12)>=6)
{ZHUISHI=1;}/*表示母钟小时 小于等于 子钟小时,子钟正转*/
return (ZHUISHI);
}
#if (TZ3_OR_TZ9==0)
void must_go_onestep(void)
{
uchar count;
if(MOTO_STOP_FLAG==0)
{
if(MOTO_FLAG==1)
{ MOTO_FLAG=0;
utlk2(0xc0,0x0b);
for(count=0;count<10;count++) //960个脉冲!=96*10
{
p_motor=motor_forward_ew;//初始化指针
motor_runzz_ew(p_motor);
p_timeslave=&hms_variant[1];
eastsou_slave_add(p_timeslave);
push_ram62256();
}
/*for(count=0;count<10;count++)
{
p_motor=motor_forward_sn;//初始化指针
motor_runzz_ew(p_motor);
p_timeslave=&hms_variant[2];
eastsou_slave_add(p_timeslave);
push_ram62256();
}
for(count=0;count<10;count++)
{
p_motor=motor_forward_ew;//初始化指针
motor_runzz_sn(p_motor);
p_timeslave=&hms_variant[3];
westnor_slave_add(p_timeslave);
push_ram62256();
}
for(count=0;count<10;count++)
{
p_motor=motor_forward_sn;//初始化指针
motor_runzz_sn(p_motor);
p_timeslave=&hms_variant[4];
westnor_slave_add(p_timeslave);
push_ram62256();
}*/
utlk2(0xc4,0x0b);
XBYTE[MOTO1_PORT]=0x00;
XBYTE[MOTO2_PORT]=0x00;
}
}
}
void motor_runzz_ew(uchar code *pointer)/*东面及西面机芯一次正走3秒钟的角度!*/
{
uchar ix;uchar iy;uchar code *temp;
temp=pointer;
if(MOTO_STOP_FLAG==0)
{ utlk2(0xc0,0x0b);
for(iy=0;iy<16;iy++)
{
for(ix=0;ix<6;ix++)
{
XBYTE[MOTO1_PORT]=*pointer;
delay_ms(0x05);
pointer++;
}
pointer=temp;
}
XBYTE[MOTO1_PORT]=0x00;
XBYTE[MOTO2_PORT]=0x00;
utlk2(0xc4,0x0b);
}
}
void motor_runzz_sn(uchar code *pointer)/*南面及北面机芯一次正走3秒钟的角度!*/
{
uchar ix;uchar iy;uchar code *temp;
temp=pointer;
if(MOTO_STOP_FLAG==0)
{ utlk2(0xc0,0x0b);
for(iy=0;iy<16;iy++)
{
for(ix=0;ix<6;ix++)
{
XBYTE[MOTO2_PORT]=*pointer;
delay_ms(0x05);
pointer++;
}
pointer=temp;
}
XBYTE[MOTO1_PORT]=0x00;
XBYTE[MOTO2_PORT]=0x00;
utlk2(0xc4,0x0b);
}
}
void motor_runfz_ew(uchar code *pointer)/*东面及西面机芯一次反走3秒钟的角度!*/
{
uchar ix;uchar iy;uchar code *temp;
temp=pointer;
if(MOTO_STOP_FLAG==0)
{
utlk2(0xc0,0x0b);
for(iy=0;iy<16;iy++)
{
for(ix=0;ix<6;ix++)
{
XBYTE[MOTO1_PORT]=*pointer;
delay_ms(0x05);
pointer++;
}
pointer=temp;
}
XBYTE[MOTO1_PORT]=0x00;
XBYTE[MOTO2_PORT]=0x00;
utlk2(0xc4,0x0b);
}
}
void motor_runfz_sn(uchar code *pointer)/*南面及北面机芯一次反走3秒钟的角度!*/
{
uchar ix;uchar iy;uchar code *temp;
temp=pointer;
if(MOTO_STOP_FLAG==0)
{
utlk2(0xc0,0x0b);
for(iy=0;iy<16;iy++)
{
for(ix=0;ix<6;ix++)
{
XBYTE[MOTO2_PORT]=*pointer;
delay_ms(0x05);
pointer++;
}
pointer=temp;
}
XBYTE[MOTO1_PORT]=0x00;
XBYTE[MOTO2_PORT]=0x00;
utlk2(0xc4,0x0b);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -