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

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

?? twi.c

?? LCD圖形顯示_菜單管理程序
?? C
字號:
#include "includes.h"

/*-----------------------------------變量定義---------------------------------*/
/* 發送緩沖區 */ 
INT8U TWI_SendData[TWI_SEND_DATA_BUFFER_SIZE]; 
INT8U TWI_SendDataIndex; 
INT8U TWI_SendDataLength; 
/* 接收緩沖區 */
INT8U TWI_ReceiveData[TWI_RECEIVE_DATA_BUFFER_SIZE]; 
INT8U TWI_ReceiveDataIndex; 
INT8U TWI_ReceiveDataLength; 
/*----------------------------------TWI初始化---------------------------------*/
void TWI_Init(void) 
{ 
	/*設置總線上拉 */
   	#ifndef __iom128_h  
   	//#ifndef __iom64v_h
   		PORTD |= 0x03;   														// TWI SCL SDA on ATmega128,64 															
  	#else  
  		PORTC|= 0x03;   														// TWI SCL SDA on ATmega163,323,16,32,等 
  	#endif 
   	/*設置 TWI 波特率為 100KHz; TWI標準波特率: 低速 100KHz ;高速 400KHz */ 
   	TWI_SetBitrate(100); 
   	/*TWI總線使能*/ 
   	TWCR|=1<<TWEN; 
   	/*開TWI中斷和回應*/ 
    TWCR|=1<<TWIE; 
    TWCR|=1<<TWEA;  
} 
/*---------------------------------設置總線速率-------------------------------*/
void TWI_SetBitrate(INT8U       bitrateKHz) 
{ 
	INT8U bitrate_div; 
   	// SCL freq = Crystal/(16+2*TWBR)) 
   	#ifdef TWPS0 
    /* 對于用速率分頻的AVR (mega128) 
       SCL freq = Crystal/(16+2*TWBR*4^TWPS) 
       set TWPS to zero 
		TWSR&=~(1<<TWPS0); 
      	TWSR&=~(1<<TWPS1); */
	#endif 
   	/*計算分頻*/ 
   		bitrate_div = ((Crystal/1000l)/bitrateKHz); 
   		if(bitrate_div >= 16) 
   		{
      		bitrate_div = (bitrate_div-16)/2; 
    	}
     	TWBR = bitrate_div; 
} 
/*---------------------------------TWI發送開始--------------------------------*/
void TWI_SendStart(void) 
{ 
    
  	TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTA); 
} 

/*-----------------------發送停止條件,保持TWEA以便從接收---------------------*/
void TWI_SendStop(void) 
{ 
	TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWEA)|(1<<TWSTO); 
} 
/*------------------------------等待TWI 總線操作完成--------------------------*/
void TWI_WaitForComplete(void) 
{ 
   	while( !(TWCR&(1<<TWINT)) )WDR(); 
} 
/*-------------------------------返回接收到的數據-----------------------------*/
INT8U TWI_GetReceivedByte(void) 
{ 
   	return( TWDR ); 
} 
/*--------------------------------TWI單字節發送-------------------------------*/
void TWI_SendByte(INT8U data) 
{ 
	TWDR=data;  																// 裝載數據到 TWDR 
	TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT);  										// 發送開始
} 
/*--------------------------------TWI單字節接收-------------------------------*/
void TWI_ReceiveByte(INT8U ackFlag) 
{ 
 	if( ackFlag ) 																// 開始通過 TWI 接收
   	{ 
      
		TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWEA); 							// ackFlag = TRUE: 數據接收后回應ACK  
   	} 
   	else 
   	{ 
		TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT); 									// ackFlag = FALSE: 數據接收后無回應
   	} 
} 

