⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cardextint.cpp.bak

📁 基于单片机ATmega16制作IC card 。程序中包含数据的采集和通信。
💻 BAK
字号:
//cardExtINT.cpp : source file for the card External Interrupts
//

#include "card.h"
#include "cardExtINT.h"

/////遥控相关位定义
volatile	unsigned char	ReviceDataCount=0;
volatile	unsigned char	IpodLongKey=0;
//unsigned char	b_IrHigh=0;
//unsigned char	b_IrLow=0;
//////BT	RX	AND	TX
volatile unsigned char BtRxFirstData=0;
volatile unsigned char	BtRxRecive=0;

/////////////
unsigned char	b_HeadCodeRecOk=0;
unsigned char	b_ReviceStart=0;

unsigned char	ReviceData1=0;
unsigned char	ReviceData2=0;
unsigned char	ReviceData3=0;
unsigned char	ReviceData4=0;
unsigned char	IrReviceDCodeCount=0;
unsigned char	IrValueCode=0;

unsigned char	IrReviceOverOk=0;
unsigned char	IrReviceLong=0;				//遥控码长按标志标志



unsigned char	BitData;						//数据位
unsigned char	FmIpodMode=0;				//FM/IPOD 模式切换标志
unsigned char	FmPrivacy=0;				//耳机与公放切换标志				


#define	HEAD_LOW_COUNT_H	120		//9MS 6MS-12MS
#define	HEAD_LOW_COUNT_L	60		

#define	FIRST_HEAD_HIGH_COUNT_H	60	//4.5MS	3MS-6MS
#define	FIRST_HEAD_HIGH_COUNT_L	30	
#define	HEAD_HIGH_COUNT_H	30				//2.25MS	1.7MS-3MS
#define	HEAD_HIGH_COUNT_L	17


#define	DATA_LOW_COUNT_H	9				//560US	300US-900US	LOW	LEVEL
#define	DATA_LOW_COUNT_L	3

#define	DATA_HIGH_COUNT_H_ZERO	9	//560US	300US-900US	ZERO	HIGH	LEVEL
#define	DATA_HIGH_COUNT_L_ZERO	3		

#define	DATA_HIGH_COUNT_H_ONE	20	//560US	300US-900US	ONE	HIGH	LEVEL		
#define	DATA_HIGH_COUNT_L_ONE	10	

#define	T_500MS	5
#define	T_2000MS	20






#define	FM_IPOD_CHANNEL_UP						0
#define	FM_IPOD_CHANNEL_DOWN					1
#define	IPOD_MODE_NEXT_CODE						2
#define	IPOD_MODE_BACK_CODE						3
#define	FM_IPOD_HANG_UP_CODE					4					
#define	FM_IPOD_HANG_DOWN_CODE				6	
#define	FM_IPOD_CHANGE_CODE						5	
#define	FM_IPOD_PRIVACY_CODE					7
#define	FM_IPOD_ON_OFF_CODE						8





#define	FM_IPOD			20
#define	CHANNEL_UP_CODE			10


/////////////////////////////////////////////////////////////////////////////
//cardExtINT

void extint_init(void)
{
	//{{WIZARD_MAP(External IRQ)
	// INT0 Enabled, Mode: Logical Change
	// INT1 Enabled, Mode: Logical Change
	MCUCR |= 0x05;
	MCUCSR |= 0x00;
	GICR = 0xc0;
	//}}WIZARD_MAP(External IRQ)
}

/////REVICE	DATA CODE HEAR
void	revice_data_code(void)
{
		ReviceDataCount++;
		if(ReviceDataCount<8)
			{
					ReviceData1|=BitData;
					ReviceData1<<=1;
				
			}	
			else	if(ReviceDataCount==8)
					ReviceData1|=BitData;
			else	if(ReviceDataCount<16)			
			{
				ReviceData2|=BitData;
				ReviceData2<<=1;		
			}
			else	if(ReviceDataCount==16)	
					ReviceData2|=BitData;
			else	if(ReviceDataCount<24)			
			{
				ReviceData3|=BitData;
				ReviceData3<<=1;		
			}
			else	if(ReviceDataCount==24)	
					ReviceData3|=BitData;
			else	if(ReviceDataCount<32)			
			{
				ReviceData3|=BitData;
				ReviceData4<<=1;		
			}
			else	
			ReviceData3|=BitData;
			
}
////REVICE	DATA OVER	AND CLEAR SOME REGISTER
void revice_over_clear(void)
{
			b_HeadCodeRecOk=0;
			b_ReviceStart=0;
			ReviceData1=0;
			ReviceData2=0;
			ReviceData3=0;
			ReviceData4=0;
			IrReviceDCodeCount++;
			IrReviceOverOk=1;
			
					
	
}


