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

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

?? i2c_div.c

?? 稅控收款機源碼:拼音輸入法,LCD,VFD驅動,IC卡驅動,稅控國標
?? C
字號:
#include  "include.h"

//#define EEpromallbyte  32
#define  GCALL		0x80       // Gen. Call flag
#define  STOP		0x40       // Stop cond. flag
#define  INTR		0x20       // Interrupt cond flag
#define  TX_MODE	0x10       // I2C Tx mode flag
#define  BBUSY		0x08       // Bus Busy flag
#define  BLOST		0x04       // Bus Lost flag
#define  _ACKREP	0x02       // ACK response flag
#define  SLV		0x01       // Slave Mode flag

// S2CON Equates:
#define  CR2		0x80		// 
#define  ENI		0x40		// 
#define  STA		0x20		// 
#define  STO		0x10		// 
#define  ADDR		0x08		// 
#define  AA			0x04		// 
#define  CR1		0x02		// 
#define  CR0		0x01		//

//extern uchar time_mode_buf;
//extern uchar prt_mode;
//extern uchar write_data_flg;
 bit	I2C_Busy;
 bit	I2C_NoAck;
 bit	I2C_Lost;
 bit	I2C_Fault;
 //int  data  *Ptr;
 char idata *IBuffer;
 char xdata *XBuffer;
 char data I2C_SendLen;
 char data I2C_RcvLen;
 bit  First,Area;
 bit  I2C_master, I2C_xmit;
sbit PWROFF=P3^2;
//uchar read_eeprom(uint addr,uchar length,void *eprom_buf);
//extern void delayms(uint t1);
//extern void send_str(uint length,uchar xdata *buffer);       
//extern void send_char(uchar ch);
//extern uchar Write_FAU_data(uchar type,uchar result);                    

//extern void delay_ms(uchar ms);
//extern uchar testbuf[64];
//-------------------------------------------------- 
//	I2C Initialization Routine
//--------------------------------------------------
void I2C_Init(bit Mode)  //0,收。1,發   
{
    if(low_pwr)shut_bat(0);
  	P3SFS |= 0xC0;						// Enable P3.7 for SCL, P3.6 for SDA
	IEA	  |= 0x02;						// set EI2C I2C Int. Enable bit

	I2C_master = 1;
	I2C_xmit  = !Mode;	

	I2C_Busy  = 1;
	I2C_NoAck = 0;
	I2C_Fault = 0;  

}	


/*================================================*/      
BOOL I2C_Send(char SLAVE,bit type,int addr,char I2C_Num)
{
    
  	I2C_Init(0);
	if ((P3 & 0xc0) != 0xc0)
	{
		I2C_Fault = 1;
		return FALSE;
	}
		
	Area = type;
	IBuffer = addr;
	XBuffer = addr;
	I2C_SendLen=I2C_Num;	

	if (I2C_SendLen == 0) 
		return TRUE;

	I2C_SendLen--;

	S2DAT =SLAVE;

	S2CON = 0xe1;

	while(I2C_Busy);
	return TRUE;
   /*
	I2C_Init(0);
	if ((P3 & 0xc0) != 0xc0)
	{
      
		I2C_Fault = 1;
		return FALSE;

	}
		
	Area = type;
	//IBuffer = addr;
	XBuffer = addr;
	I2C_SendLen=I2C_Num;	

	if (I2C_SendLen == 0) 
		return TRUE;

	I2C_SendLen--;
       
	S2DAT =SLAVE;             //寫SLAVE 0XA0 地址 啟動中斷
	S2CON = 0xe2;             //開啟I2C模式置中斷標志
	Area = type;
    //if((low_pwr)&&(SLAVE==0x64))return(POWER_OFF);
    while(I2C_Busy);
	 return TRUE;

//	while(I2C_Busy);
	//return TRUE;
 */
}

