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

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

?? i2c.h

?? LCD802的中文質量 LCD802的中文質量
?? H
字號:
/*********************************************************************
	微 雪 電 子   WaveShare   http://www.waveShare.net            	
		                                                        
目    的:   建立I2C操作庫
	
目標系統:   基于AVR單片機
		                                                                
應用軟件:   ICCAVR
		                                                                
版    本:   Version 1.0                                                          
		                                                                
圓版時間:   2005-06-25
	
開發人員:   SEE

說    明:   若用于商業用途,請保留此段文字或注明代碼來源
	
	深 圳 市 微 雪 電 子 有 限 公 司 保 留 所 有 的 版 權     
*********************************************************************/

/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
版本更新記錄:

----------------------------------------------------------------------
入口參數說明:

----------------------------------------------------------------------
待定參數說明:

----------------------------------------------------------------------	
對外變量說明:

----------------------------------------------------------------------
對外函數說明:

----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/

#ifndef I2C_H
#define I2C_H

#include "D:\ICC_H\CmmICC.H"

/* TWSR values (not bits) */
/* Master */
#define I2C_START			0x08
#define I2C_RESTART			0x10

/* Master Transmitter */
#define I2C_MT_SLA_ACK		0x18
#define I2C_MT_SLA_NACK		0x20
#define I2C_MT_DATA_ACK		0x28
#define I2C_MT_DATA_NACK	0x30
#define I2C_MT_ARB_LOST		0x38

/* Master Receiver */
#define I2C_MR_ARB_LOST		0x38
#define I2C_MR_SLA_ACK		0x40
#define I2C_MR_SLA_NACK		0x48
#define I2C_MR_DATA_ACK		0x50
#define I2C_MR_DATA_NACK	0x58

/* Slave Transmitter */
#define I2C_ST_SLA_ACK			0xA8
#define I2C_ST_ARB_LOST_SLA_ACK 0xB0
#define I2C_ST_DATA_ACK			0xB8
#define I2C_ST_DATA_NACK		0xC0
#define I2C_ST_LAST_DATA		0xC8

/* Slave Receiver */
#define I2C_SR_SLA_ACK				0x60
#define I2C_SR_ARB_LOST_SLA_ACK		0x68
#define I2C_SR_GCALL_ACK			0x70
#define I2C_SR_ARB_LOST_GCALL_ACK	0x78
#define I2C_SR_DATA_ACK				0x80
#define I2C_SR_DATA_NACK			0x88
#define I2C_SR_GCALL_DATA_ACK		0x90
#define I2C_SR_GCALL_DATA_NACK		0x98
#define I2C_SR_STOP					0xA0

/* Misc */
#define I2C_NO_INFO			0xF8
#define I2C_BUS_ERROR		0x00

/*
 * The lower 3 bits of TWSR are reserved on the ATmega163.
 * The 2 LSB carry the prescaler bits on the newer ATmegas.
 */
#define I2C_STATUS_MASK	(_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3))
#define I2C_STATUS		(TWSR & I2C_STATUS_MASK)

/*
 * R/~W bit in SLA+R/W address field.
 */
#define I2C_READ		1
#define I2C_WRITE		0

#define I2CStart()    	(TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
#define I2CStop()     	(TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
#define I2CWaitAck()	{while(!(TWCR&(1<<TWINT)));}
#define I2CChkAck() 	(TWSR&0xf8)					//check ack
#define I2CSendAck()	(TWCR|=(1<<TWEA))
#define I2CSendNoAck()	(TWCR&=~(1<<TWEA))
#define I2CSendByte(x)	{TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
#define I2CRcvNckByte()	(TWCR=(1<<TWINT)|(1<<TWEN))
#define I2CRcvAckByte()	(TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))

/* For Program */
#define I2C_Stop()		I2CStop()
#define I2C_SendAck()	I2CSendAck()
#define I2C_SendNoAck() I2CSendNoAck()
#define I2C_WaitAck()	I2CWaitAck()