/*-----------------------TWI主機發送,用于I2C器件讀寫-------------------------*/
INT8U TWI_MasterSendNI(INT8U deviceAddr, INT8U length, INT8U* data) 
{ 
   	INT8U retval = TWI_OK; 
	//CLI();
   	/*關TWI中斷*/ 
   	TWCR&=~(1<<TWIE); 

   	/*發送開始條件*/ 
   	TWI_SendStart(); 
   	TWI_WaitForComplete(); 

   	/*發送器件寫地址*/ 
   	TWI_SendByte( deviceAddr & 0xFE ); 
   	TWI_WaitForComplete(); 

   	/*檢查器件是否可用*/ 
   	if( TWSR == TW_MT_SLA_ACK) 
   	{ 
      	/*發送數據*/ 
      	while(length) 
      	{ 
			WDR();
         	TWI_SendByte( *data++ ); 
         	TWI_WaitForComplete(); 
         	length--; 
      	} 
   	} 
   	else 
   	{ 
      	/*如未回應器件地址,停止發送,返回錯誤*/  
      	retval = TWI_ERROR_NODEV; 
   	} 
   	/*發送停止條件,保持TWEA以便從接收*/ 
   	TWI_SendStop(); 
   	while( !(TWCR&(1<<TWSTO)) )WDR(); 
   	/*開TWI中斷*/
   	TWCR|=(1<<TWIE); 
	//SEI();
   	return retval; 
} 

