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

📄 tele_control.lst

📁 基于PIC单片机的智能电话控制系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
   523:                         calling_bit3=0;

   524:                 }

   525:         }

   526:         else{calling_times1=0x0000;}

   527:         if(calling_bit4)

   528:         {

   529:                 if(calling_t3>=ds1302_read(adr_ringtimes))

   530:                 {

   531:                         ANALOGUP=1;                     //

   532:                         voice(0xa1);

   533:                         password_buf[0]=0xaa;

   534:                         password_buf[1]=0xaa;

   535:                         password_buf[2]=0xaa;

   536:                         password_buf[3]=0xaa;

   537:                         password_buf[4]=0xaa;

   538:                         password_buf[5]=0xaa;

   539:                         password_buf[6]=0xaa;

   540:                         password_buf[7]=0x00;

   541:                         calling_bit0=0;

   542:                         calling_bit1=0;

   543:                         calling_bit2=0;

   544:                         calling_bit3=0;

   545:                         calling_bit4=0;

   546:                         calling_times1=0x0000;

   547:                         calling_times=0x0000;

   548:                         calling_t1=0x00;

   549:                         calling_t2=0x00;

   550:                         calling_t3=0x00;

   551:                         Tel_num_change=0;

   552:                         STA=0x04;

   553:                 }

   554: 

   555:         }

   556: }

   557: //***************************

   558: void ds1302_read_time(void)

   559: {

   560:         year=ds1302_read(ds1302_year);  //year

   561:         month=ds1302_read(ds1302_month);//month

   562:         day=ds1302_read(ds1302_day);    //day

   563:         week=ds1302_read(ds1302_week);  //week

   564:         hour=ds1302_read(ds1302_hour);  //hout

   565:         minute=ds1302_read(ds1302_min); //minute

   566:         second=ds1302_read(ds1302_sec); //second

   567: }

   568: void ds1302_write_time(void)

   569: {

   570:         ds1302_write(ds1302_control,0x00);      //close write protect   

   571:         ds1302_write(ds1302_sec,0x80);          //stop the ds1302 clock

   572:         ds1302_write(ds1302_charger,0xa9);      //trickle charger

   573:         ds1302_write(ds1302_year,year);         //year

   574:         ds1302_write(ds1302_month,month);       //month

   575:         ds1302_write(ds1302_day,day);           //day

   576:         ds1302_write(ds1302_week,week);         //week

   577:         ds1302_write(ds1302_hour,hour);         //hour

   578:         ds1302_write(ds1302_min,minute);        //munite

   579:         ds1302_write(ds1302_sec,second);        //second        

   580:         ds1302_write(ds1302_control,0x80);      //open write protect

   581: }

   582: //***************************

   583: //write or read ds1302 program

   584: //***************************

   585: void ds1302_write(uchar reg,uchar data) //write ds1302

   586: {

   587:         unsigned char i;

   588:         RST1302=0;

   589:         CLK1302=0;

   590:         RST1302=1;

   591:         for(i=8;i>0;i--)

   592:         {       

   593:                 CLK1302=0;

   594:                 asm("nop");

   595:                 if(reg&0x01){DAT1302=1;}

   596:                 else{DAT1302=0;}

   597:                 CLK1302=1;

   598:                 reg>>=1;

   599:         }

   600:         for(i=8;i>0;i--)

   601:         {

   602:                 CLK1302=0;

   603:                 if(data&0x01){DAT1302=1;}

   604:                 else{DAT1302=0;}

   605:                 CLK1302=1;

   606:                 data>>=1;

   607:         }

   608:         CLK1302=0;

   609:         RST1302=0;

   610: }

   611: uchar ds1302_read(uchar reg)//read ds1302

   612: {

   613:         unsigned char data=0x00;

   614:         unsigned char i;

   615:         reg+=1;                 //read flag

   616:         RST1302=0;

   617:         CLK1302=0;

   618:         RST1302=1;

   619:         for(i=8;i>0;i--)

   620:         {

   621:                 CLK1302=0;

   622:                 if(reg&0x01){DAT1302=1;}

   623:                 else{DAT1302=0;}

   624:                 CLK1302=1;

   625:                 reg>>=1;

   626:         }

   627:         TRISB|=0x04;

   628:         for(i=8;i>0;i--)

   629:         {

   630:                 CLK1302=0;

   631:                 data>>=1;

   632:                 if(DAT1302){data|=0x80;}

   633:                 else{;}

   634:                 CLK1302=1;

   635:         }

   636:         TRISB&=~0x04;

   637:         CLK1302=0;

   638:         RST1302=0;

   639:         return(data);

   640: }

   641: //**************************************************

   642: //change time progarm

   643: //**************************************************

   644: void change_time(void)

   645: {

   646:         flash&=0x0f;

   647:         if(flash&0x08)

   648:         {

   649:                 dsbuf[0]=hour;

   650:                 dsbuf[1]=minute;

   651:                 dsbuf[2]=second;

   652:                 dsbuf[3]=0xa1;

   653:                 dot=0x50;

   654:         }

   655:         else

   656:         {

   657:                 dsbuf[0]=year;

   658:                 dsbuf[1]=month;

   659:                 dsbuf[2]=day;

   660:                 dsbuf[3]=((week<<4)&0xf0)|0x02;

   661:                 dot=0x54;

   662:         }

   663:         if(key.b.k1)

   664:         {       

   665:                 flash++;

   666:                 if(flash>0x0d)flash=0x00;

   667:                 if(flash==0x07)flash++;

   668:         }

   669:         if(key.b.k0)

   670:         {

   671:                 flash--;

   672:                 if(flash&0xf0)flash=0x0d;

   673:                 if(flash==0x07)flash--;

   674:         }

   675:         if(key.b.k2){timechange();}

   676:         flash|=0x80;

   677:         if(key.b.kk3)

   678:         {

   679:                 flash=STA=0x00;

   680:                 if(time_change==1)      //time change?

   681:                 {

   682:                         time_change=0;

   683:                         ds1302_write_time();

   684:                 }

   685:         }

   686: }

   687: //**************************************************

   688: //timechange is change,call one add one.

   689: //**************************************************

   690: void timechange(void)

   691: {

   692:         unsigned char i;

   693:         time_change=1;          //time have changed

   694:         i=(flash>>1)&0x03;

   695:         if(flash&0x01)

   696:         {

   697:                 dsbuf[i]++;

   698:                 if((dsbuf[i]&0x0f)>=0x0a){dsbuf[i]&=0xf0;}

   699:         }

   700:         else

   701:         {

   702:                 dsbuf[i]+=0x10;

   703:                 if(dsbuf[i]>=0xa0){dsbuf[i]&=0x0f;}

   704:         }

   705:         if(flash&0x08)

   706:         {

   707:                 hour=dsbuf[0];

   708:                 minute=dsbuf[1];

   709:                 second=dsbuf[2];

   710:                 if(hour>0x23){hour=dsbuf[0]=0x00;}

   711:                 if(minute>0x59){minute=dsbuf[1]=0x00;}

   712:                 if(second>0x59){second=dsbuf[2]=0x00;}

   713:         }

   714:         else

   715:         {

   716:                 year=dsbuf[0];

   717:                 month=dsbuf[1];

   718:                 day=dsbuf[2];

   719:                 week=(dsbuf[3]>>4)&0x0f;

   720:                 if(month>0x12){month=dsbuf[1]=0x01;}

   721:                 if(month==0x00){month=dsbuf[1]=0x01;}

   722:                 if(day>0x31){day=dsbuf[2]=0x01;}

   723:                 if(day==0x00){day=dsbuf[2]=0x01;}

   724:                 if((month==0x04)|(month==0x06)|(month==0x09)|(month==0x11))

   725:                 {if(day>0x30){day=dsbuf[2]=0x01;}}

   726:                 if(month==0x02)

   727:                 {

   728:                         if(year&0x03){if(day>0x28){day=dsbuf[2]=0x01;}}

   729:                         else{if(day>0x29){day=dsbuf[2]=0x01;}}

   730:                 }

   731:                 if(week>0x07){week=0x01;dsbuf[3]=0x10|(dsbuf[3]&0x0f);}

   732:                 if(week==0x00){week=0x01;dsbuf[3]=0x10|(dsbuf[3]&0x0f);}

   733:         }

   734: }

   735: //************************

   736: //control key for STA=0

   737: //************************

   738: void key_control(void)

   739: {

   740:         unsigned char i;

   741:         if(key.halfkey[1]&0x0f)

   742:         {

   743:                 i=ds1302_read(adr_jdqsta);

   744:                 if(key.b.kk0)

   745:                 {

   746:                         if(i&0x01){i&=0xfe;}

   747:                         else{i|=0x01;}

   748:                         i&=0xef;

   749:                 }

   750:                 if(key.b.kk1)

   751:                 {

   752:                         if(i&0x02){i&=0xfd;}

   753:                         else{i|=0x02;}

   754:                         i&=0xdf;

   755:                 }

   756:                 if(key.b.kk2)

   757:                 {

   758:                         if(i&0x04){i&=0xfb;}

   759:                         else{i|=0x04;}

   760:                         i&=0xbf;

   761:                 }

   762:                 if(key.b.kk3)

   763:                 {

   764:                         if(i&0x08){i&=0xf7;}

   765:                         else{i|=0x08;}

   766:                         i&=0x7f;

   767:                 }

   768:                 ds1302_write(ds1302_control,0x00);      //close write protect

   769:                 ds1302_write(adr_jdqsta,i);                     //jdq indect control

   770:                 ds1302_write(ds1302_control,0x80);      //open write protect

   771:         }

   772:         if(key.halfkey[0]&0xf0)

   773:         {

   774:                 if(key.b.lk0)                   //if keytimer>=1s,then set time

   775:                 {

   776:                         timedelay0++;

   777:                         if(timedelay0==0xfa)

   778:                         {

   779:                                 time_change=0;  //time change reclear

   780:                                 flash=0x00;

   781:                                 STA=0X03;

   782:                         }

   783:                 }

⌨️ 快捷键说明

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