/*================================================*/      
BOOL I2C_Rcv(char SLAVE,bit type,int addr, char I2C_Num)
{
  	I2C_Init(1);

	if ((P3 & 0xc0) != 0xc0)
	{
		I2C_Fault = 1;
		return FALSE;
	}

	Area = type;
	IBuffer = addr;
	XBuffer = addr;
	I2C_RcvLen = I2C_Num;

	if (I2C_RcvLen == 0) 
		return TRUE;
	I2C_RcvLen--;

	First = 0;
		
        S2DAT = SLAVE | 0x01;
	S2CON = 0xe1;

	while(I2C_Busy);
	return TRUE; 
 /* I2C_Init(1);

	if ((P3 & 0xc0) != 0xc0)
	{
      
		I2C_Fault = 1;
		return FALSE;

	}

	Area = type;
	//IBuffer = addr;
	XBuffer = addr;
	I2C_RcvLen = I2C_Num;

	if (I2C_RcvLen == 0) 
		return TRUE;
	I2C_RcvLen--;
	First = 0;
	S2DAT = SLAVE | 0x01;
	S2CON = 0xe2;        //開啟I2C模式置中斷標志
   
	while(I2C_Busy);
	             
	return TRUE;
  */
}

/*================================================*/      
void I2C_Send_data(void)
 {
   	S2CON &= ~STA;	
  	if (I2C_SendLen == 0x00)
	{
		if ((S2CON & 0x10) != 0) 
			I2C_Busy=0;

		if (!Area)
		{
			S2DAT = *IBuffer;
		}
		else 
		{
			S2DAT = *XBuffer;
		}
		S2CON |= STO;
	}	
	else 
	{
		I2C_SendLen--;
		if (!Area)
		{
			S2DAT = *IBuffer;
			IBuffer++;
		}
		else 
		{
			S2DAT = *XBuffer;
			XBuffer++;
		}
	}	
  /* S2CON &= ~STA;	  //~0x20
  	if (I2C_SendLen == 0x00)
	{
		if ((S2CON & 0x10) != 0) 
			I2C_Busy=0;
//		I2C_SendLen--;
		/*if (!Area)
		{
			S2DAT = *IBuffer;
		}
		else 
		{
			S2DAT = *XBuffer;
			
		//}
		S2CON |= STO;
	}	
	else 
	{
		I2C_SendLen--;
		
		/*if (!Area)
		{
			S2DAT = *IBuffer;
			IBuffer++;
		}
		else 
		{
			S2DAT = *XBuffer;
           	XBuffer++;
			
			
		//}
	}
 */		
}    
/*================================================*/      
I2C_Rcv_data(void)
{
  if (!First)
	{
		First = 1;	
		S2CON &= ~STA;
		S2DAT = 0xff;
		S2CON |= AA;
	}
	else if (I2C_RcvLen == 0x00)
	{	
	
		
		if (!Area)
		{
			*IBuffer =  S2DAT;
		}
		else
		{
			*XBuffer =  S2DAT;
		}
	//	if ((S2CON & 0x10) != 0)
			I2C_Busy=0;
		    S2CON |= STO;

	}
	else 
	{ 
		I2C_RcvLen--;
		if (I2C_RcvLen == 0x00)
		{
			S2CON &= ~AA;
			S2CON |= STO;
		}
         
		if (!Area)
		{
			*IBuffer =  S2DAT;
			IBuffer++;
		}
		else
		{
			*XBuffer =  S2DAT;
			XBuffer++;
		}
	}
	
/*if (!First)
	{
		First = 1;	
		S2CON &= ~STA;
		S2DAT = 0xff;
		S2CON |= AA;
	}
else if (I2C_RcvLen == 0x00)
	{	
	
		
		/*if (!Area)
		{
			*IBuffer =  S2DAT;
		}
		else
		{
			*XBuffer =  S2DAT;
		//}
	//	if ((S2CON & 0x10) != 0)
			I2C_Busy=0;
		    S2CON |= STO;

	}
else 
	{ 
		I2C_RcvLen--;
		if (I2C_RcvLen == 0x00)
		{
			S2CON &= ~AA;
			S2CON |= STO;
		}
         
		/*if (!Area)
		{
			*IBuffer =  S2DAT;
			IBuffer++;
		}
		else
		{
			*XBuffer =  S2DAT;
			XBuffer++;
		//}
	}
 */	
}
//===================================================================================
/*******************************************************
 函數名稱:initial_time                                                        
 函數描述:初始化時鐘                                                        
 輸入參數:              
 輸出參數:
 返回值:                                     
 *******************************************************/
