date.c
上传用户:shyuanyi
上传日期:2008-05-24
资源大小:69k
文件大小:5k
源码类别:

RFID编程

开发平台:

C/C++

  1. #include "my_head.h"
  2. #include "DS_addr.h"
  3. /*************************************/
  4. #define   SCL    P2_2
  5. #define   SDA    P2_1
  6. #define   RST    P2_0
  7. //-------------------------
  8. #define  CLOCK_FLAG    0
  9. #define  RAM_FLAG      1
  10. /**************************************/
  11. void  I_send(BYTE I_data)
  12.  {
  13.   BYTE  i;
  14.   for(i=0;i<8;i++ )
  15.     {
  16.      SCL = 0;
  17.      SDA = (bit)(I_data & 0x1);
  18.      I_data>>=1;do_nop(1);
  19.      SCL = 1; do_nop(1);
  20.     }
  21.  }
  22. BYTE I_receive( void )
  23.  {
  24.   BYTE  i,I_data;
  25.   for(I_data=i=0;i<8;i++) 
  26.     {
  27.      SCL = 0;do_nop(1);
  28.      I_data >>= 1;
  29.  if(SDA==1)I_data|=0X80;
  30.      SCL = 1; do_nop(1);
  31.     }
  32.   return(I_data);
  33.  }
  34. BYTE ReadByte(BYTE addr,bit Clock_Ram)  //Clock_Ram:0-clock,1-ram.
  35.  {
  36.    BYTE   i;
  37.    SCL    = 0;    //must
  38.    addr <<= 1;
  39.    addr  &= ~0xC1;
  40.    addr  |= 0x81;
  41.    if(Clock_Ram)addr |= 0x40;
  42.    RST    = 1;
  43.    I_send(addr);
  44.    i=I_receive();
  45.    RST    = 0;
  46.    return(i);
  47.  }
  48. void   WriteByte(BYTE addr,BYTE Dat,bit Clock_Ram)//Clock_Ram:0-clock,1-ram.
  49.  {
  50.    SCL    = 0;    //must
  51.    addr <<= 1;
  52.    addr  &= ~0xC1;
  53.    addr  |= 0x80;
  54.    if(Clock_Ram)addr |= 0x40;
  55.    RST    = 1;
  56.    I_send(addr);
  57.    I_send(Dat);
  58.    RST = 0;
  59.  }
  60. //ClockData[7],时钟数据,格式:YY MM DD HH MM SS WW
  61. void ReadClock(unsigned char ClockData[])
  62. {
  63.    WriteByte(CONTRAL_ADDR,0X00,CLOCK_FLAG);//WP = 0
  64.    ClockData[0]=ReadByte(YEAR_ADDR,CLOCK_FLAG);
  65.    ClockData[1]=ReadByte(MOM_ADDR,CLOCK_FLAG);
  66.    ClockData[2]=ReadByte(DATE_ADDR,CLOCK_FLAG);
  67.    ClockData[3]=ReadByte(HOUR_ADDR,CLOCK_FLAG);
  68.    ClockData[4]=ReadByte(MIN_ADDR,CLOCK_FLAG);
  69.    ClockData[5]=ReadByte(SEC_ADDR,CLOCK_FLAG);
  70.    ClockData[6]=ReadByte(DATE_ADDR,CLOCK_FLAG);
  71.    WriteByte(CONTRAL_ADDR,0X80,CLOCK_FLAG); //WP = 1
  72. }
  73. void  Do_WriteClock(BYTE  buf[7])
  74.  {
  75.    BYTE  i;
  76.    WriteByte(CONTRAL_ADDR,0X00,CLOCK_FLAG); //WP = 0
  77.    for(i=0;i<7;i++)
  78.    {
  79.      WriteByte(i,buf[i],CLOCK_FLAG);
  80.    }
  81.    WriteByte(CONTRAL_ADDR,0X80,CLOCK_FLAG); //WP = 1
  82.  }
  83. void  Do_ReadClock(BYTE  buf[7])
  84.  {
  85.    BYTE  i;
  86.    WriteByte(CONTRAL_ADDR,0X00,CLOCK_FLAG); //WP = 0
  87.    for(i=0;i<7;i++)
  88.    {
  89.      buf[i]=ReadByte(i,CLOCK_FLAG);
  90.    }
  91.    WriteByte(CONTRAL_ADDR,0X80,CLOCK_FLAG); //WP = 1
  92.  }
  93. void  Init_DateIC(void) //DS1302
  94.  {
  95.   BYTE  i;//,buf[7] = {0x00,0x45,0x23,0x16,0x06,0x03,0x04};
  96.   SCL =  SDA =1;
  97.   RST    = 0;     //P3.0 = 0;
  98.   //I2CON  = 0x44;
  99.   //I2SCLH = 0x10;
  100.   //I2SCLH = 0x10;
  101.   //Do_WriteClock(buf);  //this is a test!
  102.   
  103.   WriteByte(CONTRAL_ADDR,0X00,CLOCK_FLAG); //WP = 0
  104.   i=ReadByte(SEC_ADDR,CLOCK_FLAG);
  105.   if(i>0x7f)
  106.    {
  107.     WriteByte(SEC_ADDR,i&0x7F,CLOCK_FLAG);//startup clock;
  108.    }
  109.   i=ReadByte(HOUR_ADDR,CLOCK_FLAG);
  110.   if(i>0x7f)WriteByte(HOUR_ADDR,i&0X7F,CLOCK_FLAG);//set 24hour/day;
  111.   WriteByte(TRCH_ADDR,0XA5,CLOCK_FLAG);    //充电备置
  112.   WriteByte(CONTRAL_ADDR,0X80,CLOCK_FLAG); //WP = 1
  113.  }
  114. void  DisplayClock(void)
  115. {
  116.    BYTE i,buf[8];
  117.    WriteByte(CONTRAL_ADDR,0X00,CLOCK_FLAG);//WP = 0
  118.    i=ReadByte(HOUR_ADDR,CLOCK_FLAG);
  119.    buf[0] = ~D_DISPLAY[i>>4];
  120.    buf[1] = ~D_DISPLAY[i&0XF];
  121.    i=ReadByte(MIN_ADDR,CLOCK_FLAG);
  122.    buf[3] = ~D_DISPLAY[i>>4];
  123.    buf[4] = ~D_DISPLAY[i&0XF];
  124.    i=ReadByte(SEC_ADDR,CLOCK_FLAG);
  125.    buf[6] = ~D_DISPLAY[i>>4];
  126.    buf[7] = ~D_DISPLAY[i&0XF];
  127.    buf[5]=buf[2]= ~D_DISPLAY[16];
  128.    i=ReadByte(DATE_ADDR,CLOCK_FLAG);
  129.    WriteByte(CONTRAL_ADDR,0X80,CLOCK_FLAG);//WP = 1
  130.    //Send_Str(buf,10);//for test!
  131.    Display_str(buf);//Do_Led(buf[0]);
  132.    if(stOtherTableInfo.save_date != i)
  133.    {
  134.     stOtherTableInfo.save_date=i;
  135.     con_statusinfo.con_daymoney=0L;   //当天消费总金额;
  136.     con_statusinfo.con_dayrecords=0;  //当天消费记录数;
  137.    }
  138. }
  139. void  DisplayDate(void)
  140. {
  141.    BYTE i,buf[8];
  142.    WriteByte(CONTRAL_ADDR,0X00,CLOCK_FLAG);//WP = 0
  143.    i=ReadByte(YEAR_ADDR,CLOCK_FLAG);
  144.    buf[0] = ~D_DISPLAY[i>>4];
  145.    buf[1] = ~D_DISPLAY[i&0XF];
  146.    i=ReadByte(MOM_ADDR,CLOCK_FLAG);
  147.    buf[3] = ~D_DISPLAY[i>>4];
  148.    buf[4] = ~D_DISPLAY[i&0XF];
  149.    i=ReadByte(DATE_ADDR,CLOCK_FLAG);
  150.    buf[6] = ~D_DISPLAY[i>>4];
  151.    buf[7] = ~D_DISPLAY[i&0XF];
  152.    buf[5]=buf[2]= ~D_DISPLAY[16];
  153.    WriteByte(CONTRAL_ADDR,0X80,CLOCK_FLAG);//WP = 1
  154.    //Send_Str(buf,10);//for test!
  155.    Display_str(buf);//Do_Led(buf[0]);
  156. }
  157. /************************************************************
  158. void  Save_My_TestData(BYTE Data)  //this is a test!
  159.   {
  160.    static   WORD  idata  test_addr = MY_TEST_ADDR;//this is a test!
  161.    WriteByte(test_addr,Data,RAM_FLAG);
  162.    if(++test_addr>=ROM_MAXSIZE)test_addr = MY_TEST_ADDR;
  163.   }
  164. /************************************************************/