i2c.lst
来自「显示屏驱动源代码」· LST 代码 · 共 427 行 · 第 1/2 页
LST
427 行
199 1
200 1 for(i=0; i<cnt; i++){
201 2 I2CWriteData(*(val+i));
202 2 I2C_delay();
203 2 }
204 1 I2CStop();
205 1 }
206
207 void WriteI2Cn_(BYTE addr, BYTE *val, BYTE cnt)
208 {
209 1 BYTE i;
210 1
211 1 #ifdef INTERNAL_MCU
BYTE index;
index = *val;
val++;
if ( addr == TW88I2CAddress ) {
for ( i=1; i<cnt; i++)
WriteTW88(index++, *val++);
return;
}
#endif
221 1 I2CStart();
222 1 I2CWriteData(addr);
223 1
224 1 for(i=0; i<cnt; i++){
225 2 I2CWriteData(*(val+i)); //LJY050101
226 2 }
227 1 I2CStop();
228 1 }
229
230 //BYTE I2CWriteData_Wait(BYTE value);
231
232 #ifdef SUPPORT_MSP_AUDIO
void I2CReadByteMSP(BYTE addr, BYTE index, BYTE *pd, BYTE cnt)
{
BYTE i;
I2CStart();
I2CWriteData_Wait(addr);
I2CWriteData(index);
for(i=0; i<cnt; i++) {
C51 COMPILER V7.06 I2C 02/21/2008 14:00:26 PAGE 5
I2CWriteData(*(pd+i));
}
I2CStart();
I2CWriteData_Wait(addr | 0x01);
*pd = I2CReadDataWithACK();
*(pd+1) = I2CReadData();
I2CStop();
}
#endif
251
252
253
254 /*****************************************************************************/
255 /* */
256 /*****************************************************************************/
257 #ifdef SUPPORT_MSP_AUDIO
BYTE I2CWriteData_Wait(BYTE value)
{
WORD i;
BYTE ack;
for(i=0; i<8; i++, value<<=1) {
if(value & 0x80) I2C_SDA = 1;
else I2C_SDA = 0;
I2Cdelay();
I2C_SCL = 1; I2Cdelay();
I2C_SCL = 0;
}
I2C_SDA = 1; I2Cdelay();
I2C_SCL = 1; I2Cdelay();
i=0;
while(1) {
if( I2C_SCL ) break;
i++;
}
ack = I2C_SDA; //I2Cdelay();
I2C_SCL = 0;
return (1-ack);
}
#endif
283
284 #ifndef QVGA
285 void dd(void)
286 {
287 1 }
288 #else
#define dd() I2Cdelay()
#endif
291
292 void I2CStart()
293 {
294 1 I2C_SDA = 1; dd();
295 1 I2C_SCL = 1; dd();
296 1 I2C_SDA = 0; dd();
297 1 I2C_SCL = 0;
298 1 }
299
300 void I2CStop()
301 {
302 1 I2C_SDA = 0; dd();
C51 COMPILER V7.06 I2C 02/21/2008 14:00:26 PAGE 6
303 1 I2C_SCL = 1; dd();
304 1 I2C_SDA = 1;
305 1 }
306
307 void I2CWriteData(BYTE value)
308 {
309 1 /*
310 1 int i;
311 1
312 1 for(i=0; i<8; i++, value<<=1) {
313 1 I2C_SCL = 0;
314 1 I2Cdelay(); // HHY 2.04 in special case, it was unstable
315 1 if(value & 0x80) I2C_SDA = 1;
316 1 else I2C_SDA = 0;
317 1 I2Cdelay();
318 1 I2C_SCL = 1;
319 1 }
320 1 */
321 1
322 1 I2C_SCL=0; I2C_SDA=(value & 0x80)? 1:0; I2C_SCL=1; dd();
323 1 I2C_SCL=0; I2C_SDA=(value & 0x40)? 1:0; I2C_SCL=1; dd();
324 1 I2C_SCL=0; I2C_SDA=(value & 0x20)? 1:0; I2C_SCL=1; dd();
325 1 I2C_SCL=0; I2C_SDA=(value & 0x10)? 1:0; I2C_SCL=1; dd();
326 1
327 1 I2C_SCL=0; I2C_SDA=(value & 0x08)? 1:0; I2C_SCL=1; dd();
328 1 I2C_SCL=0; I2C_SDA=(value & 0x04)? 1:0; I2C_SCL=1; dd();
329 1 I2C_SCL=0; I2C_SDA=(value & 0x02)? 1:0; I2C_SCL=1; dd();
330 1 I2C_SCL=0; I2C_SDA=(value & 0x01)? 1:0; I2C_SCL=1; dd();
331 1
332 1
333 1 I2C_SCL = 0; // HHY 3.00
334 1 I2C_SCL = 0; // HHY 3.00
335 1 I2C_SCL = 0; // I2Cdelay();
336 1 I2C_SDA = 1; // I2Cdelay();
337 1
338 1 I2C_SCL = 1; // HHY 3.00
339 1 I2C_SCL = 1; // HHY 3.00
340 1 I2C_SCL = 1; // I2Cdelay();
341 1 I2C_SCL = 0;
342 1 }
343
344 BYTE I2CReadData()
345 {
346 1 int i;
347 1 BYTE value=0;
348 1
349 1 I2C_SDA = 1; dd();
350 1 I2C_SCL = 0;
351 1
352 1 for(i=0; i<8; i++) {
353 2 I2C_SCL = 1;
354 2 value <<= 1;
355 2 if(I2C_SDA) value |= 1;
356 2 I2C_SCL = 0;
357 2 }
358 1 dd();
359 1
360 1 I2C_SCL = 1; // HHY 3.00
361 1 I2C_SCL = 1; // HHY 3.00
362 1 I2C_SCL = 1;
363 1 I2C_SCL = 0;
364 1
C51 COMPILER V7.06 I2C 02/21/2008 14:00:26 PAGE 7
365 1 return value;
366 1
367 1 }
368
369 #ifdef SUPPORT_MSP_AUDIO
BYTE I2CReadDataWithACK()
{
int i;
BYTE value=0;
I2C_SDA = 1; I2Cdelay();
I2C_SCL = 0;
for(i=0; i<8; i++) {
I2C_SCL = 1;
value <<= 1;
if(I2C_SDA) value |= 1;
I2C_SCL = 0;
}
I2C_SDA = 0; I2Cdelay(); //ack
I2C_SCL = 1; I2Cdelay();
I2C_SCL = 0;
return value;
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 653 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 34
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?