/*uchar initial_time(void)
{
  uchar I2C_SendBuffer[4];	
  I2C_SendBuffer[0] = 0x70; // addr
  I2C_SendBuffer[1] = 0x00;//set offset
	if(!I2C_Send(0x64,1,(int)&I2C_SendBuffer,2))
   return (1); 
  I2C_SendBuffer[0] = 0xe0; // addr
  I2C_SendBuffer[1] = 0x20;//set control1
  I2C_SendBuffer[2] = 0x20;//set control2
	if(!I2C_Send(0x64,1,(int)&I2C_SendBuffer,3)) 
   return (1);
 else
   return (0);  
}
*/
/*******************************************************
 函數名稱:set_rtc                                                        
 函數描述:設置時鐘                                                        
 輸入參數:buf[0]-buf[6]=年、月、日、時、分、秒,格式為BCD碼              
 輸出參數:
 返回值:設置正確返回0,否則返回1                                        
 *******************************************************/
uchar set_rtc(uchar *rtc_buf)
{
	uchar I2C_SendBuffer[8];	
	I2C_SendBuffer[0] = 0x00; // addr
	I2C_SendBuffer[1] = rtc_buf[5];//秒
	I2C_SendBuffer[2] = rtc_buf[4]; //分
	I2C_SendBuffer[3] = rtc_buf[3]; //時
	I2C_SendBuffer[4] = rtc_buf[6]; //星期
	if(I2C_SendBuffer[4]>6)I2C_SendBuffer[4]=0;
	I2C_SendBuffer[5] = rtc_buf[2]; //日
	I2C_SendBuffer[6] = rtc_buf[1]; //月
	I2C_SendBuffer[7] = rtc_buf[0];//年
	//write_data_flg=1;
	//send_str(8,I2C_SendBuffer);
	if(!I2C_Send(0x64,1,(int)&I2C_SendBuffer,8)) 
	{
		IEA&= 0xfd;
		P3SFS&= 0x3f;
		S2CON&= 0xbf;
		//write_data_flg=0;
		return (1);
	}
	else    
	{
		IEA&= 0xfd;
		P3SFS&= 0x3f;
		S2CON&= 0xbf;
		return (0);
	}
}
//=======================================================
/*******************************************************
 函數名稱:Writ_ctr_rtc                                                        
 函數描述:寫時鐘的設置數據                                                        
 輸入參數:地址:rtc_add,數據:rtc_data              
 輸出參數:
 返回值:設置正確返回0,否則返回1                                        
 *******************************************************/
uchar Writ_ctr_rtc(uchar rtc_add,uchar rtc_data)
{
	uchar I2C_SendBuffer[2];	
	I2C_SendBuffer[0] = rtc_add; // addr
	 I2C_SendBuffer[1] = rtc_data;//數據
	//write_data_flg=1;
	if(!I2C_Send(0x64,1,(int)&I2C_SendBuffer,2))
	{
		IEA&= 0xfd;
		P3SFS&= 0x3f;
		S2CON&= 0xbf;
		// write_data_flg=0;
		return (1);
	} 
	else   
	{
		IEA&= 0xfd;
		P3SFS&= 0x3f;
		S2CON&= 0xbf;
		//write_data_flg=0;
		return (0);
	}
}
/*******************************************************
 函數名稱:read_rtc                                                        
 函數描述:讀時鐘                                                          
 輸入參數:無                                                              
 輸出參數:buf[0]-buf[5]=年、月、日、時、分、秒,格式為BCD碼                                        
 返回值:   設置正確返回0,否則返回1              
 ******************************************************/
