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

📄 clock.lst

📁 门禁控制器源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 172   1              else
 173   1                      SDA=1;                                  // 发非应答信号
 174   1      
 175   1              _Nop();                                         // 等待
 176   1              _Nop();
 177   1              _Nop();      
 178   1              SCL=1;                                          // SCL时钟上跳
 179   1              Some_NOP;                                       // SCL时钟高电平最小4.7us
C51 COMPILER V7.07   CLOCK                                                                 09/14/2005 15:20:46 PAGE 4   

 180   1              SCL=0;                                          // 钳住I2C总线,继续接收下一个字节
 181   1              _Nop();                                         // 等待
 182   1              _Nop();    
 183   1      }
 184          
 185          //
 186          // 向有子地址器件8563时钟芯片发送多字节数据函数
 187          // 函数原型: bit  ISendStr8563(uchar sla,uchar suba,ucahr *s,uchar no);  
 188          // 功能: 
 189          //              从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 190          //              地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 191          //              如果返回1表示操作成功,否则操作有误。
 192          // 注意:
 193          //              使用前必须已结束总线。
 194          //
 195          bit ISendStr8563(uchar sla,uchar suba,uchar *s,uchar no)
 196          {
 197   1              idata uchar i;
 198   1      
 199   1              Start_I2c8563();                        // 启动I2C总线
 200   1              SendByte8563(sla&0xfe);         // 发送主地址
 201   1              if(ack==FALSE)
 202   1                      return ERROR;                   // 发送数据错误
 203   1      
 204   1              SendByte8563(suba);                     // 发送子地址
 205   1          if(ack==FALSE)
 206   1                      return ERROR;                   // 发送数据错误
 207   1      
 208   1              for(i=0;i<no;i++)
 209   1          {   
 210   2              SendByte8563(s[i]);             // 发送一个字节
 211   2              if(ack==FALSE)
 212   2                              return ERROR;           // 发送数据错误
 213   2          } 
 214   1              Stop_I2c8563();                         // 停止I2C总线
 215   1      
 216   1              return OK;                                      // 成功返回
 217   1      }
 218          
 219          //
 220          // 子地址器件8563时钟芯片读取多字节数据函数               
 221          // 函数原型: bit  IRcvStr8563(uchar sla,uchar suba,ucahr *s,uchar no);  
 222          // 功能:
 223          //              从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 224          //              地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 225          //              如果返回1表示操作成功,否则操作有误。
 226          // 注意?
 227          //              使用前必须已结束总线。
 228          //
 229          bit IRcvStr8563(uchar sla,uchar suba,uchar *s,uchar no)
 230          {
 231   1              idata uchar i;
 232   1      
 233   1              Start_I2c8563();                        // 启动8563时钟芯片I2C总线
 234   1              SendByte8563(sla&0xfe);         // 向8563发送主地址
 235   1              if(ack==FALSE)
 236   1                      return ERROR;                   // 发送数据错误
 237   1              SendByte8563(suba);                     // 向8563发送子地址
 238   1              if(ack==FALSE)
 239   1                      return ERROR;                   // 发送数据错误
 240   1              
 241   1              Start_I2c8563();                        // 启动8563时钟芯片I2C总线
C51 COMPILER V7.07   CLOCK                                                                 09/14/2005 15:20:46 PAGE 5   

 242   1              SendByte8563(sla|0x01);         // 向8563发送主地址
 243   1              if(ack==FALSE)
 244   1                      return ERROR;                   // 发送数据错误
 245   1              
 246   1              for(i=0;i<no-1;i++)
 247   1              {   
 248   2                      s[i]=RcvByte8563();             // 读8563一个字节
 249   2                      Ack_I2c8563(0);                 // 发送I2C应答位
 250   2              } 
 251   1              s[i]=RcvByte8563();                     // 读8563一个字节
 252   1              Ack_I2c8563(1);                         // 发送I2C非应答位
 253   1              Stop_I2c8563();                         // 停止I2C总线
 254   1              return OK;                                      // 成功返回
 255   1      }
 256          
 257          
 258          ///////////////////////////////////////////////////////////////////////////////
 259          // 读取时间
 260          ///////////////////////////////////////////////////////////////////////////////
 261          void read_time()  
 262          {
 263   1              idata uchar i;
 264   1      
 265   1              DISABLE;
 266   1              IRcvStr8563(0xa2,0x02,time,0x07);               // 读时间
 267   1              ENABLE;
 268   1      
 269   1              for(i=0;i<7;i++)
 270   1              {
 271   2                      switch(i)                                                               // 时间格式化
 272   2                      {
 273   3                              case 0:time[i]=time[i]&0x7f;break;
 274   3                              case 1:time[i]=time[i]&0x7f;break;
 275   3                              case 2:time[i]=time[i]&0x3f;break;
 276   3                              case 3:time[i]=time[i]&0x3f;break;
 277   3                              case 4:time[i]=time[i]&0x07;break;
 278   3                              case 5:time[i]=time[i]&0x9f;break;
 279   3                              case 6:time[i]=time[i]&0xff;break;
 280   3                              default:break;
 281   3                      }
 282   2              }
 283   1      
 284   1              if(time[5]&0x80)                                        // 世纪
 285   1              {
 286   2                      cur_time[0]='1';cur_time[1]='9';
 287   2              }
 288   1              else
 289   1              {
 290   2                      cur_time[0]='2';cur_time[1]='0';
 291   2              }
 292   1      
 293   1              cur_time[2]=((time[6]>>4)&0x0f)+0x30;   // 年
 294   1              cur_time[3]=(time[6]&0x0f)+0x30;
 295   1              cur_time[4]=((time[5]>>4)&0x01)+0x30;   // 月
 296   1              cur_time[5]=(time[5]&0x0f)+0x30;                
 297   1              cur_time[6]=((time[3]>>4)&0x03)+0x30;   // 日
 298   1              cur_time[7]=(time[3]&0x0f)+0x30;
 299   1              cur_time[8]=((time[2]>>4)&0x03)+0x30;   // 时
 300   1              cur_time[9]=(time[2]&0x0f)+0x30;                
 301   1              cur_time[10]=((time[1]>>4)&0x07)+0x30;  // 分
 302   1              cur_time[11]=(time[1]&0x0f)+0x30;
 303   1              cur_time[12]=((time[0]>>4)&0x07)+0x30;  // 秒
C51 COMPILER V7.07   CLOCK                                                                 09/14/2005 15:20:46 PAGE 6   

 304   1              cur_time[13]=(time[0]&0x0f)+0x30;
 305   1              cur_time[14]=(time[4]&0x07)+0x30;
 306   1      }
 307          
 308          ///////////////////////////////////////////////////////////////////////////////
 309          // 设置时间
 310          ///////////////////////////////////////////////////////////////////////////////
 311          void set_time()
 312          {
 313   1              time[0]=0x08;
 314   1              time[1]=0x00;
 315   1              time[2]=((cur_time[12]-0x30)<<4)|((cur_time[13]-0x30)&0x0f);
 316   1              time[3]=((cur_time[10]-0x30)<<4)|((cur_time[11]-0x30)&0x0f);
 317   1              time[4]=((cur_time[8]-0x30)<<4)|((cur_time[9]-0x30)&0x0f);
 318   1              time[5]=((cur_time[6]-0x30)<<4)|((cur_time[7]-0x30)&0x0f);
 319   1              time[6]=(cur_time[14]-0x30)&0x07;
 320   1              time[7]=((cur_time[4]-0x30)<<4)|((cur_time[5]-0x30)&0x0f);
 321   1              time[8]=((cur_time[2]-0x30)<<4)|((cur_time[3]-0x30)&0x0f);
 322   1      
 323   1              DISABLE;
 324   1              ISendStr8563(0xa2,0x00,time,0x09);
 325   1              ENABLE;
 326   1      }
 327          
 328          
 329          
 330          
 331          
 332          
 333          
 334          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    918    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      12
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----       6
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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