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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? card.c

?? M37546產(chǎn)品群智能水表的解決方案,請需要的朋友下載
?? C
字號:
/************************************************************************/
/* Renesas System Solutions (Beijing) Co., LTD.							*/
/* All rights reserved.													*/
/*																		*/
/* File Name		: card.c											*/
/* Description		: 													*/
/*																		*/
/* Current Version	: 1.0												*/
/* Designer			: Feng Jun											*/
/* Start Date		: 2006-11-6											*/
/* Complete Date	: 2006-11-22										*/
/*																		*/
/* Lastest Version	:													*/
/* Designer			:													*/
/* Start Date		: 													*/
/* Complete Date	: 													*/
/************************************************************************/
#include "main.h"


#define DELAY_TIME 2 /* Delay time */
#define TRUE 1
#define FALSE 0

extern void DELAY(unsigned int t);
extern void EEPROMReadNBytes(char *buffer, char n, char addr);
extern void EEPROMWriteNBytes(char addr, char n, char *buffer);
extern void TimerAStart(void);

char cardbuffer[32];
char g_cardstatus;

/*************************************************************************
Name: 			CardCoding
Parameters: 	None
Returns: 		None
Description: 	CardCoding
*************************************************************************/
void CardCoding(char *buffer, char n)
{
	int i;
	for (i=0; i<n; i++)
	{
		buffer[i] ^= 0xa5;
	}

/* other operation such as encrypt */



}
/*************************************************************************
Name: 			CardDecode
Parameters: 	None
Returns: 		None
Description: 	CardDecode
*************************************************************************/
char CardDecode(char *buffer, char n)
{
	int i;
	char sumtemp = 0;
	
	for (i=0; i<n; i++)
	{
		buffer[i] ^= 0xa5;
	}
/* other operation such as encrypt */
	g_cardstatus = buffer[1];			/* Command word */
	
	for (i=0; i<buffer[2]; i++)
	{
		sumtemp += buffer[3+i];
	}
	
/* 	Check checksum */
//	if (sumtemp != buffer[28])
//	{
//		g_cardstatus = 0xff;			/* Not card for this system */
//	}
	
}

/*************************************************************************
Name: 			CardI2CStart
Parameters: 	None
Returns: 		None
Description: 	START CONDITION: A high-to-low transition of io_cardDAT with 
				io_cardCLK high is a start condition which must precede any
				other command.
*************************************************************************/
void CardI2CStart(void)
{
	io_cardDAT = 1;
	io_cardCLK = 1;
	DELAY(DELAY_TIME);
	io_cardDAT = 0;
	DELAY(DELAY_TIME);
	io_cardCLK = 0;
	DELAY(DELAY_TIME);
}

/*************************************************************************
Name: 			CardI2CStop
Parameters: 	None
Returns: 		None
Description: 	STOP CONDITION: A low-to-high transition of io_cardDAT with
				io_cardCLK high is a stop condition. After a read sequence,
				the	stop command will place the E2PROM in a standby power mode.
*************************************************************************/
void CardI2CStop(void)
{
	io_cardDAT = 0;
	io_cardCLK = 1;
	DELAY(DELAY_TIME);
	io_cardDAT = 1;
	DELAY(DELAY_TIME);
	io_cardCLK = 0;
	DELAY(DELAY_TIME);
}

/*************************************************************************
Name: 			CardSend0
Parameters: 	None
Returns: 		None
Description: 	Send 0 to Card, 
*************************************************************************/
void CardSend0(void)   /* SEND ACK */
{
	io_cardDAT = 0;
	io_cardCLK = 1;
	DELAY(DELAY_TIME);
	io_cardCLK = 0;
	DELAY(DELAY_TIME);
}

/*************************************************************************
Name: 			CardSend1
Parameters: 	None
Returns: 		None
Description: 	Send 1 to Card
*************************************************************************/
void CardSend1(void)
{
	io_cardDAT = 1;
	io_cardCLK = 1;
	DELAY(DELAY_TIME);
	io_cardCLK = 0;
	DELAY(DELAY_TIME);
}