/* I2C Config */
#define I2C_ERR			0
#define I2C_CRR			1

/*--------------------------------------------------------------------
函數名稱:I2C Start
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_Start()					
{
	I2CStart();						
	I2CWaitAck();
	if( I2CChkAck()!=I2C_START ) 
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C ReStart
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_Restart()					
{
	I2CStart();						
	I2CWaitAck();
	if( I2CChkAck()!=I2C_RESTART ) 
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:發送 7位 器件寫地址: XXXX XXX0
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendWrDAdr(uint8 wrDAdr)	
{
	I2CSendByte(wrDAdr);			//設置 器件寫地址
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MT_SLA_ACK )  
		return I2C_ERR;
	return I2C_CRR;		
}
/*--------------------------------------------------------------------
函數名稱:發送 10位 器件寫地址: 1111 0XX0, XXXX XXXX
函數功能:
注意事項:
提示說明:兼容 發送 7位 器件寫地址: XXXX XXX0
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendWrDAdr_(uint16 wrDAdr)	
{
	if( wrDAdr&0xF000 == 0xF000 )	//判斷是否為 10位 器件地址
		if( I2C_SendWrDAdr( (uint8)wrDAdr>>8 )==I2C_ERR )	//設置 (高位)器件寫地址
			return I2C_ERR;
	if( I2C_SendWrDAdr( (uint8)wrDAdr )==I2C_ERR )	//設置 (低位)器件寫地址
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:發送 7位 器件讀地址: XXXX XXX1
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendRdDAdr(uint8 rdDAdr)	
{
	I2CSendByte(rdDAdr);			//設置 器件讀地址
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MR_SLA_ACK )  
		return I2C_ERR;
	return I2C_CRR;	
}
/*--------------------------------------------------------------------
函數名稱:發送 10位 器件讀地址: 1111 0XX0, XXXX XXXX
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendRdDAdr_(uint8 rdDAdr)	
{
	if( rdDAdr&0xF000 == 0xF000 )	//判斷是否為 10位 器件地址
		if( I2C_SendWrDAdr( (uint8)rdDAdr>>8 )==I2C_ERR )	//設置 (高位)器件讀地址
			return I2C_ERR;
	if( I2C_SendWrDAdr( (uint8)rdDAdr )==I2C_ERR )	//設置 (低位)器件讀地址
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C發送數據
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendDat(uint8 configDat)	
{
	I2CSendByte(configDat);			
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MT_DATA_ACK ) 
		return I2C_ERR;
	return I2C_CRR;	
}
/*--------------------------------------------------------------------
函數名稱:I2C接收數據且不產生應答
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_RcvNAckDat(uint8 *pRdDat)	
{
	I2CRcvNckByte();
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MR_DATA_NACK )
		return I2C_ERR;
	*pRdDat=TWDR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C接收數據且產生應答
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_RcvAckDat(uint8 *pRdDat)	
{
	I2CRcvAckByte();					
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MR_DATA_ACK )
		return I2C_ERR;
	*pRdDat=TWDR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C寫器件,寫一個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 dat: data 數據
返    回:
--------------------------------------------------------------------*/
bool I2C_Write(uint16 wrDAdr,uint8 wordAdr,uint8 dat)
{
	if( I2C_Start()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(wordAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(dat)==I2C_ERR )
		return I2C_ERR;

	I2C_Stop();

	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C寫器件,寫N個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 *pWrDat: p->write data 寫入數據指針
		 num: number 寫入數據個數
返    回:
--------------------------------------------------------------------*/
//bool I2C_Write_(uint16 wrDAdr,uint8 wordAdr,
//				  uint8 *pWrDat,uint8 num)
//{
//
//} 
/*--------------------------------------------------------------------
函數名稱:I2C讀器件,讀一個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 rdDAdr: read device-address 讀器件地址
		 *pRdDat: p->read data 讀取數據指針
返    回:
--------------------------------------------------------------------*/
bool I2C_Read(uint16 wrDAdr,uint8 wordAdr,
			  uint8 rdDAdr,uint8 *pRdDat)
{
	if( I2C_Start()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(wordAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_Restart()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
		return I2C_ERR;

	I2C_Stop();

	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C讀器件,讀N個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 rdDAdr: read device-address 讀器件地址
		 *pRdDat: p->read data 讀取數據指針
		 num: number 讀取數據個數
返    回:
--------------------------------------------------------------------*/
bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
			   uint8 rdDAdr,uint8 *pRdDat,uint8 num)
{
 	uint8 i;
	
	if( I2C_Start()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(wordAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_Restart()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
		return I2C_ERR;

	for(i=0;i<num-1;i++)
		if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
			return I2C_ERR;
	
	if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
			return I2C_ERR;

	I2C_Stop();
	
	return I2C_CRR;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区在线播放| 亚洲国产精品av| 日韩欧美亚洲国产精品字幕久久久| 精品国产欧美一区二区| 亚洲精选视频在线| 国产精品一区不卡| 欧美一级免费大片| 六月丁香婷婷色狠狠久久| 高清不卡一区二区| 久久综合九色欧美综合狠狠| 亚洲精品国产无套在线观| 国产成人福利片| 欧美亚洲日本国产| 蜜桃一区二区三区在线观看| 精品国产免费人成在线观看| 国产剧情av麻豆香蕉精品| 国产欧美精品区一区二区三区 | 日韩久久精品一区| 蜜桃精品在线观看| 亚洲日本免费电影| 69av一区二区三区| 成人av网站在线| 国产精品亚洲第一| 一区二区三区在线高清| 欧美tickling挠脚心丨vk| 91蜜桃网址入口| 国产在线一区二区综合免费视频| 日本一区二区三区四区 | 99精品久久久久久| 午夜精品福利在线| 久久久综合激的五月天| 成人av电影免费在线播放| 午夜激情综合网| 欧美激情资源网| 欧美一区二区三区电影| 在线观看一区日韩| 成人三级在线视频| 91影视在线播放| 国产高清不卡一区| 国产欧美精品一区二区三区四区| 亚洲欧洲制服丝袜| 欧美一区二区三区的| 欧美剧在线免费观看网站| 国产亚洲女人久久久久毛片| 日韩va欧美va亚洲va久久| 精品成人免费观看| 国产98色在线|日韩| 久久欧美一区二区| 成人一级黄色片| 亚洲免费观看高清完整| 欧美日韩不卡一区二区| 亚洲五码中文字幕| 丰满亚洲少妇av| 亚洲精品乱码久久久久久久久 | 色综合天天综合在线视频| 国产精品久久久久久久久晋中 | 日本欧美肥老太交大片| 91精品在线一区二区| 蜜臀av性久久久久蜜臀aⅴ| 欧美麻豆精品久久久久久| 水野朝阳av一区二区三区| 91精品婷婷国产综合久久竹菊| 日韩激情中文字幕| 精品欧美一区二区久久| 国产精品羞羞答答xxdd| 久久久久久久久久久久久久久99| 国产一区在线不卡| 国产精品乱码妇女bbbb| 国产福利视频一区二区三区| 国产三级三级三级精品8ⅰ区| 波多野结衣中文字幕一区二区三区| 国产日韩成人精品| 欧美亚洲国产一区二区三区va| 亚洲成人动漫精品| 欧美成人r级一区二区三区| 国产suv精品一区二区6| 一区二区三区在线观看欧美 | 另类小说一区二区三区| 精品国产伦一区二区三区观看方式 | 狠狠色狠狠色合久久伊人| 国产一区二区视频在线播放| 97久久超碰国产精品| 国产精品国产自产拍高清av王其 | 国产精品区一区二区三区| 亚洲永久免费视频| 国产一区二区视频在线| 波多野结衣中文字幕一区二区三区| 欧美一区午夜视频在线观看| 日本一区二区三区dvd视频在线| 久久人人爽人人爽| 精品精品国产高清a毛片牛牛| 国产麻豆91精品| 亚洲图片欧美色图| 国产亚洲精品久| 欧美日韩在线免费视频| 国产精品系列在线播放| 亚洲已满18点击进入久久| 亚洲精品一区二区三区香蕉| 97se亚洲国产综合自在线不卡 | 亚洲综合色在线| 精品毛片乱码1区2区3区| 色吧成人激情小说| 视频一区二区中文字幕| 日韩三级视频中文字幕| 国产一区二区毛片| 久久精品亚洲一区二区三区浴池| 欧美色图一区二区三区| 尤物av一区二区| 欧美精品一区二区久久久 | 欧美精品乱码久久久久久| 蜜桃在线一区二区三区| 综合电影一区二区三区| 久久午夜老司机| 欧美精品在线观看播放| 91在线观看免费视频| 国产尤物一区二区在线| 日韩电影免费一区| 一区二区三区欧美| 亚洲欧美福利一区二区| 中文幕一区二区三区久久蜜桃| 日韩精品一区二区三区中文不卡| 国产一区二区在线看| 亚洲va韩国va欧美va精品| 一本到一区二区三区| 奇米影视在线99精品| 26uuu亚洲综合色| 欧美精品日韩一区| 一本久道中文字幕精品亚洲嫩| 天堂一区二区在线| 久久精品视频一区二区三区| 在线影视一区二区三区| 韩国女主播成人在线| 亚洲最大成人综合| 久久综合九色综合欧美就去吻 | 欧美写真视频网站| 国产精品免费人成网站| 日本道在线观看一区二区| 欧美日韩激情一区| 国产精品一区二区久久不卡| 精品在线免费视频| 日韩和欧美的一区| 中文字幕一区视频| 亚洲一区二区在线播放相泽| 亚洲国产精品天堂| 日韩电影在线免费观看| 免费在线观看日韩欧美| 国产在线精品一区二区不卡了| 国产伦精一区二区三区| 国产ts人妖一区二区| 91亚洲精品乱码久久久久久蜜桃| 日本精品一区二区三区高清 | 亚洲一线二线三线视频| 亚洲成人av一区二区三区| 免费在线视频一区| 国产精品99久久久久久似苏梦涵| 成人在线综合网| 日本道免费精品一区二区三区| 亚洲高清不卡在线| 国产乱色国产精品免费视频| 国产精品88av| 91蜜桃在线免费视频| 欧美日韩不卡一区| 日韩精品一区二区三区蜜臀 | 精品国产污污免费网站入口 | 国产精品欧美精品| 一区二区三区在线观看国产| 日本在线不卡一区| 亚洲欧美另类久久久精品2019| 国产日本欧洲亚洲| 国产电影一区在线| 91最新地址在线播放| 成人福利视频在线| 精品视频一区二区不卡| 久久久久高清精品| 欧美国产乱子伦| 亚洲色图色小说| 国产精品夜夜爽| 欧美成人一区二区| 亚洲欧美一区二区视频| 婷婷综合五月天| 波多野结衣的一区二区三区| 亚洲婷婷国产精品电影人久久| 国产精品一区专区| 欧美怡红院视频| 国产精品久久久久一区| 老鸭窝一区二区久久精品| 日本道免费精品一区二区三区| 久久一日本道色综合| 专区另类欧美日韩| 精品亚洲porn| 欧美性生活久久| 中文字幕乱码日本亚洲一区二区| 日韩成人精品在线| 色综合久久88色综合天天6| 久久久久久久久久久久久久久99| 天堂av在线一区| 欧美日韩一区成人| 一区二区三区日韩欧美精品| 亚洲一区欧美一区| 成人av网址在线|