亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c.c

?? 此程序為twell8806驅動程序
?? C
字號:
//-------------------------------------------------------------
//	This is changed for sdcc compiler 2.2.0a	LJY000721
//  ver0.11 2/20/2001	Support Z86129 Line 21 decoder.
//-------------------------------------------------------------
/*#include <io51.h>*/
//#include <pk-51.h>	LJY000721

#include "Config.h"

#include "reg.h"
#include "typedefs.h"
#include "I2C.h"
#include "main.h"
#include "debug.h"
#include "printf.h"
#include "osdbasic.h"

#define	I2C_SCL		P1_0
#define	I2C_SDA		P1_1

#define ID_ADDR		0xc5
#define ID_DATA		0xc6

extern	PDATA BYTE	DebugLevel;

///extern IDATA BYTE adc_i2c_address, CurrentADC;
//IDATA BYTE I2CAddr, I2CIdx, I2CData;

/*****************************************************************************/
/*                                                                           */
/*****************************************************************************/
#define I2C_FAST

#ifdef I2C_FAST
 #define I2Cdelay()
#else
 void I2Cdelay(void)
 {
	 BYTE i;
	 for(i=0; i<1; i++){
	 }
 }
#endif

#if (defined  QVGA) || (defined WQVGA)
void I2C_delay(void)
{
	 BYTE i;
	 for(i=0; i<255; i++){
		i=i;
	 }
	 for(i=0; i<128; i++){
		i=i;
	 }
}
#else
 #define I2C_delay() 
#endif

BYTE I2CWriteData_Wait(BYTE value);

void WriteTW88(BYTE index, BYTE dat)
{
	BYTE addr = TW88I2CAddress;

	#ifdef DEBUG_I2C
	if( DebugLevel==0xff )
		Printf("Write %02xh to [Adrs(%02xh)Index(%02xh)]\n\r", (WORD)dat, (WORD)addr, (WORD)index);
	#endif

	I2CStart();
	I2CWriteData(addr);
	I2CWriteData(index);
	I2CWriteData(dat);
	I2CStop();
}

/* For testing chip.............................
BYTE WriteTW88_Wait(BYTE index, BYTE dat)
{
	#ifdef DEBUG_I2C
	if( DebugLevel==0xff )
		Printf("Write %02xh to [Adrs(%02xh)Index(%02xh)]\n\r", (WORD)dat, (WORD)TW88I2CAddress, (WORD)index);
	#endif

	I2CStart();
	if( !I2CWriteData_Wait(TW88I2CAddress & 0xFE) ) 
		return 0;
	if( !I2CWriteData_Wait(index) )
		return 0;
	if( !I2CWriteData_Wait(dat) )
		return 0;
	I2CStop();
	return 1;

}
*/

BYTE ReadTW88(BYTE index)
{
	BYTE val;
	BYTE addr = TW88I2CAddress;

	I2CStart();
	I2CWriteData(addr);
	I2CWriteData(index);
	I2CStart();
	I2CWriteData(addr | 0x01);
	val = I2CReadData();
	I2CStop();

	#ifdef DEBUG_I2C
	if( DebugLevel==0xff )
		Printf("Read [Adrs:%02xh,Index:%02xh] %02xh\r\n", (WORD)addr, (WORD)index, (WORD)val);
	#endif

	return val;
}

#if defined( SUPPORT_PC ) || defined( SUPPORT_DTV )
void WriteADC(BYTE index, BYTE dat)
{
	//#ifdef DEBUG_OSD
	//if( DebugLevel==0xff )
//		Printf("Write ADC %02xh to [Adrs(%02xh)Index(%02xh)\r\n", (WORD)dat, (WORD)ADCI2CAddress, (WORD)index );
	//#endif

	WriteTW88(ID_ADDR, index);	
	WriteTW88(ID_DATA, dat);	

}

BYTE ReadADC(BYTE index)
{
	BYTE val, val1;

	val1=ReadTW88(0xb0);
	WriteTW88(0xb0, val1|0x80);	

	WriteTW88(ID_ADDR, index);	
	WriteTW88(ID_ADDR, index);	
	val = ReadTW88(ID_DATA);

	WriteTW88(0xb0, val1&0x7f);	

	//#ifdef DEBUG_OSD
	//if( DebugLevel==0xff )
//		Printf("Read ADC[Adrs:%02xh,Index:%02xh] %02xh\r\n", (WORD)TW88I2CAddress, (WORD)index, (WORD)val);
	//#endif
	
	return val;
}
#endif	// SUPPORT_PC