/*************************************************************************
Name: 			CardCheckAck
Parameters: 	None
Returns: 		None
Description: 	ACKNOWLEDGE: All addresses and data words are serially
				transmitted to and from the E2PROM in 8 bit words.
				The E2PROM sends a zero to acknowledge that it has received
				each word. This happens during the ninth clock cycle.
*************************************************************************/
char CardCheckAck(void)
{
	bit F0;
	io_cardDAT = 1;
	io_cardCLK = 1;
	ioD_cardDAT = 0; 		/* Change io_cardDAT input */
	DELAY(DELAY_TIME/2);
	F0 = io_cardDAT;
	DELAY(DELAY_TIME/2);
	io_cardCLK = 0;
	DELAY(DELAY_TIME);
	ioD_cardDAT = 1;		/* Output */
	
	if(F0 == 1)
	{
		return FALSE;
	}
	else return TRUE;
}

/*************************************************************************
Name: 			CardWriteI2CByte
Parameters: 	b
Returns: 		none
Description: 	Write a byte to I2C
*************************************************************************/
void CardWriteI2CByte(char b)
{
/*向I2C總線寫一個字節(jié)*/
	char i;
	for(i=0; i<8; i++)
	if((b<<i) & 0x80)
	{
		CardSend1();
	}
	else CardSend0();
}

 

/*************************************************************************
Name: 			CardReadI2CByte
Parameters: 	none
Returns: 		b
Description: 	Write a byte to I2C
*************************************************************************/
char CardReadI2CByte(void)
{
/*從I2C總線讀一個字節(jié)*/
	char b = 0;
	char i;
	
	ioD_cardDAT = 0;		/* io_cardDAT input */
	
	for(i=0; i<8; i++)
	{
		bit F0;
		io_cardCLK = 1;
		DELAY(DELAY_TIME);
		F0 = io_cardDAT;
		DELAY(DELAY_TIME);
		io_cardCLK = 0;
		if(F0 == 1)
		{
			b = b<<1;
			b = b|0x01;
		}
		else b = b<<1;
	}
	ioD_cardDAT = 1;		/* io_cardDAT output */

	return b;
}




/*************************************************************************
Name: 			CardWriteOneByte
Parameters: 	addr:Card address, data
Returns: 		none
Description: 	Write one byte to Card
*************************************************************************/
//void CardWriteOneByte(char addr, char data)
//{
//	char acktemp = 1;
//
//	CardCoding(&data, 1);			/* Coding */
//	
//	CardI2CStart();
//	CardWriteI2CByte( 0xa0 );
//	acktemp = CardCheckAck();
//	CardWriteI2CByte( addr );		/* Address */
//	acktemp = CardCheckAck();
//	CardWriteI2CByte( data );		/* data */
//	acktemp = CardCheckAck();
//	CardI2CStop();
//}

/*************************************************************************
Name: 			CardWriteNBytes
Parameters: 	addr:Card address, data
Returns: 		none
Description: 	Write one byte to Card
*************************************************************************/
void CardWriteNBytes(char addr, char n, char *buffer)
{
	char addrbak = addr;				/* Bakup parameters */
	char nbak = n;

	char i;
	char itimes = 0;					/* read times */
	char acktemp = 0;
	
	CardCoding(buffer, n);			/* Coding */

	while ( itimes<3 && acktemp==0 )	/* if there is an error, write 3 times */
	{
		addr = addrbak;					/* Review parameters */
		n = nbak;
		
		for (i=0; i<n; i++)
		{
			CardI2CStart();
	
			CardWriteI2CByte( 0xa0 );		/* Send command */
			acktemp = CardCheckAck();
			CardWriteI2CByte( addr );		/* Send address */
			acktemp = CardCheckAck(); 
			CardWriteI2CByte( buffer[i] );/* Send data */
			acktemp = CardCheckAck();
		
			CardI2CStop();
			DELAY(DELAY_TIME);
			addr++;
		}
		itimes++;
	}

	if (acktemp == 0)
	{
		B_errorcard = 1;				/* Card error */
	}	
	
}

/*************************************************************************
Name: 			CardWriteAPage
Parameters: 	none
Returns: 		none
Description: 	
*************************************************************************/
/*void CardWriteAPage(char *buffer, char addr)
{
	char acktemp = 1;
	bit wrtmp;
	int i;

	CardI2CStart();
	CardWriteI2CByte( 0xa0 );
	acktemp = CardCheckAck();
	CardWriteI2CByte( addr );
	acktemp = CardCheckAck();
	for(i=0; i<7; i++)
	{
		CardWriteI2CByte( buffer[i] );
		if(!CardCheckAck())
		{
			CardI2CStop();
		}
	 }

	CardI2CStop();
}
*/