////////////
ISR(SIG_INTERRUPT0)			//遥控码接收中断
{
	// TODO: Add your code here
	if(PORTD&IR_PORT)
		{
				//b_IrHigh=TRUE;
				if(b_ReviceStart)		
				{
						if(b_HeadCodeRecOk)
						{
							if((IrDataLow>=DATA_LOW_COUNT_L)&&(IrDataLow<=DATA_LOW_COUNT_H))	//头码低电平时间判断										
									IrDataHigh=0;	
							else	goto L_error;		
						}
						else	
						{
							if((IrDataLow>=HEAD_LOW_COUNT_L)&&(IrDataLow<=HEAD_LOW_COUNT_H))	//数据码低电平时间判断	
									IrDataLow=0;
							else	goto L_error;										
						}			
				}	
				else	IrDataHigh=0;	
		}
		else	
		{
				if(b_ReviceStart)
				{
						if(b_HeadCodeRecOk)
						{
								if((IrDataHigh>=DATA_HIGH_COUNT_L_ZERO)&&(IrDataHigh<=DATA_HIGH_COUNT_H_ZERO))		//接收数据0
								{
												BitData=0;
												revice_data_code();		
								}
								else if((IrDataHigh>=DATA_HIGH_COUNT_L_ONE)&&(IrDataHigh<=DATA_HIGH_COUNT_H_ONE))	//接受数据1
								{
												BitData=1;
												revice_data_code();	
								}	
								else	goto	L_error;	
								if(ReviceDataCount==32)
								{
										ReviceDataCount=0;
										if(!((ReviceData1|ReviceData2)==0xff))
											goto	L_error;
										if(!((ReviceData3|ReviceData4)==0xff))
											goto	L_error;
										switch(ReviceData4)
										{
																																																				
										case	FM_IPOD_CHANNEL_UP:	
												{
														revice_over_clear();																				
														IrValueCode=FM_IPOD_CHANNEL_UP;																																						
												}
												break;
										case 	FM_IPOD_CHANNEL_DOWN:
												{
														revice_over_clear();
														IrValueCode=FM_IPOD_CHANNEL_DOWN;																																						
												}
												break;
												case	IPOD_MODE_NEXT_CODE:	
												{
														revice_over_clear();
														IrValueCode=IPOD_MODE_NEXT_CODE;																																						
												}
												break;
												case	IPOD_MODE_BACK_CODE://FM_IPOD_MODE_DOWN_CODE:	
												{
														revice_over_clear();
														IrValueCode=IPOD_MODE_BACK_CODE;																																						
												}
												break;
												case	FM_IPOD_HANG_UP_CODE://FM_IPOD_RING_CODE:	
												{
														revice_over_clear();
														IrValueCode=FM_IPOD_HANG_UP_CODE;																																						
												}
												break;
											case	FM_IPOD_HANG_DOWN_CODE://FM_IPOD_STAUS_CHANGE_CODE:	
												{
														revice_over_clear();
														IrValueCode=FM_IPOD_HANG_DOWN_CODE;																																						
												}
											break;
											case	FM_IPOD_CHANGE_CODE://FM_IPOD_HANG_DOWN_CODE:	
												{
														revice_over_clear();
														IrValueCode=FM_IPOD_CHANGE_CODE;																																						
												}
											break;
											case	FM_IPOD_PRIVACY_CODE://FM_IPOD_PRIVACY_CODE:	
												{
														revice_over_clear();
														IrValueCode=FM_IPOD_PRIVACY_CODE;																																						
												}
											break;
											case	FM_IPOD_ON_OFF_CODE://FM_IPOD_ON_OFF_CODE:	
												{
														revice_over_clear();	
														IrValueCode=FM_IPOD_ON_OFF_CODE;																																						
												}
											break;
											default:
			      					{
			      						L_error:
			      								b_ReviceStart=0;	
			      								b_HeadCodeRecOk=0;
			      								ReviceData1=0;
														ReviceData2=0;
														ReviceData3=0;
														ReviceData4=0;
			      								ReviceDataCount=0;
			      								IrReviceOverOk=0;
			      								IrReviceLong=0;
			      								IpodLongKey=0;
			      					}		
			      	
			      
			      							break;

										}

				
								}	

							
						}
						else
						{
							if(IrReviceDCodeCount)								//是否是第一次接收遥控码
							{
									if((IrDataHigh>=HEAD_HIGH_COUNT_L)&&(IrDataHigh<=HEAD_HIGH_COUNT_H))
									{
										IrDataLow=0;
										b_HeadCodeRecOk=1;
									}
									else goto	L_error;
										 
					
							}
							else	
							{
								if((IrDataHigh>=FIRST_HEAD_HIGH_COUNT_L)&&(IrDataHigh<=FIRST_HEAD_HIGH_COUNT_H))
									{
										IrDataLow=0;
										b_HeadCodeRecOk=1;
									}
									else goto	L_error;		
														
							}

						
						}	
																										
				}		
				else										//遥控码接收开始
				{	
					b_ReviceStart=1;
					IrDataLow=0;					
						
				}	

		}


/////////////////////遥控码键值处理
		
		if(IrReviceOverOk)
		{
				IrReviceOverOk=0;
				if(IrReviceLong)																														//long key 键值判断
				{
					if((IrValueCode==FM_IPOD_CHANNEL_UP)||(IrValueCode==FM_IPOD_CHANNEL_DOWN))		//FM/IPOD LONG KEY
					{				
							if(IrReviceDCodeCount>=T_500MS)
							{
									bKeyUse =TRUE;
									IrReviceDCodeCount=1;
									if(IrValueCode==FM_IPOD_CHANNEL_UP)
									{																																										
												if(FmIpodMode)																							//fm long key	channel up																															
														KeyValue=KEY_FM_UP;																																														
												else												
														{KeyValue=KEY_IPOD_UP;																	//ipod	long key	UP																																																																					
														IpodLongKey=1;
														}
									
									}
									else
									{
												if(FmIpodMode)																						//fm long key	channel	down																						
														KeyValue=KEY_FM_DOWN;																																														
												else												
														{KeyValue=KEY_IPOD_DOWNP;															//ipod	long key	down																																			
														IpodLongKey=1;
														}
									}
																																								
							}
							
					
					}
																																								
						else	if(IrReviceDCodeCount!=FM_IPOD_HANG_UP_CODE)
							{
									if(IrReviceDCodeCount>=T_2000MS)	
										switch(IrValueCode)		
										{
											case	IPOD_MODE_NEXT_CODE:		
														IpodLongKey=1;
														KeyValue=KEY_IPOD_NEXT;															//ipod	long key	play next
														break;
											case	IPOD_MODE_BACK_CODE:
														IpodLongKey=1;
														KeyValue=KEY_IPOD_BACK;															//ipod	long key	play back										
														break;
											case	FM_IPOD_HANG_DOWN_CODE:
														bKeyUse =TRUE;
														if(!FmIpodMode)
														KeyValue=KEY_OFF_BLUETOOTH;													//bluetooth is off													
														else
														bKeyUse =FALSE;															
														break;
											case	FM_IPOD_PRIVACY_CODE:
														bKeyUse =TRUE;
														KeyValue=KEY_ON_OFF;															//mcu is off
														break;
											case	FM_IPOD_CHANGE_CODE:															//ipod and fm mode change
														if(FmIpodMode)
															FmIpodMode=0;
														else	
															FmIpodMode=1;
															break;
											default:
															break;									
																																																																																																																																																																																																																						
										}
	
							}
	
				
				}
			
				else	
				{
						IrReviceLong=1;
						switch(IrValueCode)			
						{
								case	FM_IPOD_CHANNEL_UP:
								bKeyUse =TRUE;
								if(FmIpodMode)																				//fm short key channel	UP																															
								KeyValue=KEY_FM_UP;																																														
								else																									
								KeyValue=KEY_IPOD_UP;																	//ipod	short key	UP						
								break;	
								case	FM_IPOD_CHANNEL_DOWN:														//fm short key channel	down
								bKeyUse =TRUE;
								if(FmIpodMode)																				//fm short key channel	down																						
								KeyValue=KEY_FM_DOWN;																																														
								else												
									KeyValue=KEY_IPOD_DOWNP;														//ipod	short key	dwon			
								break;
								case	IPOD_MODE_NEXT_CODE:
								bKeyUse =TRUE;
								KeyValue=KEY_IPOD_NEXT;																//ipod	short key	play next
								break;		
								case	IPOD_MODE_BACK_CODE:
								bKeyUse =TRUE;
								KeyValue=KEY_IPOD_BACK;																//ipod	short key	play back	
								break;
								case	FM_IPOD_ON_OFF_CODE:										
								bKeyUse =TRUE;
								KeyValue=KEY_IPOD_STAUS;															//ipod	short key	play pause
								break;
								case	FM_IPOD_HANG_DOWN_CODE:							
								bKeyUse =TRUE;
								if(FmIpodMode)
								KeyValue=KEY_HAND_DOWN;																//fm	short key	hand dowm
								else	
								KeyValue=KEY_IPOD_ENTER;															//ipod	short key play enter
								break;
								case	FM_IPOD_HANG_UP_CODE:
								bKeyUse =TRUE;
								if(FmIpodMode)
								KeyValue=KEY_HAND_UP;																	//fm	short key	hand up
								else	
								KeyValue=KEY_IPOD_MENU;																//ipod	short key play menu
								case	FM_IPOD_PRIVACY_CODE:
								bKeyUse =TRUE;							
								KeyValue=KEY_PRIVACY_ON;																//ipod	short key privacy change
						
								break;
								case	FM_IPOD_CHANGE_CODE:												//	fm	short key	mode change
								bKeyUse =TRUE;
								KeyValue=KEY_MODE_CHANGE;	
								break;
								default:
											break;				
																												
						}	
						

					
				}	
			
			
					
		}

}


//////////
ISR(SIG_INTERRUPT1)
{
	// TODO: Add your code here
	if(!(PIND&BT_RX))
	if(BtRxRecive)
		{BtRxFirstData=1;
		BtRxRecive=1;
		
		}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -