#ifndef SDA #define SDA P0_0 #define SCL P0_1 #endif extern uchar SystemError; #define uchar unsigned char #define uint unsigned int #define Byte unsigned char #define Word unsigned int #define bool bit #define true 1 #define false 0 #define SomeNOP(); _nop_();_nop_();_nop_();_nop_(); /**----------------------------------------------------------------------------- 调用方式:void I2CStart(void) ﹫2001/07/0 4 函数说明:私有函数,I2C专用 --------------------------------------------------------------------------------*/ void I2CStart(void) { EA=0; SDA=1; SCL=1; SomeNOP();//INI SDA=0; SomeNOP(); //START SCL=0; } 41 /**-------------------------------------------------------------------------------- 42 调用方式:void I2CStop(void) ﹫2001/07/0 4 43 函数说明:私有函数,I2C专用 44 ---------------------------------------------------------------------------------*/ 45 void I2CStop(void) 46 { 47 SCL=0; SDA=0; SomeNOP(); //INI 48 SCL=1; SomeNOP(); SDA=1; //STOP 49 EA=1; 50 } 51 52 /**-------------------------------------------------------------------------------- 53 调用方式:bit I2CAck(void) ﹫2001/07/0 4 54 函数说明:私有函数,I2C专用,等待从器件接收方的应答 55 ---------------------------------------------------------------------------------*/ 56 bool WaitAck(void) 57 { 58 uchar errtime=255;//因故障接收方无ACK,超时值为255。 59 SDA=1;SomeNOP(); 60 SCL=1;SomeNOP(); 61 while(SDA) {errtime--; if (!errtime) {I2CStop();SystemError=0x11;return false;}} 62 SCL=0; 63 return true; 第 1 页 文件: PCF8563T.C 2001-11-27, 18:39:20 64 } 65 66 /**-------------------------------------------------------------------------------- 67 调用方式:void SendAck(void) ﹫2001/07/0 4 68 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。 69 ---------------------------------------------------------------------------------*/ 70 void SendAck(void) 71 { 72 SDA=0; SomeNOP(); 73 SCL=1; SomeNOP(); 74 SCL=0; 75 } 76 77 /**-------------------------------------------------------------------------------- 78 调用方式:void SendAck(void) ﹫2001/07/0 4 79 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。 80 }**-------------------------------------------------------------------------------- 81 void SendNotAck(void) 82 { 83 SDA=1; SomeNOP(); 84 SCL=1; SomeNOP(); 85 SCL=0; 86 } 87 88 /**-------------------------------------------------------------------------------- 89 调用方式:void I2CSend(uchar ch) ﹫2001/07/0 5 90 函数说明:私有函数,I2C专用 91 ---------------------------------------------------------------------------------*/ 92 void I2CSendByte(Byte ch) 93 { 94 uchar i=8; 95 while (i--) 96 { 97 SCL=0;_nop_(); 98 SDA=(bit)(ch&0x80); ch<<=1; SomeNOP(); 99 SCL=1; SomeNOP(); 100 } 101 SCL=0; 102 } 103 104 /**-------------------------------------------------------------------------------- 105 调用方式:uchar I2CReceive(void) ﹫2001/07/0 5 106 函数说明:私有函数,I2C专用 107 ---------------------------------------------------------------------------------*/ 108 Byte I2CReceiveByte(void) 109 { 110 uchar i=8; 111 Byte ddata=0; 112 SDA=1; 113 while (i--) 114 { 115 ddata<<=1; 116 SCL=0;SomeNOP(); 117 SCL=1;SomeNOP(); 118 ddata|=SDA; 119 } 120 SCL=0; 121 return ddata; 122 } 123 124 125 //--------------------------------------------------------------------------- 126 //开始PCF8563T驱动程序 第 2 页 文件: PCF8563T.C 2001-11-27, 18:39:20 127 /**-------------------------------------------------------------------------------- 128 调用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7 129 函数说明:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype,并设置读取 130 的字节数,则会一次把时间读取到buff中。顺序是: 131 0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年 132 ---------------------------------------------------------------------------------*/ 133 void GetPCF8563(uchar firsttype,uchar count,uchar *buff) 134 { 135 uchar i; 136 I2CStart(); 137 I2CSendByte(0xA2); 138 WaitAck(); 139 I2CSendByte(firsttype); 140 WaitAck(); 141 142 I2CStart(); 143 I2CSendByte(0xA3); 144 WaitAck(); 145 146 for (i=0;i>4)+'0'; 236 time[1]=(con[2]&0x0f)+'0'; 237 time[3]=(con[1]>>4)+'0'; 238 time[4]=(con[1]&0x0f)+'0'; 239 time[6]=(con[0]>>4)+'0'; 240 time[7]=(con[0]&0x0f)+'0'; 241 242 time[8]=0; 243 if(type==1) 244 { 245 time_type=0xff; 246 } 247 else 248 { 249 time_type=0; 250 } 251 dipchar0(x0,y0,F57,1,time_type,time); 252 } 第 4 页 文件: PCF8563T.C 2001-11-27, 18:39:20 253 第 5 页