/*************************************************************************
Name: 			CardReadOneByte
Parameters: 	addr:Card address, data
Returns: 		none
Description: 	Read one byte from Card
*************************************************************************/
//char CardReadOneByte(char addr)
//{
//	char acktemp = 1;
//	char mydata;
//
//	CardI2CStart();
//	CardWriteI2CByte(0xa0);
//	acktemp = CardCheckAck();
//	CardWriteI2CByte(addr);			/* Address */
//	acktemp = CardCheckAck();
//	CardI2CStart();
//	CardWriteI2CByte(0xa1);
//	acktemp = CardCheckAck();


//	mydata = CardReadI2CByte();
//	acktemp = CardCheckAck();

//	if (acktemp == 1)
//	{
//		B_errorcard = 1;			/* Card error */
//	}
//	else
//	{
//		CardDecode(&mydata, 1);			/* Decode */
//	}
	
//	CardI2CStop();
//	return mydata;
//}

/*************************************************************************
Name: 			CardReadNBytes
Parameters: 	none
Returns: 		none
Description: 	
*************************************************************************/
void CardReadNBytes(char *buffer, char n, char addr)
{
	char nbak = n;
	char addrbak = addr;
	char acktemp = 0;
	char i;
	char itimes = 0;

	while ( itimes<1 && acktemp==0 )	/* if there is an error, read 1 times */
	{
		addr = addrbak;					/* Review parameters */
		n = nbak;

		CardI2CStart();
		CardWriteI2CByte(0xa0);
		acktemp = CardCheckAck();
		CardWriteI2CByte(addr);			/* address */
		acktemp = CardCheckAck();
		CardI2CStart();
		CardWriteI2CByte(0xa1);

		acktemp = CardCheckAck();

		for(i=0; i<n; i++)
		{
			buffer[i] = CardReadI2CByte();
			if(i != n-1)
			CardSend0();			/* Send Acknowledge */
			else
			CardSend1();			/* Send no acknowledge */
		}
		
		CardI2CStop();
		itimes++;
	}

	CardDecode(buffer, n);

	if (acktemp == 0)
	{
		B_errorcard = 1;				/* Card error */
	}	
}

 
/**************************************************************************************************

Description: 	PROCESS FUCTION CARDS

**************************************************************************************************/
void ProcessOpenCard(void)			/* Open an account */
{
				B_timerA3s = 1;
				TimerAStart();		/* TimerA start */
}
void ProcessUserCard(void)			/* User's card */
{
				B_timerA3s = 1;
				TimerAStart();		/* TimerA start */
}
void ProcessCollectCard(void)		/* Collect data */
{
				B_timerA3s = 1;
				TimerAStart();		/* TimerA start */
}
void ProcessSettingCard(void)		/* Setting meter */
{
				B_timerA3s = 1;
				TimerAStart();		/* TimerA start */
}
 
/*************************************************************************
Name: 			ProcessTestCard
Parameters: 	None
Returns: 		None
Description: 	Test card, if the water meter is an null meter, then write
				5 ton water to water meter.
*************************************************************************/
void ProcessTestCard(void)
{
	EEPROMReadNBytes(cardbuffer, 3, 0x04);			/* User's number */
	if (cardbuffer[0]==0 && cardbuffer[1]==0 && cardbuffer[2]==0)
	{												/* NULL meter */
		cardbuffer[0]=0xff;
		cardbuffer[1]=0xff;
		cardbuffer[2]=0xff;
		EEPROMWriteNBytes(0x04, 3, cardbuffer);		/* Write user's number */
		cardbuffer[0]=0;
		cardbuffer[1]=0;
		cardbuffer[2]=0x05;
		EEPROMWriteNBytes(0x13, 3, cardbuffer);		/* Write user's surplus */
		
		B_openvalve = 1;							/* Open the valve */
	}
	else 
	{
		B_errorcard = 1;							/* Not NULL meter, display '讀卡錯' */
		g_statusA = 3;
		B_timerA3s = 1;
		TimerAStart();		/* TimerA start */

	}
	
}

/*************************************************************************
Name: 			ProcessClearCard
Parameters: 	None
Returns: 		None
Description: 	Clear the information of water meter
*************************************************************************/
void ProcessClearCard(void)
{
	int i;
/* Same as the operation power up at the first time */
//	EEPROMReadNBytes(cardbuffer, 0x1c, 0);		/* Read information at the EEPROM */
	
	cardbuffer[0] = 0x68;
	for (i=1; i<0x1c; i++)
	{
		cardbuffer[i] = 0;
	}
	cardbuffer[8] = 2;		/* Threshold of display warning */
	cardbuffer[10] = 2;		/* Threshold of closing valve warning */
	cardbuffer[12] = 3;		/* Limit of purchase */
	cardbuffer[13] = 0xe8;
	
	EEPROMWriteNBytes(0, 0x1c, cardbuffer);	/* Water meter initial */
	
	B_closevalve = 1;		/* Close the valve */
	B_dispvalve = 1;		/* Display '關(guān)閥' */
}

