ir.c

来自「IR识别程序,由INT0输入.适合51单片机.」· C语言 代码 · 共 68 行

C
68
字号
#include "header.h"
#include "IR.h"
#define IR_c

enum IrState
{
	IrStart=0,
	IrLead,
	IrData,
	IrStop
};
enum IrState  Ir_State  =   IrStart;

uchar IsDataOk=0;
unsigned long ircode=0x0,irlogic=0x80000000;

void IrCaptureISR(void) interrupt 0
{
	uint IrIntervalTime;
    switch(Ir_State)
	  	{
         	case IrStart:
			timer0_stop();
            		timer0_start();
			Ir_State = IrLead;
                	IsDataOk = 0;
			ircode=0x0;
			irlogic=0x80000000;
			break;
		case IrLead:
		       timer0_stop();
			IrIntervalTime = read_timer0();
			timer0_start();
                	if(IrIntervalTime>=Ir_LeadMin&&IrIntervalTime<=Ir_LeadMax)
                        	Ir_State = IrData;
			else
                        	Ir_State = IrStart;
			break;
          	case IrData:
  		 	timer0_stop();
      		    	IrIntervalTime = read_timer0();
			timer0_start();
			if(IrIntervalTime>=Ir_0_Min&&IrIntervalTime<=Ir_0_Max)
				;          
			else if(IrIntervalTime>=Ir_1_Min&&IrIntervalTime<=Ir_1_Max)
                    		ircode |=irlogic;
			else
				{
				timer0_stop();
				Ir_State = IrStart;
                     	break;
				}
			irlogic>>=1;
			if(irlogic==0)
				{
				timer0_stop();
				IsDataOk = 1;
				Ir_State = IrStart;
				}
			break;
		default:
			timer0_stop();
			Ir_State = IrStart;
	   }
}

#undef IR_c

⌨️ 快捷键说明

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