void WriteEEP(WORD index, BYTE dat)
{
	BYTE addr;

	addr = (EEPROMI2CAddress | (index>>7)) & 0xfe;

	I2CStart();
	I2CWriteData(addr);
	I2CWriteData((BYTE)index);
	I2CWriteData(dat);
	I2CStop();

	#ifdef DEBUG_OSD
	if( DebugLevel==0xff )
		Printf("Write %02xh to [Adrs(%02xh)Index(%02xh)\r\n", (WORD)dat, (WORD)addr, (WORD)index );
	#endif

	delay(2);
}

BYTE ReadEEP(WORD index)
{
	BYTE val;
	BYTE addr;

	addr = (EEPROMI2CAddress | (index>>7)) & 0xfe;

	val = ReadI2C(addr,(BYTE)index);

	#ifdef DEBUG_OSD
	if( DebugLevel==0xff )
		Printf("Read [Adrs:%02xh,Index:%02xh] %02xh\r\n", (WORD)addr, (WORD)index, (WORD)val);
	#endif

	return val;
}

BYTE ReadI2C(BYTE addr, BYTE index)
{
	BYTE val;

	I2CStart();
	I2CWriteData(addr);
	I2CWriteData(index);
	I2CStart();
	I2CWriteData(addr | 0x01);
	val = I2CReadData();
	I2CStop();

	return val;
}


void WriteI2C(BYTE addr, BYTE index, BYTE val)
{
	I2CStart();
	I2CWriteData(addr);
	I2CWriteData(index);
	I2CWriteData(val);
	I2CStop();
}

void WriteI2CnD(BYTE addr, BYTE index, BYTE val, BYTE cnt)
{
	BYTE i;

	I2CStart();
	I2CWriteData(addr);
	I2CWriteData(index);

	for(i=0; i<cnt; i++){
		I2CWriteData(val);		//LJY050101
		I2C_delay();
	}

	I2CStop();
}

void WriteI2Cn(BYTE addr, BYTE index, BYTE *val, BYTE cnt)
{
	BYTE i;

	I2CStart();
	I2CWriteData(addr);
	I2CWriteData(index);

	for(i=0; i<cnt; i++){
		I2CWriteData(*(val+i));	
		I2C_delay();
	}
	I2CStop();
}

BYTE WriteI2Cn_(BYTE addr, BYTE *val, BYTE cnt)
{
	BYTE rd=1, i;

	I2CStart();
	I2CWriteData(addr);

	for(i=0; i<cnt; i++){
		I2CWriteData(*(val+i));		//LJY050101
	}
	I2CStop();

	return rd;
}

//BYTE I2CWriteData_Wait(BYTE value);
void I2CReadByteMSP(BYTE addr, BYTE index, BYTE *pd, BYTE cnt)
{
	BYTE i;

	I2CStart();
	I2CWriteData_Wait(addr);
	I2CWriteData(index);
	for(i=0; i<cnt; i++) {
		I2CWriteData(*(pd+i));
	}
	I2CStart();
	I2CWriteData_Wait(addr | 0x01);
	*pd = I2CReadDataWithACK();
	*(pd+1) = I2CReadData();

	I2CStop();
}

#ifdef DEBUG_TV
BYTE ReadI2CStatus( BYTE addr )
{
	BYTE val;

	I2CStart();
	I2CWriteData(addr | 0x01);
	val = I2CReadData();
	I2CStop();

	return val;
}
#endif // DEBUG_TV


#ifdef SERIAL
BYTE I2CReadDataWithNAK(void)
{
	return I2CReadData();
}

void ReadI2Cmn(BYTE addr, BYTE wcnt, BYTE rcnt, BYTE *rwdata)
{
	BYTE i;

	I2CStart();
	I2CWriteData(addr);
	for(i=0; i<wcnt; i++)
		I2CWriteData( rwdata[i] );

	I2CStart();
	I2CWriteData(addr | 0x01);
	for(i=0; i<rcnt-1; i++)
		rwdata[i] = I2CReadDataWithACK();
	rwdata[i++] = I2CReadDataWithNAK();
	I2CStop();
}
/*
void ReadI2CStatusn(BYTE addr, BYTE rcnt, BYTE *rwdata)
{
	BYTE i;

//	I2CStart();
//	I2CWriteData(addr);
//	for(i=0; i<wcnt; i++)
//		I2CWriteData( rwdata[i] );

	I2CStart();
	I2CWriteData(addr | 0x01);

	for(i=0; i<rcnt-1; i++)
		rwdata[i] = I2CReadDataWithACK();
	rwdata[i++] = I2CReadDataWithNAK();
	I2CStop();
}
*/
#endif // SERIAL

