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

📄 pt2262_decode.c

📁 pt2262芯片解码,at89c51的,如果要用到产品用,需再增加一些软件滤波来提高其可靠性,供学习用,
💻 C
📖 第 1 页 / 共 2 页
字号:
}

/*********************************************************************************************************
** 函数名称: time
** 功能描述: 系统时间处理
** 输 入: 无
** 输 出: 
** 全局变量: 
** 调用模块: 
**
** 作 者: gl
** 日 期: 2007年01月15日
**-------------------------------------------------------------------------------------------------------
** 修改人: gl
** 日 期: 2007年01月15日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void time()
{
	if(_1SFG)
	{
		P3 ^= 0xff;						//DEBUG COMMAND,每秒闪烁一次
		_1SFG = 0;						//0.5秒
		if(++_1Scount >=120)
		{
			_1Scount = 0;				//1分
			if(++_1Mcount > 60)
			{
				_1Mcount = 0;			//1小时
				if(++_1Hcount >=24)
				{
					_1Hcount = 0;		//1天
				}
			}
		}
	}	

}
/*********************************************************************************************************
** 函数名称: function1
** 功能描述: 功能处理,输出功能控制
** 输 入: 无
** 输 出: 无
** 全局变量: 
** 调用模块: 
**
** 作 者: gl
** 日 期: 2007年01月15日
**-------------------------------------------------------------------------------------------------------
** 修改人: gl
** 日 期: 2007年01月21日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void	function1() 
{
	if(have_count >= 5)
	{
		have_count = 0;
		switch(keys)
		{
			case 0:
			{
				FUCTIONOUT_IO ^= 0X01;		//第1路继电器
				break;
			}
			case 1:
			{
				FUCTIONOUT_IO ^= 0X02;		//第2路继电器
				break;
			}
			case 2:
			{
				FUCTIONOUT_IO ^= 0X04;		//第3路继电器
				break;
			}
			case 3:
			{
				FUCTIONOUT_IO ^= 0X08;		//第4路继电器
				break;
			}
			case 4:
			{

			}
			case 5:
			{

			}
			case 6:
			{

			}
			case 7:
			{

			}
			case 8:
			{

			}
			case 9:
			{
				FUCTIONOUT_IO = 0X00;		//关掉所有继电器
				break;
			}
			default:
			{
				break;
			}

		}

	}
	
	
} 


/*********************************************************************************************************
** 函数名称: error
** 功能描述: 出错处理
** 输 入: 无
** 输 出: 无
** 全局变量: 
** 调用模块: 
**
** 作 者: gl
** 日 期: 2007年01月15日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void	error() 
{
	
	
} 

/*********************************************************************************************************
** 函数名称: time0interrupt
** 功能描述: 定时器0中断(中断时间为250us),检查是否irpin的信号,250us中断一次,ir没有用三极管,
** 			 直接接一个上拉电阻,接收到的波形出手册上的是反相的
** 输 入: 无
** 输 出: 无
** 全局变量: 
** 调用模块: 
**
** 作 者: gl
** 日 期: 2007年01月15日
**-------------------------------------------------------------------------------------------------------
** 修改人: gl
** 日 期: 2007年01月21日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void	time0interrupt() interrupt 1 using 2
{

	if(IRPIN)		
	{

		if(IRPINOLDFG)				//1--->1//不变为高
		{
			hightcount++;
			lowcount = 0;
			if(hightcount > _124AMAX)
			{
				_synbitokFG = 0;	//没有红外信号
				hightcount     = 1;
				lowcount       = 0;
				hightcountold  = 0;
				lowcountold    = 0;
				bitcount1      = 0;
				IRPINOLDFG     = 1;
				ircode = 0;	
			}
		}
		else
		{						//0--->1,要测
			lowcountold = lowcount;
			lowcount = 0;			
			IRPINOLDFG = 1;	
			hightcount = 1;
		}

	}
	else
	{
		    				//有红外信号
		if(IRPINOLDFG)		//1--->0
		{

			hightcountold = hightcount;
			hightcount = 0;
			IRPINOLDFG = 0;
			lowcount = 1;

			if((lowcountold >= _4AMIN && lowcountold < _4AMAX) && 
				(hightcountold > _124AMIN && hightcount < _124AMAX))//1--->0
			{
				_synbitokFG = 1;			//检测到同步码
				hightcountold  = 0;
				lowcountold    = 0;
				bitcount1      = 0;
				ircode = 0;
				
			}
			else
			{
				if(_synbitokFG)
				{
					if((lowcountold >= _4AMIN && lowcountold < _4AMAX) && 
						hightcountold >= _12AMIN && hightcountold <_12AMAX)
					{		
						ircode &= 0xfffffffe;		//0					
					}
					else
					{
						if(lowcountold > _12AMIN && lowcountold < _12AMAX && 
							hightcountold >= _4AMIN && hightcountold <_4AMAX)
						{							//1
							ircode |= 0x00000001;	//1
						}
					}

					if(++bitcount1 <= 24)
					{
						ircode <<= 1;				//32位左移,低24位有效
					}
					if(bitcount1 == 24)
					{

						bitcount1 = 0;	//现在为同步位的低电平(与data上是反的,
										//即data中同步位高电平)
						ircode >>= 1; 	//左移进多移了一位
						ircode &= 0x00ffffff;
						i = 0;
						while(ircode != ircodetable[i])
						{
							if(i >= KEYS)
							{
								//i = 4;
								ircode = 0;
								break;
												//出错处理
							}
							i++;
						}
						Count = ircode;
						keys = i;
						_synbitokFG = 0;
						have_count++;
					}
				}
			}
		}
		else
		{
			lowcount++;							//0--->0//不变为低	
			hightcount = 0;
		}		

	}
	
	if(++_03UScount >= 2000)	//计0.5S
	{
		_03UScount = 0;
		_1SFG = 1;		
	
	}
/*
								//这里为实时性要求高的任务,这部分执行时间最好不要太长
*/
} 

/*********************************************************************************************************
** 函数名称: main
** 功能描述: 主程序
** 输 入: 无
** 输 出: 无
** 全局变量: 
** 调用模块: 
**
** 作 者: gl
** 日 期: 2007年01月15日
**-------------------------------------------------------------------------------------------------------
** 修改人: gl
** 日 期: 2007年01月15日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void main()
{	
	unsigned char procylce = 0;

	init();

    while(1)
	{
		if(++procylce > TASKS)	//TASKS为时间片里的任数
		{
			procylce = 1;
		}
		switch(procylce)		//任务时间片处理
		{
			case 1 :			//任务1:读键
			{
				KeyScan();

				break;
			}

			case 2 :			//任务2
			{
				Display();
				break;
			}

			case 3 :			//任务3
			{
				GetAd();
				break;
			}

			case 4 :			//任务4
			{
				function1();
				break;
			}

			case 5 :			//任务5
			{
				
				break;
			}

			case 6 :			//任务6
			{
				
				break;
			}

			case 7 :			//任务7
			{
				
				break;
			}

			case 8 :			//任务8
			{
				time();
				break;
			}
			default :
			{
				error();		//出错处理
			}
		
		}
/*
								//这里为实时性要求高的任务
*/

	}
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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