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

📄 timeint.c

📁 ir通信协议
💻 C
字号:
#include "tab.h"
#include "78e65.h"
#include <stdio.h>
#include "reg51x.h"
#include <intrins.h> 
//#include "ioprot.h"
sbit  IR  =  P4^2;
//*****************************IR receiver ********************************
	unsigned int uiIRcode=0;
	unsigned char ucIRvalue=0;
	unsigned char ucIR_value=0;
	bit bir_ok_flag;
	unsigned char ucIR_count;//ret ir  process value
	unsigned char GetCycle(void);
	void DELAY_X15us_pin(unsigned char xus);//delay=(xus+1)*15us
	unsigned char IR_process_uc(unsigned char ucvalue);

//***********************music out interrupt end  ***********************
//***********************IR_process_uc*******************************
unsigned char IR_process_uc(unsigned char ucvalue_p){
	unsigned char count;
		switch(ucvalue_p){
			case 0x12://0
				count=0;
				break;
			case 0x22:// 1
				count=1;
				break;
			case 0xa2:// 2
				count=2;
				break;
			case 0x62:// 3
				count=3;
				break;
			case 0x60:// 4
				count=4;
				break;
			case 0xe0:// 5
				count=5;
				break;
			case 0x82:// 6
				count=6;
				break;
			case 0x68:// 7
				count=7;
				break;
			case 0x02:// 8
				count=8;
				break;
			case 0xaa:// 9 
				count=9;
				break;
			case 0x70:// 10
				count=10;
				break;				
			case 0x48://L key
				count=41;
				break;
			case 0xd2://R key
				count=42;
				break;
			case 0x52://UP key
				count=43;
				break;
			case 0x72://down key
				count=44;
				break;
			case 0x50://select key
				count=45;
				break;
			case 0xc2://cancel key
				count=46;
				break;
			case 0xca://menu key
				count=47;
				break;
			case 0x58://display off/on  key
				count=48;
				break;	
			default: count=0xff;
				break;
		}
	return count;
}
//***********************************************************************
//*****************************IR receiver program***************************
void int3_interrupt() interrupt 7  {
	unsigned char i;
	unsigned char Count;
	unsigned long IR_data;
	bit  bir_start_flag;
	//EA=0;
	EX3 = 0;
	IE3=0;
	//TR0=0;
	 bir_start_flag=0;
	 //bir_ok_flag=0;
	IR_data=0;
	Count=GetCycle();
	//SBUF=Count;	
	if((Count>170) &&(Count<217)){	//11~14.5ms	(13.5ms)(196,197)
		bir_start_flag=1;		
		//printf("ir_start_ok\n");		
	 }//repeat press some button .
	else{
		EX3 = 1;
		return ;
	}						//not all			
	//-----------------------------------------------------------
	if(bir_start_flag){			//begin to receive the ir_code . 
		for(i=32;i>0;i--){
			Count=GetCycle();   IR_data <<= 1;	
			//SBUF=Count;
			if((Count>19) && (Count<37))   	 IR_data ++;// 2~2.5ms(2.24ms)(32)
			else if((Count>4) && (Count<19))   ;//0.85~1.3ms(1.12ms)(15,16,17)
			else {
				EX3=1;
			  	return;
			}
		}
	}
	ucIR_value=(char)IR_data;	IR_data>>=8;			
	ucIRvalue=(char)IR_data;	IR_data>>=8;			
	uiIRcode=(int)IR_data;
	bir_ok_flag=1;
	ucIR_count=IR_process_uc(ucIRvalue); //*/
	EX3=1;
}
//=========================================
unsigned char GetCycle(void){
    unsigned char  a;
	a=0;
	while(IR==0) {
          DELAY_X15us_pin(3);//delay60us
		  a++;
		  if(a>170){//>10.5ms
		  	return a;
		  	}
		 }
	while(IR) {
          DELAY_X15us_pin(3);//delay60us
		  a++;
		  if(a>231){//>15ms
		  	return a;
		  	}
		 }
	return(a);
}
//=================DELAY_x10us(delay=15*(x+1)us) f=12M IR PIN change exit =================================
void DELAY_X15us_pin(unsigned char xus){
unsigned char j,i;
i=IR;
for(j=0;j<xus;j++){
	_nop_();_nop_();
	if(i!=IR)break;
}
}
//*****************************IR receiver program  end ***************************

⌨️ 快捷键说明

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