/*****************************************************************************/
/*                                                                           */
/*****************************************************************************/
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);
}

#ifndef QVGA
void dd(void)
{
}
#else
#define dd()  I2Cdelay()
#endif

void I2CStart()
{
	I2C_SDA = 1;	dd();
	I2C_SCL = 1;	dd();
	I2C_SDA = 0;	dd();
	I2C_SCL = 0;
}

void I2CStop()
{
	I2C_SDA = 0;	dd();
	I2C_SCL = 1;	dd();
	I2C_SDA = 1;
}

void I2CWriteData(BYTE value)
{
/*
	int i;

	for(i=0; i<8; i++, value<<=1) {
		I2C_SCL = 0;
		I2Cdelay();	// HHY 2.04 in special case, it was unstable
		if(value & 0x80) I2C_SDA = 1;
		else 			 I2C_SDA = 0;
		I2Cdelay();
		I2C_SCL = 1;
	}
*/

	I2C_SCL=0;	I2C_SDA=(value & 0x80)? 1:0;	I2C_SCL=1;	dd();
	I2C_SCL=0;	I2C_SDA=(value & 0x40)? 1:0;	I2C_SCL=1;	dd();
	I2C_SCL=0;	I2C_SDA=(value & 0x20)? 1:0;	I2C_SCL=1;	dd();
	I2C_SCL=0;	I2C_SDA=(value & 0x10)? 1:0;	I2C_SCL=1;	dd();

	I2C_SCL=0;	I2C_SDA=(value & 0x08)? 1:0;	I2C_SCL=1;	dd();
	I2C_SCL=0;	I2C_SDA=(value & 0x04)? 1:0;	I2C_SCL=1;	dd();
	I2C_SCL=0;	I2C_SDA=(value & 0x02)? 1:0;	I2C_SCL=1;	dd();
	I2C_SCL=0;	I2C_SDA=(value & 0x01)? 1:0;	I2C_SCL=1;	dd();


	I2C_SCL = 0;	// HHY 3.00
	I2C_SCL = 0;	// HHY 3.00
	I2C_SCL = 0;	//	I2Cdelay();
	I2C_SDA = 1;	//	I2Cdelay();

	I2C_SCL = 1;	// HHY 3.00
	I2C_SCL = 1;	// HHY 3.00
	I2C_SCL = 1;	//	I2Cdelay();
	I2C_SCL = 0;
}

BYTE I2CReadData()
{
	int i;
	BYTE value=0;

	I2C_SDA = 1;	dd();
	I2C_SCL = 0;
	
	for(i=0; i<8; i++) {
		I2C_SCL = 1;
		value <<= 1;
		if(I2C_SDA) value |= 1;
		I2C_SCL = 0;
	}
	dd();
	
	I2C_SCL = 1;	// HHY 3.00
	I2C_SCL = 1;	// HHY 3.00
	I2C_SCL = 1;
	I2C_SCL = 0;

	return value;

}

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;
}

//=============================================================================
//			Slow I2C routine for Teletext Chip
//=============================================================================
#ifdef SUPPORT_TELETEXT

void I2Cdelay4(void)
{
	BYTE i;
	for(i=0; i < 5; i++)
		I2Cdelay();
}

void I2CStartLong(void)
{
	I2C_SDA = 1;	I2Cdelay4();
	I2C_SCL = 1;	I2Cdelay4();
	I2C_SDA = 0;	I2Cdelay4();
	I2C_SCL = 0;	I2Cdelay4();
}

void I2CStopLong(void)
{
	I2C_SDA = 0;	I2Cdelay4();
	I2C_SCL = 1;	I2Cdelay4();
	I2C_SDA = 1;	I2Cdelay4();
}

