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

📄 driver.h

📁 通过遥控红外信号在电器之间传输数据的软件
💻 H
字号:




#ifndef _DRIVER_H_
#define _DRIVER_H_

#ifdef _DRIVER_C_
#define  _DRIVER_DECLARE_
#else
#define  _DRIVER_DECLARE_    extern
#endif

#ifdef _DRIVER_C_
/* ======================================= */
//MACRO DEFINE
/* ======================================= */
#define NV_DEVICE_ADDR   0xA0


//IR
/*
#define IR_LEADING_TIME     (13500/125)
#define IR_LEADING_DIFF       (2000/125)

#define IR_LOGIC0_END          (1500/125)
#define IR_LOGIC1_END          (2500/125)

#define IR_OUTRANGE_TIME     (16000/125)
*/
//IR TIME COUNTER
#define IR_LEADING_TIME     49768           // = 13.5MS * 3686.5 = 49767.75
#define IR_LEADING_DIFF     7373             // 2 * 3686.5 =  7373
#define IR_LOGIC0_1_BORDER     5530       // 1.5*3686.5 = 5529.75
#define IR_OUTRANGE_TIME     58984                  //16*3686.5 = 58984
#define IR_TIME_7MS               25805                             //7*3686.5 = 25805.5




/* ======================================= */
//DATA TYPE
/* ======================================= */
//Nv Direction enum
typedef enum
{
  NV_NONE,
  NV_WRITE,
  NV_READ,
  NV_END
  
}NV_OPERATION;
//I2c Message Struct
typedef struct
{
 Byte  Direction;
 Byte *pbuffer;
 Byte  DataNum;
 Byte  RetryCount;
 
}I2C_MESSAGE;
//IR detect status
typedef enum
{
    IR_STANDBY,
    IR_CHECK_LEADING,
    IR_REC_DATA,
    IR_REC_END
}IR_DETECT_STATUS;

//Delay type 
typedef enum
{
 DELAY_NONE,
 DELAY_9MS,
 DELAY_4D5MS,
 DELAY_1685US,
 DELAY_565US,
 DELAY_560US,
 DELAY_125US,
 DELAY_FINISH
}IR_SEND_DELAY_TYPE;


/* ======================================= */
//FUNCTION PROTOTYPE
/* ======================================= */
static void NVStartTransfer(Byte number, Byte *pbuffer);
static void IRSendLeadingCode(void);
static void IRSendStop(void);
static void IRSendByte(Byte value);
static void IRSendDelay(Byte delayType);
static void IRModulateCarrierStart(void);
static void I2CStart_InterruptControl(void);
static void I2CEnd_InterruptControl(void);
static void IRSendStart_InterruptControl(void);
static void IRSendEnd_InterruptControl(void);

#endif

/* ======================================= */
/*DATATYPE  DEFINE */
/* ======================================= */
//IR receive data status
typedef enum
{
  REC_NONE,
  REC_SEND_READY,
  REC_DATA_ADDRESS,
  REC_REC_READY,
  REC_N_BYTES,
  REC_16_BYTES,
  REC_ERROR,
  REC_END
  
}IR_REC_DATA_STATUS;

//key index
typedef enum
{
	KEY_NONE,
	KEY_FUNC_SEL,	//key1
	KEY_ACTION,       //key2
	KEY_RESET,         //key3
	KEY_END

}LOCAL_KEY;

/* ======================================= */
//GLOBAL VARIABLE DECLARE 
/* ======================================= */
//IR 
_DRIVER_DECLARE_ Bool  g_bIRDetect;
_DRIVER_DECLARE_ Bool  g_bI2cError;
_DRIVER_DECLARE_ Bool  g_bI2cOk;
_DRIVER_DECLARE_ Bool  g_bKBI;

_DRIVER_DECLARE_ Byte  IDATA  irRecBuffer[19];
_DRIVER_DECLARE_ Byte  DATA   g_ucIRRecDataType;
/* ======================================= */
/* GLOBAL FUNCTION PROTOTYPES */
/* ======================================= */

//timer function 
_DRIVER_DECLARE_ void Delay1ms(Word num);

//I2c Function Declare
_DRIVER_DECLARE_ void NVWriteNByte(Byte n,Byte *pbuffer);
_DRIVER_DECLARE_ void NVReadNByte(Byte n,Byte *pbuffer);
//IR
_DRIVER_DECLARE_ void IRSend_SendReady(void);
_DRIVER_DECLARE_ void IRSend_RecReady(void);
//_DRIVER_DECLARE_ void IRSend_Address(Word address);
_DRIVER_DECLARE_ void IRSend_nByteData(Byte n,Byte *pbuffer);
_DRIVER_DECLARE_ void IRSend_16ByteData(Byte *pbuffer);
_DRIVER_DECLARE_ void IRSend_IrEnd(void);
_DRIVER_DECLARE_ void IRSend_Test(void);
_DRIVER_DECLARE_ void IR_CheckLeadingHander(void);


#endif

⌨️ 快捷键说明

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