📄 tele_control.c
字号:
dot=0x50;
}
else
{
dsbuf[0]=year;
dsbuf[1]=month;
dsbuf[2]=day;
dsbuf[3]=((week<<4)&0xf0)|0x02;
dot=0x54;
}
if(key.b.k1)
{
flash++;
if(flash>0x0d)flash=0x00;
if(flash==0x07)flash++;
}
if(key.b.k0)
{
flash--;
if(flash&0xf0)flash=0x0d;
if(flash==0x07)flash--;
}
if(key.b.k2){timechange();}
flash|=0x80;
if(key.b.kk3)
{
flash=STA=0x00;
if(time_change==1) //time change?
{
time_change=0;
ds1302_write_time();
}
}
}
//**************************************************
//timechange is change,call one add one.
//**************************************************
void timechange(void)
{
unsigned char i;
time_change=1; //time have changed
i=(flash>>1)&0x03;
if(flash&0x01)
{
dsbuf[i]++;
if((dsbuf[i]&0x0f)>=0x0a){dsbuf[i]&=0xf0;}
}
else
{
dsbuf[i]+=0x10;
if(dsbuf[i]>=0xa0){dsbuf[i]&=0x0f;}
}
if(flash&0x08)
{
hour=dsbuf[0];
minute=dsbuf[1];
second=dsbuf[2];
if(hour>0x23){hour=dsbuf[0]=0x00;}
if(minute>0x59){minute=dsbuf[1]=0x00;}
if(second>0x59){second=dsbuf[2]=0x00;}
}
else
{
year=dsbuf[0];
month=dsbuf[1];
day=dsbuf[2];
week=(dsbuf[3]>>4)&0x0f;
if(month>0x12){month=dsbuf[1]=0x01;}
if(month==0x00){month=dsbuf[1]=0x01;}
if(day>0x31){day=dsbuf[2]=0x01;}
if(day==0x00){day=dsbuf[2]=0x01;}
if((month==0x04)|(month==0x06)|(month==0x09)|(month==0x11))
{if(day>0x30){day=dsbuf[2]=0x01;}}
if(month==0x02)
{
if(year&0x03){if(day>0x28){day=dsbuf[2]=0x01;}}
else{if(day>0x29){day=dsbuf[2]=0x01;}}
}
if(week>0x07){week=0x01;dsbuf[3]=0x10|(dsbuf[3]&0x0f);}
if(week==0x00){week=0x01;dsbuf[3]=0x10|(dsbuf[3]&0x0f);}
}
}
//************************
//control key for STA=0
//************************
void key_control(void)
{
unsigned char i;
if(key.halfkey[1]&0x0f)
{
i=ds1302_read(adr_jdqsta);
if(key.b.kk0)
{
if(i&0x01){i&=0xfe;}
else{i|=0x01;}
i&=0xef;
}
if(key.b.kk1)
{
if(i&0x02){i&=0xfd;}
else{i|=0x02;}
i&=0xdf;
}
if(key.b.kk2)
{
if(i&0x04){i&=0xfb;}
else{i|=0x04;}
i&=0xbf;
}
if(key.b.kk3)
{
if(i&0x08){i&=0xf7;}
else{i|=0x08;}
i&=0x7f;
}
ds1302_write(ds1302_control,0x00); //close write protect
ds1302_write(adr_jdqsta,i); //jdq indect control
ds1302_write(ds1302_control,0x80); //open write protect
}
if(key.halfkey[0]&0xf0)
{
if(key.b.lk0) //if keytimer>=1s,then set time
{
timedelay0++;
if(timedelay0==0xfa)
{
time_change=0; //time change reclear
flash=0x00;
STA=0X03;
}
}
else{timedelay0=0x00;}
if(key.b.lk1) //if keytimer>=1s,then set time
{
timedelay1++;
if(timedelay1==0xfa)
{
ANALOGUP=1; //
voice(0xa1);
password_buf[0]=0xaa;
password_buf[1]=0xaa;
password_buf[2]=0xaa;
password_buf[3]=0xaa;
password_buf[4]=0xaa;
password_buf[5]=0xaa;
password_buf[6]=0xaa;
password_buf[7]=0x00;
Tel_num_change=0;
STA=0X04;
}
}
else{timedelay1=0x00;}
if(key.b.lk2) //if keytimer>=1s,then set time
{
timedelay2++;
if(timedelay2==0xfa)
{
ANALOGUP=1; //
voice(0xa1);
password_buf[0]=0xaa;
password_buf[1]=0xaa;
password_buf[2]=0xaa;
password_buf[3]=0xaa;
password_buf[4]=0xaa;
password_buf[5]=0xaa;
password_buf[6]=0xaa;
password_buf[7]=0x00;
Tel_num_change=0;
STA=0X04;
}
}
else{timedelay2=0x00;}
if(key.b.lk3) //if keytimer>=1s,then reset all data
{
timedelay3++;
if(timedelay3==0xfa)
{
dsbuf[0]=0xff;
dsbuf[1]=0xff;
dsbuf[2]=0xff;
dsbuf[3]=0xf0;
dot=0x00;
STA=0X02;
}
}
else{timedelay3=0x00;}
}
i=ds1302_read(adr_jdqsta);
dsbuf[3]=(dsbuf[3]&0xf0)|(i&0x0f);
i&=0x0f;
PORTB=(LED4[i])|(PORTB&0x0f);
}
//************************
//2ms Timer
//************************
void Time(void)
{
while(!TMR0IF); //2mS out?
TMR0=0x07; //249*8+6=1998
asm("clrwdt");
while(TMR0IF==1) //clear TMR0IF
{TMR0IF=0;}
}
//******************
//set when power up
//******************
void Initial(void)
{
if(POR==0)
{
PORTA=0x00;
PORTB=0x00;
PORTC=0x80;
password1_buf[0]=0xaa; //reload
password1_buf[1]=0xaa;
password1_buf[2]=0xaa;
password1_buf[3]=0xaa;
password1_buf[4]=0xaa;
password1_buf[5]=0xaa;
password1_buf[6]=0xaa;
password_buf[0]=0xaa; //reload
password_buf[1]=0xaa;
password_buf[2]=0xaa;
password_buf[3]=0xaa;
password_buf[4]=0xaa;
password_buf[5]=0xaa;
password_buf[6]=0xaa;
password_buf[7]=0x00;
}
while(POR==0){POR=1;}
}
//***************************
//reset special function registers
//***************************
void SFRSET(void)
{
TRISA=0x13; //
TRISB=0x01;
TRISC=0x0F; //
PIE1=0x00;
ADCON1=0x06; //shut down all AD
PCLATH=0x00;
OPTION=0xc2; //timer0,RBPU=1,Interrupt on rising edge of RB0/INT pin
INTE=1; //enable INT
PEIE=1; //enable peie
GIE=1;
T2CON=0X25; //timer2 /(5*4)
PIR1=0x00;
ADCON0=0x00;
TMR0=0x06; //2mS Timer 250*8
STA=0X00;
STA1=0X00;
STA2=0X00;
}
//****************************
//reset system
//****************************
void system_reset(void)
{
ds1302_write(ds1302_control,0x00); //close write protect
ds1302_write(ds1302_charger,0xa9); //trickle charger
ds1302_write(adr_ringtimes,0x04); //ring times,4 times
ds1302_write(adr_jdqsta,0x00); //jdq state,all close
ds1302_write(adr_password,0x31); //password0,31
ds1302_write(adr_password+2,0x5f); //password1,5#
ds1302_write(adr_password+4,0xaa); //password2,aa
ds1302_write(adr_password+6,0xaa); //password3,aa
ds1302_write(adr_password+8,0xaa); //password4,aa
ds1302_write(adr_password+10,0xaa); //password5,aa
ds1302_write(adr_password+12,0xaa); //password6,aa
ds1302_write(ds1302_control,0x80); //open write protect
}
//****************************
//Display program
//****************************
void Display(void)
{
unsigned char i,j,k;
k=Bit_Select>>1;
j=dsbuf[k];
if(Bit_Select^0x07) //
{if(Bit_Select&0x01) //btfsc Bit_Select,0
{j&=0X0f;} //get low 4 bit
else{j=j>>4&0X0f;} //get high 4 bit
k=LED7[j];
} //get ledcode
else{k=j&0x0f;} //get ledscode
if(flash&0x80)
{
if(Bit_Select==(flash&0x07))
{if(inc4ms&0x80){k=0x00;}}
}
if(dot<<Bit_Select&0x80){k|=0x02;}
j=bitcode[Bit_Select&0x07];
Bit_Select++;
if(Bit_Select==0x08){Bit_Select=0x00;}
RCK595=0; //put out 2*8 bit data
i=0x08;
do{
SCK595=0;
SEC595=0;
if(j&0x01)SEC595=1; //put out the lowest bit of ledbit
j>>=1;
SCK595=1;
}while(--i);
i=0x08;
do{
SCK595=0;
SEC595=0;
if(k&0x01)SEC595=1; //put out the lowest bit of ledcode
k>>=1;
SCK595=1;
}while(--i);
RCK595=1;
}
//*****************************
//Keyscan program
//*****************************
void KEYScan(void)
{
unsigned char i,j,k;
//blow is key scan
HANG1=0; //
i=0x05;while(i--){;} //8+3*(i-1)=delay 20uS
k=(PORTC^0X0f)&0x0f;
HANG1=1;
k=k|(key.halfkey[0]&0xf0);
//blow is cut the key vibration
for(i=0;i<4;i++)
{
kcap[i]+=(kcap[i]<<1)+(kcap[i]<<2);
if(k&0x01){kcap[i]+=0x10;}
kcap[i]>>=3;
k>>=1;
if(kcap[i]>=6){k|=0x80;} //set
else{k&=0x7f;} //clear
}
j=k;
k=(k<<4)|(k>>4); //==swap k
//blow is border test,before border=Key
key.halfkey[0]=(((j^k)&k)&0x0f)|(j&0xf0);
key.halfkey[1]=((j^k)&j)&0x0f;
}
//*****************************
//
//*****************************
void jdq_indect(void)
{
if(Tel_num_change)
{
unsigned char i;
i=ds1302_read(adr_jdqsta);
Tel_num_change=0;
voice(0x7c);
if(Tel_num==0x01)
{
jdq_delay=1;
if(i&0x01){i&=0xfe;voice(0x58);}
else{i|=0x01;voice(0x40);}
}
if(Tel_num==0x02)
{
jdq_delay=1;
if(i&0x02){i&=0xfd;voice(0x58);}
else{i|=0x02;voice(0x40);}
}
if(Tel_num==0x03)
{
jdq_delay=1;
if(i&0x04){i&=0xfb;voice(0x58);}
else{i|=0x04;voice(0x40);}
}
if(Tel_num==0x04)
{
jdq_delay=1;
if(i&0x08){i&=0xf7;voice(0x58);}
else{i|=0x08;voice(0x40);}
}
if(Tel_num==0x0e)
{
VOICE=0;
voice(0x60);
jdq_delay=0;
INTE=1;
STA=0x01;
}
if(jdq_delay)
{
ds1302_write(ds1302_control,0x00); //close write protect
ds1302_write(adr_jdqsta,i); //jdq indect control
ds1302_write(ds1302_control,0x80); //open write protect
i&=0x0f;
PORTB=(LED4[i])|(PORTB&0x0f);
}
dsbuf[0]=dsbuf[2]=0xee;
dsbuf[1]=Tel_num;
dsbuf[3]=(dsbuf[3]&0x0f)|0xa0;
Tel_num=0x00;
}
if(jdq_delay) //wait for 1S
{
timedelay++;
if(timedelay==0xfa)
{
jdq_delay=0;
INTE=1;
}
else{INTE=0;}
}
else
{
INTE=1;
timedelay=0x00;
}
}
//*****************************
//
//*****************************
void jdq_check(void)
{
if(Tel_num_change)
{
unsigned char i;
Tel_num_change=0;
voice(0x7c);
i=ds1302_read(adr_jdqsta);
dsbuf[0]=dsbuf[2]=0xee;
dsbuf[1]=0xff;
dsbuf[3]=(dsbuf[3]&0x0f)|0xa0;
if(Tel_num==0x01)
{
dsbuf[1]=Tel_num;
if(i&0x01){voice(0x40);}
else{voice(0x58);}
}
if(Tel_num==0x02)
{
dsbuf[1]=Tel_num;
if(i&0x02){voice(0x40);}
else{voice(0x58);}
}
if(Tel_num==0x03)
{
dsbuf[1]=Tel_num;
if(i&0x04){voice(0x40);}
else{voice(0x58);}
}
if(Tel_num==0x04)
{
dsbuf[1]=Tel_num;
if(i&0x08){voice(0x40);}
else{voice(0x58);}
}
if(Tel_num==0x05)
{
dsbuf[1]=Tel_num;
if(VOICE){VOICE=0;voice(0x58);}
else{VOICE=1;voice(0x40);}
}
if(Tel_num==0x0e)
{
VOICE=0;
voice(0x60);
STA=0x01;
}
Tel_num=0x00;
}
}
//*****************************
//
//*****************************
void reset_password(void)
{
if(Tel_num_change)
{
unsigned char i,j;
Tel_num_change=0;
i=Tel_num&0x0f;
j=0xf0;
if(password_buf[7]&0x01)
{;}
else
{
i=(i>>4)|(i<<4);
j=(j<<4)|(j>>4);
}
if(check_bit0)
{
password_buf[(password_buf[7]>>1)&0x07]&=j;
password_buf[(password_buf[7]>>1)&0x07]|=i;
}
else
{
password1_buf[(password_buf[7]>>1)&0x07]&=j;
password1_buf[(password_buf[7]>>1)&0x07]|=i;
}
password_buf[7]++;
if(password_buf[7]==0x0e)
{
password_buf[7]=0x0d;
}
if(Tel_num==0x0f) //Tel_num==#?
{
Tel_num=0x00;
password_buf[7]=0x00;
if(check_bit0){check_bit1=1;}
check_bit0=1;
voice(0x40);
}
if(check_bit1)
{
check_bit0=0;
check_bit1=0;
for(i=0;i<7;i++)
{
if(password_buf[i]==password1_buf[i])
{;}
else
{ password_times|=0x80;}
}
if(password_times&0x80)
{
password_times&=0x7f;
voice(0x7c);
}
else
{
ds1302_write(ds1302_control,0x00); //close write protect
ds1302_write(adr_password,password_buf[0]); //password0
ds1302_write(adr_password+2,password_buf[1]); //password1
ds1302_write(adr_password+4,password_buf[2]); //password2
ds1302_write(adr_password+6,password_buf[3]); //password3
ds1302_write(adr_password+8,password_buf[4]); //password4
ds1302_write(adr_password+10,password_buf[5]); //password5
ds1302_write(adr_password+12,password_buf[6]); //password6
ds1302_write(ds1302_control,0x80); //open write protect
voice(0x60);
STA=0X01;
}
password1_buf[0]=0xaa; //reload
password1_buf[1]=0xaa;
password1_buf[2]=0xaa;
password1_buf[3]=0xaa;
password1_buf[4]=0xaa;
password1_buf[5]=0xaa;
password1_buf[6]=0xaa;
password_buf[0]=0xaa; //reload
password_buf[1]=0xaa;
password_buf[2]=0xaa;
password_buf[3]=0xaa;
password_buf[4]=0xaa;
password_buf[5]=0xaa;
password_buf[6]=0xaa;
password_buf[7]=0x00;
}
if(Tel_num==0x0e)
{
check_bit0=0;
check_bit1=0;
password_times&=0x7f;
password1_buf[0]=0xaa; //reload
password1_buf[1]=0xaa;
password1_buf[2]=0xaa;
password1_buf[3]=0xaa;
password1_buf[4]=0xaa;
password1_buf[5]=0xaa;
password1_buf[6]=0xaa;
password_buf[0]=0xaa; //reload
password_buf[1]=0xaa;
password_buf[2]=0xaa;
password_buf[3]=0xaa;
password_buf[4]=0xaa;
password_buf[5]=0xaa;
password_buf[6]=0xaa;
password_buf[7]=0x00;
voice(0x60);
STA=0x01;
}
if(check_bit0)
{
if((password_buf[7]&0x0f)>0x06)
{
dsbuf[0]=password_buf[3];
dsbuf[1]=password_buf[4];
dsbuf[2]=password_buf[5];
dsbuf[3]=(password_buf[6]&0xf0)|(dsbuf[3]&0x0f);
}
else
{
dsbuf[0]=password_buf[0];
dsbuf[1]=password_buf[1];
dsbuf[2]=password_buf[2];
dsbuf[3]=0x20|(dsbuf[3]&0x0f);
}
}
else
{
if((password_buf[7]&0x0f)>0x06)
{
dsbuf[0]=password1_buf[3];
dsbuf[1]=password1_buf[4];
dsbuf[2]=password1_buf[5];
dsbuf[3]=(password1_buf[6]&0xf0)|(dsbuf[3]&0x0f);
}
else
{
dsbuf[0]=password1_buf[0];
dsbuf[1]=password1_buf[1];
dsbuf[2]=password1_buf[2];
dsbuf[3]=0x10|(dsbuf[3]&0x0f);
}
}
}
}
//*****************************
//
//*****************************
void reset_ringtimes(void)
{
if(Tel_num_change)
{
Tel_num_change=0;
dsbuf[0]=0xee;
dsbuf[1]=0xff;
dsbuf[2]=0xee;
dsbuf[3]=0xa0|(dsbuf[3]&0x0f);
if(Tel_num==0x0e)
{
voice(0x60);
STA=0x01;
}
else if(Tel_num==0x00)
{
voice(0x7c);
}
else if(Tel_num==0x0f)
{
voice(0x7c);
}
else
{
dsbuf[1]=Tel_num;
voice(0x40);
ds1302_write(ds1302_control,0x00); //close write protect
ds1302_write(adr_ringtimes,Tel_num);//ring times,n times
ds1302_write(ds1302_control,0x80); //open write protect
}
Tel_num=0x00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -