📄 pt2262_decode.c
字号:
}
/*********************************************************************************************************
** 函数名称: 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 + -