8位单片机只用一个定时器T0进行红外解码,包括短按、长按处理,模拟串口打印数据

最近自己在网上搜了很多资料,发现很多的红外解码,关于重码的处理的代码很少,分享一下红外解码包括重码的处理。
使用单片机:EN8F156
功能说明:红外遥控器解码,只使用定时器T0定时100us进行按键解码,处理按键短按与长按,将解码的数据通过串口打印。

/***************************************
功能说明:红外遥控器解码,定时器T0定时100us进行按键解码,处理按键短按与长按,串口打印解码数据。
****************************************/
#include "SYSCFG.h"
#define  uchar     unsigned char 
#define  uint      unsigned int

#define 	IR_PIN 	PA2	//红外输入
#define 	PIN_TX 	PC0 //串口发射


//IR接收变量
#define	IR_Long_Time	20			//110*20 = 2200ms
uchar	Receive_Count = 0;  		//红外接收计位数
uchar	Low_Level_Time = 0;			//低电平时间
uchar	High_Level_Time = 0;		//高电平时间
uchar   UserCode_High = 0;
uchar	UserCode_Low = 0;			//存放用户码1
uchar	Data_Code = 0;				//存放数据码
uchar	IR_Temp = 0;				//存放数据码反码
uchar   Repeat_Count = 0;			//重码计数   
//IR接收标志
bit	Data_Receive_Flag = 0;       	//数据接收标志
bit	Begin_Flag = 0;        			//同步码标志
bit Receive_Error_Flag = 0;         //接收失败
bit Start_Receive_Flag = 0;     	//开始标志 
bit Receive_Over_Flag = 0;			//键码解码完毕
bit Repeat_Flag = 0;				//重码标志
bit Ready_Repeat_Det_Flag = 0;		//准备接受重码  


/*-------------------------------------------------
 *  函数名:POWER_INITIAL
 *	功能:  上电系统初始化 系统时钟4MhZ/2 = 2MhZ
 *  输入:  无
 *  输出:  无
 --------------------------------------------------*/	
void MCU_INIT(void) 
{
    
	OSCCON = 0B01010001;//WDT 32KHZ IRCF=101=4MHZ/2=2MHZ,0.5US/T
					 //Bit0=1,系统时钟为内部振荡器
					 //Bit0=0,时钟源由FOSC<2:0>决定即编译选项时选择
	OPTION = 0B00001000;//Bit4=1 WDT MODE,PS=000=1:1 WDT RATE
					 //Bit7(RAPU)=0 ENABLED PULL UP PA
		
	TRISA = 0x04;		//PA2输入
	TRISC = 0x00;		//
	PORTA = 0B00000000;		//	
	PORTC = 0B00000000;		//
	WPUA = 0B00000000;     //PA端口上拉控制 1-开上拉 0-关上拉
	WPUC = 0B00000000;     //PC端口上拉控制 1-开上拉 0-关上拉
	MSCKCON = 0B00000000;//6B->0,禁止PA4,PC5稳压输出
					  //5B->0,TIMER2时钟为Fosc
					  
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值