|
77 /**-------------------------------------------------------------------------------- 78 調(diào)用方式:void SendAck(void) ﹫2001/07/0 4 79 函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時,非應(yīng)答信號。 80 }**-------------------------------------------------------------------------------- 81 void SendNotAck(void) 82 { 83 SDA=1; SomeNOP(); 84 SCL=1; SomeNOP(); 85 SCL=0; 86 } 87 88 /**-------------------------------------------------------------------------------- 89 調(diào)用方式:void I2CSend(uchar ch) ﹫2001/07/0 5 90 函數(shù)說明:私有函數(shù),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 調(diào)用方式:uchar I2CReceive(void) ﹫2001/07/0 5 106 函數(shù)說明:私有函數(shù),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驅(qū)動程序 第2 頁 文件: PCF8563T.C 2001-11-27, 18:39:20 127 /**-------------------------------------------------------------------------------- 128 調(diào)用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7 129 函數(shù)說明:讀取時鐘芯片PCF8563的時間,設(shè)置要讀的第一個時間類型firsttype,并設(shè)置讀取 130 的字節(jié)數(shù),則會一次把時間讀取到buff中。順序是: 131 0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀(jì))/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<count;i++) 147 { 148 buff[i]=I2CReceiveByte(); 149 if (i!=count-1) SendAck();//除最后一個字節(jié)外,其他都要從MASTER發(fā)應(yīng)答。 150 } 151 152 SendNotAck(); 153 I2CStop(); 154 } 155 156 157 /**-------------------------------------------------------------------------------- 158 調(diào)用方式:void SetPCF8563(uchar timetype,uchar value) ﹫2001/08/0 7 159 函數(shù)說明:調(diào)整時鐘。timetype是要改的時間類型,value是新設(shè)置的時間值(BCD格式)。 160 0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀(jì))/0x08:年 161 ---------------------------------------------------------------------------------*/ 162 void SetPCF8563(uchar timetype,uchar value) 163 { 164 I2CStart(); 165 I2CSendByte(0xA2); 166 WaitAck(); 167 I2CSendByte(timetype); 168 WaitAck(); 169 I2CSendByte(value); 170 WaitAck(); 171 I2CStop(); 172 } 173 174 /**-------------------------------------------------------------------------------- 175 調(diào)用方式:void SetAlarmHour(uchar count) ﹫2001/08/0 7 176 函數(shù)說明:設(shè)置報警鬧鐘在一天的第count點(diǎn)報警。例如:count=23,則在晚上11點(diǎn)報警。 177 ---------------------------------------------------------------------------------*/ 178 void SetAlarm(uchar alarmtype,uchar count) 179 { 180 SetPCF8563(0x01,0x02); 181 SetPCF8563(alarmtype,count); 182 } 183 184 /**-------------------------------------------------------------------------------- 185 調(diào)用方式:void CleanAlarm(void) ﹫2001/08/0 7 186 函數(shù)說明:清除所有報警設(shè)置。 187 ---------------------------------------------------------------------------------*/ 188 void CleanAlarm(void) 189 { 第3 頁 文件: PCF8563T.C 2001-11-27, 18:39:20 190 SetPCF8563(0x01,0x00); 191 SetPCF8563(0x09,0x80); 192 SetPCF8563(0x0A,0x80); 193 SetPCF8563(0x0B,0x80); 194 SetPCF8563(0x0C,0x80); 195 // SetPCF8563(0x0D,0x00); 196 // SetPCF8563(0x0E,0x03); 197 } 198 199 200 /*-------------------------------------------------------------------------------- 201 調(diào)用方式:uchar read1380(uchar command ) 202 函數(shù)說明:read1380()返回當(dāng)前時間, command指要返回的時間類型。 203 秒:81H 分鐘:83H 小時:85H 日期:87H 星期:89H 星期幾:8BH 年:8D H 204 ---------------------------------------------------------------------------------*/ 205 uchar read1380 (uchar command) 206 { 207 uchar time; 208 GetPCF8563(command,1,&time); 209 return time; 210 } 211 212 /*-------------------------------------------------------------------------------- 213 調(diào)用方式:void write1380(uchar command ,uchar time ) 214 函數(shù)說明:write1380()往HT1380寫命令和數(shù)據(jù),command是命令字, time是后寫入的數(shù)據(jù) 215 ---------------------------------------------------------------------------------*/ 216 void write1380(uchar command ,uchar time) 217 { 218 SetPCF8563(command,time); 219 } 220 221 222 /*-------------------------------------------------------------------------------- 223 調(diào)用方式:void time_display(uchar x0,uchar y0 ) 224 函數(shù)說明:time_display()在指定的x0,y0坐標(biāo),以00:00:00格式顯示當(dāng)前時間。 225 ---------------------------------------------------------------------------------*/ 226 //uchar time[]="00:11:11"; 227 228 void time_display(uchar x0,uchar y0,bit type) //液晶時間顯示 229 { 230 uchar time[]="00:00:00"; 231 uchar con[3]; 232 uchar time_type; 233 GetPCF8563(0x02,3,con); 234 235 time[0]=(con[2]>>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 }
|