/*************************************************************************
Name: 			ProcessCard
Parameters: 	None
Returns: 		None
Description: 	Card has been inserted, check the type of card and process 
				the corresponding task
*************************************************************************/
void ProcessCard(void)
{
//	int i;
	io_GNDcontrol = 1;			/* Connect GND of card to GND of board */
/* test */	
//	for (i=0; i<40; i++)
//	{
//		cardbuffer[i] = 21+2*i;
//	}
//	CardWriteNBytes(0x50, 40, cardbuffer);
/* test end */
	CardReadNBytes(cardbuffer, 0x1e, 0);	/* Read information at IC card */
	
	
	if (cardbuffer[0]==0xff && cardbuffer[1]==0xff)
	{							/* Not the card for this system */
		io_GNDcontrol = 0;		/* Disconnect GND */
		g_cardstatus = 0;		/* Error */
	}
	
	switch ( g_cardstatus )
	{
		case 0x01:		
					ProcessOpenCard();		/* Open an account */
					g_statusA = 3;
					break;
		case 0x02:		
					ProcessUserCard();		/* Process User's card */
					break;
		case 0x04:		
					ProcessCollectCard();	/* Collect information of water meter */
					g_statusA = 3;
					break;
		case 0xa5:		
					ProcessSettingCard();	/* Setting water meter */
					g_statusA = 3;
					break;
		case 0xa4:
					ProcessTestCard();		/* Process card for test */
					g_statusA = 3;
					break;
		case 0xa6:
		case 0xa7:		
					ProcessClearCard();		/* Clear information of water meter */
					g_statusA = 3;
					break;
		case 0x00:	
		default :
					B_errorcard = 1;		/* Mark error card */
					g_statusA = 3;
					B_timerA3s = 1;
					TimerAStart();		/* TimerA start */
					break;
	}
	
	io_GNDcontrol = 0;		/* Disconnect GND */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女脱光内衣内裤视频久久影院| 日本在线播放一区二区三区| 欧美日韩你懂的| 国产酒店精品激情| 国产一区二区三区最好精华液| 久久精品视频一区二区| 欧美精品在线一区二区三区| 成人网在线播放| 久久精品99国产国产精| 一区二区欧美视频| 国产精品美女久久久久aⅴ| 日韩欧美高清一区| 欧美体内she精视频| 成人动漫视频在线| 狠狠色丁香久久婷婷综合丁香| 亚洲网友自拍偷拍| 最新国产成人在线观看| 国产视频911| 精品三级av在线| 在线不卡a资源高清| 欧美在线免费视屏| 99国产精品久久| 国产suv精品一区二区三区| 青青草原综合久久大伊人精品 | 国产女人水真多18毛片18精品视频| 91福利国产精品| 91视频在线观看免费| 成人动漫一区二区在线| 丁香另类激情小说| 国产夫妻精品视频| 国产精品影视天天线| 九九在线精品视频| 蜜桃精品视频在线| 麻豆91小视频| 久久国产生活片100| 免播放器亚洲一区| 美女精品一区二区| 蜜桃免费网站一区二区三区| 日韩av电影免费观看高清完整版| 免费久久精品视频| 久久99久久99| 国产一区二区精品久久99| 国产成人亚洲综合色影视| 国产成人免费在线视频| 国产成人免费视频网站高清观看视频 | 久久亚洲影视婷婷| 精品日韩99亚洲| 久久婷婷成人综合色| 久久精品视频免费观看| 中文字幕va一区二区三区| 国产精品视频免费| 亚洲视频一二三区| 亚洲国产综合色| 日本麻豆一区二区三区视频| 免费一区二区视频| 韩国精品一区二区| 国产91在线|亚洲| 91老师片黄在线观看| 在线看不卡av| 51精品视频一区二区三区| 精品久久国产字幕高潮| 国产精品亲子伦对白| 亚洲乱码国产乱码精品精可以看 | 高清不卡一区二区在线| 成人免费va视频| 色综合欧美在线视频区| 欧美日韩不卡在线| 精品久久99ma| 一区在线播放视频| 石原莉奈在线亚洲二区| 激情综合色播五月| 一本一道综合狠狠老| 制服丝袜亚洲色图| 国产精品人成在线观看免费| 亚洲国产日韩a在线播放性色| 免费视频一区二区| av网站免费线看精品| 欧美精品777| 中文字幕av一区 二区| 亚洲成人午夜影院| 国产剧情一区在线| 欧美日韩免费观看一区二区三区| 日韩精品在线看片z| 亚洲欧美日本韩国| 国产综合色产在线精品| 在线免费观看一区| 久久久www成人免费毛片麻豆| 一区二区三区在线视频观看| 久久精品国产久精国产爱| 色综合天天综合网天天狠天天| 日韩欧美色综合网站| 亚洲色图视频免费播放| 久久国产精品99精品国产| 色婷婷国产精品| 久久免费精品国产久精品久久久久| 亚洲激情五月婷婷| 国产宾馆实践打屁股91| 日韩欧美电影在线| 亚洲一卡二卡三卡四卡五卡| 国产精品一二三四五| 777奇米四色成人影色区| 中文字幕亚洲精品在线观看| 久久激情五月婷婷| 精品污污网站免费看| 中文字幕一区二区视频| 国产一区二区在线视频| 91精品国产品国语在线不卡| 亚洲精品视频观看| av激情亚洲男人天堂| 久久亚洲一级片| 日本不卡一区二区| 欧美日韩一区二区三区在线看| 亚洲欧洲日韩在线| 成人精品在线视频观看| 欧美精品一区二区三区蜜臀| 青青草视频一区| 欧美美女一区二区在线观看| 一区二区三区在线免费| 99久久精品国产一区二区三区 | 欧洲精品视频在线观看| 国产精品电影一区二区| 成人午夜激情片| 久久精品视频网| 国产电影精品久久禁18| 精品对白一区国产伦| 久久精品国产精品青草| 日韩免费高清视频| 免费成人结看片| 日韩欧美国产精品一区| 日本不卡高清视频| 欧美不卡一区二区三区四区| 青青青伊人色综合久久| 日韩欧美视频在线| 久久精品国产成人一区二区三区 | 日韩不卡一区二区三区| 欧美精品亚洲二区| 亚洲va在线va天堂| 欧美日韩一区 二区 三区 久久精品 | 欧美日本一区二区三区四区| 亚洲国产成人av好男人在线观看| 欧美亚洲国产一区二区三区va | 亚洲国产精品尤物yw在线观看| 色婷婷综合久久久中文一区二区| 亚洲美女精品一区| 色网综合在线观看| 一二三四区精品视频| 欧美日韩一级二级| 日韩高清国产一区在线| 日韩欧美视频一区| 国产jizzjizz一区二区| 综合亚洲深深色噜噜狠狠网站| 91福利在线看| 日日夜夜免费精品视频| 精品美女在线播放| 成人精品一区二区三区中文字幕| 日韩理论片网站| 欧美群妇大交群中文字幕| 久久99精品久久久久久动态图| 久久婷婷成人综合色| 99免费精品视频| 亚洲成人av电影| 精品粉嫩超白一线天av| 97成人超碰视| 日韩黄色片在线观看| 久久久久久麻豆| 91丨国产丨九色丨pron| 午夜久久久影院| 久久久久久毛片| 欧美影片第一页| 国产尤物一区二区在线| 中文字幕亚洲区| 日韩三级视频中文字幕| 成人av网址在线| 日产精品久久久久久久性色| 久久久久国产精品麻豆ai换脸| 色婷婷综合久色| 韩国女主播成人在线观看| 亚洲乱码国产乱码精品精可以看 | 国产福利一区二区三区视频在线| 亚洲免费观看高清| 欧美一个色资源| 91日韩在线专区| 久久国产麻豆精品| 亚洲精品v日韩精品| www激情久久| 欧美视频在线不卡| 丰满放荡岳乱妇91ww| 日韩在线卡一卡二| 亚洲日本在线天堂| 久久久久99精品一区| 欧美三级午夜理伦三级中视频| 国产黄人亚洲片| 日本在线播放一区二区三区| 亚洲欧洲日韩在线| 久久综合色天天久久综合图片| 欧美在线你懂得| 99视频精品在线| 国产老肥熟一区二区三区| 日韩精品五月天| 亚洲精品老司机|