/*-----------------------TWI主機接收,用于I2C器件讀寫-------------------------*/
INT8U TWI_MasterReceiveNI(INT8U deviceAddr, INT8U length, INT8U *data) 
{ 
   	INT8U retval = TWI_OK; 
	//CLI();
   	/*關TWI中斷*/ 
    TWCR&=~(1<<TWIE); 
   	/*發送開始條件*/ 
   	TWI_SendStart(); 
   	TWI_WaitForComplete(); 
   	/*發送器件讀地址*/ 
   	TWI_SendByte(deviceAddr| 0x01  ); 
   	TWI_WaitForComplete(); 
   	/*檢查器件是否可用*/ 
   	if( TWSR == TW_MR_SLA_ACK) 
   	{ 
      	/*接收數據并回應*/ 
      	while(length > 1) 
      	{ 
			WDR();
         	TWI_ReceiveByte(TRUE); 
         	TWI_WaitForComplete(); 
         	*data++ = TWI_GetReceivedByte(); 
         	length--; 
      	} 
      	/*接收數據無回應 (末位信號)*/ 
      	TWI_ReceiveByte(FALSE); 
      	TWI_WaitForComplete(); 
      	*data++ = TWI_GetReceivedByte(); 
   	} 
   	else 
   	{ 
      	/*如未回應器件地址,停止發送,返回錯誤*/ 
      	retval = TWI_ERROR_NODEV; 
   	} 
   	/*發送停止條件,保持TWEA以便從接收*/ 
   	TWI_SendStop(); 
   	/*開TWI中斷*/ 
   	TWCR|=TWIE; 
	//SEI();
   	return retval; 
}  
/*---------------------------------TWI中斷服務程序----------------------------*/
void TWI_ISR(void) 
{ 
   	INT8U status;
   	
   	//CLI();
    /*讀狀態位*/
   	status = TWSR & TWSR_STATUS_MASK; 
   	switch(status) 
   	{ 
   		/*-------------------主方式-----------------*/ 
   		case TW_START:                  										// 0x08: START 已發送 
   		case TW_REP_START:              							 			// 0x10: 重復START 已發送 
      	break; 
   		/*主發送,主接收狀態碼*/ 
   		case TW_MT_SLA_ACK:               										// 0x18: SLA+W 已發送;接收到ACK 
   		case TW_MT_DATA_ACK:            										// 0x28: 數據已發送;接收到ACK 
      		if(TWI_SendDataIndex < TWI_SendDataLength) 
      		{ 	
         		TWI_SendByte( TWI_SendData[TWI_SendDataIndex++] ); 				// 發送數據 
      		} 
      		else 
      		{ 
         		TWI_SendStop(); 												// 發送停止條件,保持TWEA以便從接收 
      		} 
      	break; 
   		case TW_MR_DATA_NACK:            										// 0x58: 接收到數據;NOT ACK 已返回 
      		TWI_ReceiveData[TWI_ReceiveDataIndex++] = TWDR; 					// 保存最終數據
      	/*繼續發送條件*/ 
   		case TW_MR_SLA_NACK:            										// 0x48: SLA+R 已發送,接收到NOT ACK 
   		case TW_MT_SLA_NACK:            										// 0x20: SLA+W 已發送,接收到NOT ACK 
   		case TW_MT_DATA_NACK:            										// 0x30: 數據已發送,接收到NOT ACK 
      		TWI_SendStop(); 													// 發送停止條件,保持TWEA以便從接收 
      	break; 
   		case TW_MT_ARB_LOST:            										// 0x38: SLA+W 或數據的仲裁失敗 
    		TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT); 								// 釋放總線 
      	break; 
   		case TW_MR_DATA_ACK:            										// 0x50: 接收到數據,ACK 已返回  
      		TWI_ReceiveData[TWI_ReceiveDataIndex++] = TWDR; 					// 保存接收到的數據位 
      	/*檢查是否接收完*/ 
   		case TW_MR_SLA_ACK:               										// 0x40: SLA+R 已發送,接收到ACK 
      		if(TWI_ReceiveDataIndex < (TWI_ReceiveDataLength-1)) 
      		{
         		TWI_ReceiveByte(TRUE);										 	// 數據位將接收 , 回復 ACK (傳送更多字節) 
			}
      		else 
      		{
                TWI_ReceiveByte(FALSE); 										// 數據位將接收 , 回復 NACK (傳送最后字節) 
			}
      	break; 

   		case TW_NO_INFO:                 										// 0xF8: 沒有相關的狀態信息;TWINT = “0” 
      		;																	// 無操作 
      	break; 
   		case TW_BUS_ERROR:              										// 0x00: 由于非法的START 或STOP 引起的總線錯誤 
      		TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTO)|(1<<TWEA);  			// 內部硬件復位,釋放總線 
      	break; 
   	} 
   	//SEI();
}
/*------------------------------------------------------------------------------
                                        0ooo
						      ooo0     (   ) 
                              (   )     ) /
						       \ (     (_/
	    				        \_) 
------------------------------------------------------------------------------*/ 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品影视av免费| 亚洲成人激情综合网| 国产视频在线观看一区二区三区| 4438x成人网最大色成网站| 欧美午夜精品一区二区蜜桃| 91精品国产综合久久精品图片| 欧美精品在线视频| 国产女人18毛片水真多成人如厕| 亚洲视频你懂的| 精品在线免费观看| 99久久久精品免费观看国产蜜| 色综合久久综合中文综合网| 欧美丰满一区二区免费视频 | 久久久噜噜噜久噜久久综合| 国产精品视频一二三| 午夜欧美在线一二页| 高清久久久久久| 欧美丰满嫩嫩电影| 亚洲欧洲综合另类| 国产99久久久国产精品潘金网站| 成人丝袜视频网| 欧美成人精品1314www| 亚洲女与黑人做爰| 成人综合婷婷国产精品久久蜜臀| 欧美变态tickle挠乳网站| 亚洲综合av网| 国产成人免费在线视频| 91精品国产日韩91久久久久久| 亚洲视频精选在线| 成人综合婷婷国产精品久久| 欧美刺激脚交jootjob| 五月婷婷色综合| 欧美福利电影网| 国产精品自拍毛片| 久久九九国产精品| 国产激情偷乱视频一区二区三区| 精品国产一区二区国模嫣然| 天堂资源在线中文精品| 欧美日韩国产三级| 免费成人美女在线观看.| 91精品综合久久久久久| 精品影视av免费| 国产精品美女久久久久av爽李琼| 国产成人免费视频网站高清观看视频 | 国产传媒日韩欧美成人| 中文字幕中文字幕一区| 在线视频国内自拍亚洲视频| 亚洲一区二区精品3399| 日韩视频一区二区三区在线播放| 日本欧美肥老太交大片| 国产婷婷色一区二区三区四区 | 日韩精品在线一区| 国产精品99久久久久久久女警 | 日韩福利视频导航| 国产女同互慰高潮91漫画| 91黄色激情网站| 国产剧情一区二区| 一区二区三区不卡视频在线观看 | 亚洲电影在线免费观看| 日韩午夜精品视频| 国产91对白在线观看九色| 亚洲一卡二卡三卡四卡无卡久久| 欧美成人精品福利| 欧美性大战久久久| 国产99久久久国产精品潘金| 亚洲不卡一区二区三区| 国产精品久久一卡二卡| 精品国产凹凸成av人导航| 欧美中文字幕一区二区三区亚洲| 日韩中文字幕麻豆| 亚洲卡通欧美制服中文| 国产精品久久午夜夜伦鲁鲁| 久久久久久久综合狠狠综合| 制服.丝袜.亚洲.另类.中文| 91麻豆成人久久精品二区三区| 激情图区综合网| 久久精品国产亚洲一区二区三区| 亚洲一区二区三区小说| 亚洲精品一二三区| 亚洲免费观看高清完整版在线观看| 欧美mv日韩mv国产网站app| 欧美一区二区日韩一区二区| 欧美色图免费看| 欧美日韩精品三区| 欧美成人精品1314www| 久久众筹精品私拍模特| 国产女人18毛片水真多成人如厕| 国产日本一区二区| 一区二区日韩电影| 污片在线观看一区二区| 七七婷婷婷婷精品国产| 国产一区二区三区在线观看免费视频| 久草在线在线精品观看| 国产成人av电影| av亚洲精华国产精华精| 欧美日韩中文精品| 欧美mv日韩mv国产| 亚洲丝袜精品丝袜在线| 亚洲成人av福利| 国产夫妻精品视频| 欧美日韩国产在线观看| 91精品啪在线观看国产60岁| 亚洲色图欧洲色图婷婷| 欧美aⅴ一区二区三区视频| 成人免费视频一区二区| 欧美精品在线观看播放| 亚洲美女视频在线| 久久精品久久综合| 欧洲精品在线观看| 中文字幕亚洲综合久久菠萝蜜| 午夜一区二区三区视频| 成人污视频在线观看| 欧美va亚洲va在线观看蝴蝶网| 一区二区三区在线观看动漫| 成人一二三区视频| 久久综合久久久久88| 麻豆国产精品官网| 欧美日韩视频一区二区| 亚洲免费观看在线视频| eeuss鲁片一区二区三区| 国产欧美精品一区二区色综合| 亚洲无线码一区二区三区| 色综合久久九月婷婷色综合| 国产精品女人毛片| 国产成人免费xxxxxxxx| 日本一区二区三区四区| 国内一区二区视频| 国产欧美日本一区视频| 99精品热视频| 国产精品乱人伦| 国产精品综合二区| 亚洲乱码日产精品bd| 欧美午夜不卡在线观看免费| 亚洲成人动漫一区| 日韩精品一区二| 国产不卡在线播放| **网站欧美大片在线观看| 97久久超碰国产精品| 亚洲成人综合在线| 精品国产一区二区在线观看| 国产精品一区二区男女羞羞无遮挡| 久久精品亚洲国产奇米99| av中文字幕亚洲| 日产欧产美韩系列久久99| 国产亚洲欧美日韩日本| 欧美日韩一区二区三区高清| 久久99久久久欧美国产| 国产精品高清亚洲| 日韩你懂的电影在线观看| av日韩在线网站| 精品中文字幕一区二区小辣椒| 国产亚洲短视频| 91精品国产综合久久久蜜臀图片| 丰满放荡岳乱妇91ww| 日本vs亚洲vs韩国一区三区| 欧美国产丝袜视频| 欧美tickle裸体挠脚心vk| 欧美日韩一级片网站| 成人午夜免费av| 精品亚洲国产成人av制服丝袜 | 欧美色图天堂网| 国产精品亚洲成人| 麻豆久久一区二区| 亚洲一区二区三区影院| 亚洲人成亚洲人成在线观看图片| 26uuuu精品一区二区| 欧美体内she精高潮| 在线看国产一区| 日本韩国视频一区二区| 99久久国产综合精品色伊 | 精品久久99ma| 亚洲精品久久7777| 亚洲小说欧美激情另类| 亚洲猫色日本管| 亚洲精品视频在线观看网站| 中文字幕欧美一区| 亚洲精品老司机| 日韩主播视频在线| 国产一区二区三区视频在线播放| 日韩不卡一区二区三区| 狠狠色丁香久久婷婷综| 高潮精品一区videoshd| 97精品久久久午夜一区二区三区 | 三级一区在线视频先锋| 免费在线观看成人| 国产乱码精品一区二区三区五月婷| 国产一区二区不卡| 欧美自拍偷拍午夜视频| 久久综合久久鬼色中文字| 亚洲品质自拍视频网站| 日韩精品久久理论片| 韩国女主播成人在线观看| caoporen国产精品视频| 日韩欧美国产1| 亚洲人成精品久久久久| 日本最新不卡在线| 94-欧美-setu| 国产午夜精品在线观看| 亚洲国产毛片aaaaa无费看| 久久99精品久久久久久国产越南 |