void I2CWriteData_(BYTE SendData)  // Write SendData
{
	BYTE SendCnt;

	for( SendCnt=0; SendCnt<8; SendCnt++, SendData<<=1 ) {
		I2C_SCL = 0;
		I2Cdelay4();
		if(SendData & 0x80)	I2C_SDA = 1;
		else 			    I2C_SDA = 0;
		I2Cdelay4();
		I2C_SCL = 1;
		I2Cdelay4();
	}
	I2C_SCL = 0;	I2Cdelay4();
	I2C_SDA = 1; 	I2Cdelay4();
	I2C_SCL = 1;	

	I2C_SCL = 0;	I2Cdelay4();
					I2Cdelay4();
	delay(1);
}

void WriteI2CnLong(BYTE addr, BYTE *val, BYTE cnt)
{
	BYTE i;//rd=1, i;

	I2Cdelay4();
	I2Cdelay4();
	I2CStartLong();

	I2CWriteData_(addr);
	for(i=0; i<cnt; i++)
		I2CWriteData_(*(val+i));

	I2CStopLong();
}
#ifdef DEBUG_TELETEXT
BYTE I2CReadDatatt(BYTE SelNack)
{
	int i;
	BYTE value=0;

	I2C_SDA = 1;	I2Cdelay4();
	I2C_SCL = 0;	I2Cdelay4();
	
	for(i=0; i<8; i++) {
		I2C_SCL = 1;	I2Cdelay4();
		value <<= 1;
		if(I2C_SDA) 
			value |= 1;	
		I2C_SCL = 0;	I2Cdelay4();
	}

	if(SelNack == 0x01){
		I2C_SDA = 1;	
		I2Cdelay4();	// nack
	}
	else{
		I2C_SDA = 0;	
		I2Cdelay4();	// ack
	}

	I2C_SCL = 1;	I2Cdelay4();	
	I2C_SCL = 0;

	return value;
}