uchar read_rtc(uchar *rtc_buf)
{
	uchar I2C_SendBuffer[2];
	uchar I2C_RcvBuffer[8];
   
	I2C_SendBuffer[0] = 0x00;     	// ST85 secs=00	
	//if(low_pwr) return(POWER_OFF);
	//write_data_flg=1;
	if(!I2C_Send(0x64,1,(int)&I2C_SendBuffer,1)) 
	{
		IEA&= 0xfd;
		P3SFS&= 0x3f;
		S2CON&= 0xbf;
		//write_data_flg=0;
		return (1);
	}
	if(!I2C_Rcv(0x64,1,(int)&I2C_RcvBuffer,8))
	{
		IEA&= 0xfd;
		P3SFS&= 0x3f;
		S2CON&= 0xbf;
		//write_data_flg=0;
		return (1);
	}
	else  
	{
		rtc_buf[0]=I2C_RcvBuffer[7];   //年
		rtc_buf[1]=I2C_RcvBuffer[6];   //月
		rtc_buf[2]=I2C_RcvBuffer[5];   //日
		rtc_buf[3]=I2C_RcvBuffer[3];   //時
		//if(!time_mode_buf)rtc_buf[3]&=0xdf;//12小時制
		rtc_buf[4]=I2C_RcvBuffer[2];   //分
		rtc_buf[5]=I2C_RcvBuffer[1];  //秒
		rtc_buf[6]=I2C_RcvBuffer[4];
		if(rtc_buf[6]>6)rtc_buf[6]=0;
	}
	IEA&= 0xfd;  
	P3SFS&= 0x3f;
	S2CON&= 0xbf;
	//write_data_flg=0;
	return (0);
}
 
//======================================================================================
#define MAXLEN 32//24c64 為32 24C256為64
uchar write_eeprom(uint addr,uchar length,void *buf)
{  
   uchar I2C_SendBuffer[34];
   uchar temp_len;
   uint addrtemp;
   uchar len,j,i;

  
   if(length<255)
   {
    //write_data_flg=1;
     len=(MAXLEN-(uchar)(addr%MAXLEN));
	 j=1;
	//temp_len=(length>(MAXLEN-(uchar)(addr%MAXLEN)))?(MAXLEN-(uchar)(addr%MAXLEN)):length;//防止跨頁
	 addrtemp=addr;
     temp_len=len;
	 if(length>temp_len)
	  {
       if((length-len)%MAXLEN)j+=((length-len)/MAXLEN)+1;
	   else          j+=((length-len)/MAXLEN);
	  }
	 else temp_len=length;
	 i=0;
	 //offset=0;
	 while(i<j)
	  {
      
      I2C_SendBuffer[0] = addrtemp/256; //高位地址
      I2C_SendBuffer[1] = addrtemp%256;//低位地址
	 
      memcpy(&I2C_SendBuffer[2],((uchar*)buf),temp_len);
	  if(!PWROFF)shut_bat(0);
	  if(!I2C_Send(0xa0,1,(int)&I2C_SendBuffer,temp_len+2))
       {
	   IEA&= 0xfd;
	   P3SFS&= 0x3f;
	   S2CON&= 0xbf;
	   return (1);
	   }
	  if((j==1)||(i==j))break; //寫完退出
	  delayms(50) ;
	  addrtemp+=temp_len;
	  
      ((uchar*)buf)+=temp_len;
	  i++;
	  if(i!=j-1)temp_len=MAXLEN;
	  else      temp_len=length-len-MAXLEN*(i-1);
      
	 }
     //write_data_flg=0;
	 delayms(50) ;
	 IEA&= 0xfd;
     P3SFS&= 0x3f;						// disable P3.7 for SCL, P3.6 for SDA
	 S2CON&= 0xbf;                     //關I2C模式
    return 0;
	
   }
 
 else  return 1;
}