void ReadI2Ctt(BYTE addr, BYTE *ReData, BYTE cnt)
{
	BYTE i;

	I2CStartLong();
	I2CWriteData_(addr | 0x01);
	
	if(cnt != 0) {
		for(i=0 ; i < cnt ; i++) 
			ReData[i] =  I2CReadDatatt(0x00);
		ReData[i] =  I2CReadDatatt(0x01);
   	}
	else
		ReData[0] =  I2CReadDatatt(0x01);

	I2CStopLong();

	delay(1);

}
#endif
#endif	//SUPPORT_TELETEXT


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美腿丝袜亚洲综合| 欧美一级日韩免费不卡| 日韩亚洲国产中文字幕欧美| 亚洲国产成人91porn| 在线观看免费亚洲| 亚洲午夜视频在线| 欧美一区二区三区在线看| 日本vs亚洲vs韩国一区三区二区| 日韩欧美资源站| 国产精品一区二区无线| 亚洲第一主播视频| 亚洲资源中文字幕| 制服丝袜中文字幕亚洲| 狠狠狠色丁香婷婷综合激情 | 国产寡妇亲子伦一区二区| 国产女同互慰高潮91漫画| av电影在线观看完整版一区二区| 一区在线观看视频| 欧美自拍偷拍午夜视频| 日韩成人免费看| 国产欧美一区二区三区网站 | 欧美日韩在线综合| 国产毛片精品国产一区二区三区| 亚洲黄色录像片| 欧美精品在线一区二区| 日本中文字幕不卡| 99国产精品一区| 三级在线观看一区二区| 中文乱码免费一区二区 | 韩国欧美国产一区| 国产精品国产a级| 欧美亚洲综合色| 激情伊人五月天久久综合| **性色生活片久久毛片| 欧美一区二区免费| 一区二区三区在线免费观看| 91理论电影在线观看| 免费人成黄页网站在线一区二区| 国产精品久久午夜| 日韩欧美国产综合| aaa欧美日韩| 精品一区二区三区在线观看国产 | 亚洲国产视频在线| 久久亚洲影视婷婷| 在线视频国产一区| 国产激情视频一区二区在线观看| 亚洲在线一区二区三区| 中文字幕国产精品一区二区| 日韩视频一区二区在线观看| 91电影在线观看| 成人污污视频在线观看| 久久99久久99| 午夜日韩在线观看| 中文文精品字幕一区二区| 91麻豆精品国产91| 91网站在线观看视频| 国产激情视频一区二区在线观看| 久久av中文字幕片| 日韩在线观看一区二区| 欧美日本不卡视频| 色婷婷综合激情| www.亚洲色图| 成人免费视频网站在线观看| 久久99精品久久久久久国产越南| 午夜欧美电影在线观看| 亚洲一区二区三区四区五区黄 | 日本不卡一区二区三区| 亚洲美女少妇撒尿| 久久精品综合网| 精品久久久久一区二区国产| 欧美巨大另类极品videosbest | 欧美性受xxxx黑人xyx| 99精品桃花视频在线观看| 国产高清亚洲一区| 久国产精品韩国三级视频| 日韩精品一级中文字幕精品视频免费观看 | 91麻豆精品在线观看| 国产宾馆实践打屁股91| 国产精品18久久久久久久久 | 99re免费视频精品全部| 不卡av在线网| 成人动漫在线一区| 不卡的av在线| 91丨porny丨首页| 色成年激情久久综合| 欧美影片第一页| 欧美日韩久久久一区| 欧美色区777第一页| 欧美三级一区二区| 91精品一区二区三区在线观看| 欧美精品久久一区二区三区| 久久久青草青青国产亚洲免观| 国产精品77777竹菊影视小说| 国产精品系列在线播放| 成人性生交大合| av一二三不卡影片| 一本大道久久a久久精二百| 99久久精品国产麻豆演员表| 9l国产精品久久久久麻豆| 99久免费精品视频在线观看| 色婷婷精品久久二区二区蜜臂av| 91美女蜜桃在线| 欧美日韩亚洲综合在线 | 国产欧美日韩卡一| 亚洲欧洲日产国产综合网| 一区二区三区在线不卡| 视频一区中文字幕国产| 国产最新精品免费| 成人av影视在线观看| 亚洲成人免费在线| 国产一区二区0| heyzo一本久久综合| 欧美情侣在线播放| 精品国产乱码久久久久久免费| 国产精品美日韩| 亚洲图片一区二区| 国产乱子轮精品视频| 91精品办公室少妇高潮对白| 日韩精品中文字幕一区二区三区| 欧美国产日本视频| 日本中文字幕一区二区有限公司| 自拍偷自拍亚洲精品播放| 午夜精品在线看| 成人精品小蝌蚪| 欧美一区二区三区免费视频| 乱一区二区av| 日本一区二区三区四区在线视频 | 欧美一二三四区在线| 久久亚洲精华国产精华液| 专区另类欧美日韩| 老色鬼精品视频在线观看播放| 国产成人欧美日韩在线电影| 欧美日韩成人综合天天影院 | 中文久久乱码一区二区| 午夜视频一区在线观看| 91在线播放网址| 久久只精品国产| 亚洲国产综合在线| caoporm超碰国产精品| 欧美图区在线视频| 国产精品午夜春色av| 激情av综合网| 91精品国产手机| 一区二区久久久| 国产精品99久久久久久宅男| 日韩欧美中文一区| 婷婷开心久久网| 欧洲精品在线观看| 国产精品免费av| 成人免费av在线| 2020国产精品自拍| 蜜桃av噜噜一区| 欧美日韩成人激情| 亚洲精品国产a| 91女神在线视频| 中文字幕在线观看不卡| 国产99久久久国产精品| 欧美精品一区二区高清在线观看| 免费在线看成人av| 在线成人午夜影院| 亚洲欧美日韩人成在线播放| 天天av天天翘天天综合网色鬼国产| kk眼镜猥琐国模调教系列一区二区| 久久久久久久久久电影| 韩国女主播一区二区三区| 精品福利一区二区三区免费视频| 欧美国产日韩亚洲一区| 成人免费一区二区三区在线观看| 亚洲国产精品一区二区久久| 成人黄色网址在线观看| 国产成人在线观看| 欧美一区三区二区| 中文字幕人成不卡一区| 久久久亚洲午夜电影| 在线不卡一区二区| 亚洲成人黄色影院| 91精品国产色综合久久| 日本午夜精品一区二区三区电影| 欧美日韩性生活| 首页欧美精品中文字幕| 日韩亚洲欧美成人一区| 麻豆91在线观看| 久久精品无码一区二区三区| 国产成人在线视频网址| 国产精品人妖ts系列视频| 91免费在线视频观看| 亚洲chinese男男1069| 日韩一区二区三区三四区视频在线观看| 麻豆91精品91久久久的内涵| 亚洲精品一线二线三线无人区| 国产精品456露脸| 亚洲人xxxx| 91精品国产91久久久久久一区二区| 美国毛片一区二区三区| 国产精品乱码妇女bbbb| 国产精品麻豆网站| 国产成人激情av| 一区二区三区在线视频观看58 | 亚洲国产精品t66y| 精品一区二区免费在线观看|