/**********************************
函數功能:向EPROM發讀數據命令
函數參數:addr為起始地址,length為讀取數據的長度,讀出的數據存放在ack_data指向的單元
返回值:  0:正確		否則錯誤		
**********************************/
uchar read_eeprom(uint addr,uchar length,void *eprom_buf)
{
   uchar I2C_SendBuffer[2];
   
   I2C_SendBuffer[0] = addr/256; /*高位地址*/
   I2C_SendBuffer[1] = addr%256;/*低位地址*/
   //write_data_flg=1;
  if(!I2C_Send(0xa0,1,(int)&I2C_SendBuffer,2))        
   {
   IEA&= 0xfd;
   P3SFS&= 0x3f;
   S2CON&= 0xbf; 
  //write_data_flg=0;
   return 1;
   }
  if(!I2C_Rcv(0xa0,1,(int)((uchar*)eprom_buf),length))
   {
   IEA&= 0xfd;
   P3SFS&= 0x3f;
   S2CON&= 0xbf; 
   //write_data_flg=0;
   return 1;
   }
  else                       
   {   
    delayms(50) ;
    IEA&= 0xfd;
	P3SFS&= 0x3f;
	S2CON&= 0xbf;
	//write_data_flg=0;
	return 0;
	}
}

//===================================================================
/*uchar read_eepromZIKU(ulong addr,uchar length,uchar  *eprom_buf)
{
   uchar I2C_SendBuffer[2],i;
   
    if(addr>=0x18000)
   { 
    for(i=0;i<length;i++){eprom_buf[i]=xiao[i];}                     
    return (1);
    }          
   I2C_SendBuffer[0] = addr/256; /*高位地址
   I2C_SendBuffer[1] = addr%256;/*低位地址
   if(!I2C_Send(0xa2,1,(int)&I2C_SendBuffer,2))return (1);
   if(!I2C_Rcv(0xa2,1,(int)eprom_buf,length))  return (1);
   else                                        return (0);
}
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久综合精品| 色综合欧美在线视频区| 日韩一级免费观看| 麻豆精品一区二区| 久久中文娱乐网| 99免费精品在线| 亚洲免费高清视频在线| 欧美日韩一区高清| 久久草av在线| 亚洲欧洲日本在线| 欧美日韩三级在线| 精品在线观看视频| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美日韩美少妇| 精品亚洲porn| 亚洲视频免费看| 337p亚洲精品色噜噜| 国产成人av影院| 亚洲永久精品国产| 久久综合久久综合亚洲| 91亚洲国产成人精品一区二区三 | 91黄视频在线| 蜜桃久久精品一区二区| 中文字幕不卡一区| 91精品国产综合久久精品图片| 激情综合五月天| 亚洲男同性视频| wwwwxxxxx欧美| 欧美色视频在线| 成人伦理片在线| 日韩在线观看一区二区| 中文在线免费一区三区高中清不卡| 91国产福利在线| 国产超碰在线一区| 日韩国产一二三区| 亚洲日本在线看| 精品国产髙清在线看国产毛片| 色婷婷国产精品久久包臀| 久久国产精品72免费观看| 一区二区三区.www| 国产亚洲一区二区在线观看| 欧美日韩精品高清| 色婷婷精品久久二区二区蜜臂av| 精品一区二区久久久| 亚洲成人av资源| 亚洲女人的天堂| 国产日韩综合av| 精品国产乱码久久久久久影片| 欧美天天综合网| 91首页免费视频| 成人性生交大片免费| 久久99精品久久久久久| 亚洲一区二区欧美| 亚洲视频免费看| 国产精品久久久一本精品| 久久一二三国产| 欧美大胆一级视频| 欧美精品久久久久久久多人混战 | 一区二区三区不卡在线观看 | 欧美三级中文字| 一本久久a久久免费精品不卡| 国产电影精品久久禁18| 久久福利视频一区二区| 午夜精品久久久久久| 亚洲一区二区三区四区五区中文| 国产精品不卡一区二区三区| 日本一区二区三区四区在线视频| 久久久青草青青国产亚洲免观| 91精品欧美久久久久久动漫| 欧美日韩一卡二卡| 欧美日韩美女一区二区| 欧美日韩一级视频| 欧美高清视频www夜色资源网| 欧美亚洲一区二区在线观看| 日本韩国一区二区三区| 色综合视频在线观看| 在线视频一区二区三区| 欧美影视一区二区三区| 欧美日韩一区二区三区四区五区 | 韩国一区二区三区| 国内外成人在线| 国产一区二区三区国产| 国产91富婆露脸刺激对白| 国产成人欧美日韩在线电影| 不卡影院免费观看| 色偷偷一区二区三区| 欧美又粗又大又爽| 欧美一区二区免费视频| 欧美不卡一区二区三区四区| www精品美女久久久tv| 国产午夜亚洲精品理论片色戒| 国产偷v国产偷v亚洲高清| 国产精品色一区二区三区| 亚洲欧美激情一区二区| 天堂久久久久va久久久久| 美女视频黄a大片欧美| 国产精品资源在线| www.一区二区| 91精品国产综合久久香蕉的特点| 久久日韩粉嫩一区二区三区| 中文字幕一区在线观看视频| 一区二区三区四区国产精品| 午夜激情久久久| 国产精一品亚洲二区在线视频| 成人aa视频在线观看| 欧美日韩美女一区二区| 国产亚洲欧美中文| 一区二区三区欧美日| 美女网站色91| 99re热视频这里只精品| 日韩一区二区在线免费观看| 欧美国产一区视频在线观看| 亚洲一区国产视频| 国产河南妇女毛片精品久久久| 91网站黄www| 欧美不卡一区二区三区四区| 亚洲人成网站影音先锋播放| 蜜臀av一区二区在线免费观看| av不卡在线观看| 欧美一区二区三区在线看| 欧美国产一区视频在线观看| 日韩高清国产一区在线| 不卡电影一区二区三区| 91精品国产入口在线| 亚洲女同ⅹxx女同tv| 国产一区二区三区国产| 欧美日韩一级片在线观看| 国产精品欧美综合在线| 日本亚洲欧美天堂免费| 91在线视频播放地址| 精品欧美黑人一区二区三区| 亚洲国产精品尤物yw在线观看| 国产成人免费高清| 91精品国产一区二区| 一区二区成人在线观看| 国产成人精品亚洲午夜麻豆| 在线观看91av| 亚洲精品伦理在线| 国产成人免费在线| 精品处破学生在线二十三| 午夜国产精品影院在线观看| 色婷婷综合激情| 国产精品免费视频一区| 国产一区二区三区免费在线观看| 337p亚洲精品色噜噜噜| 亚洲国产一区二区在线播放| 一本一本大道香蕉久在线精品| 国产精品无人区| 国产成人免费高清| 久久久久九九视频| 国产在线不卡一卡二卡三卡四卡| 91精品一区二区三区在线观看| 亚洲v日本v欧美v久久精品| 91网址在线看| 亚洲色大成网站www久久九九| 东方欧美亚洲色图在线| 国产亚洲综合色| 国产精品影视天天线| 精品免费日韩av| 黄色成人免费在线| 久久精品一区二区三区不卡牛牛| 美女国产一区二区| 日韩一区二区影院| 久久99国产精品久久99果冻传媒| 日韩一区二区在线免费观看| 日韩不卡手机在线v区| 4438成人网| 蜜臀va亚洲va欧美va天堂| 日韩亚洲欧美一区| 久草这里只有精品视频| 日韩欧美一级在线播放| 国产一区二区三区在线观看免费视频| 精品久久久三级丝袜| 国产成人av自拍| 中文字幕日本不卡| 在线这里只有精品| 五月激情综合色| 精品国内二区三区| 成人激情综合网站| 亚洲精品视频在线观看网站| 欧美午夜寂寞影院| 91久久精品国产91性色tv| 亚洲人成精品久久久久久| 欧美日韩成人一区| 精品在线免费观看| 国产精品盗摄一区二区三区| 色婷婷精品久久二区二区蜜臀av | 日韩一二在线观看| 国产成人av电影在线| 亚洲素人一区二区| 91精品国产综合久久国产大片| 国模娜娜一区二区三区| 国产精品二区一区二区aⅴ污介绍| 欧美在线看片a免费观看| 午夜不卡av免费| 国产日韩欧美在线一区| 色婷婷激情综合| 韩国av一区二区三区四区| 中文字幕一区二区三区蜜月| 欧美另类久久久品|