📄 irreadinit.c
字号:
#include "..\..\INC\config.h"
//Sys_Ma系统码
//Sys_FMa系统反码、
//User_Ma用户码
//User_FMa用户反码
unsigned char data Sys_Ma _at_ 0x1A;//分别存放红外线译码后的数据
unsigned char data Sys_FMa _at_ 0x1B;
unsigned char irdatatemp;
unsigned char irliantemp; //重收次数
bit irover;
unsigned char irbuf[2];
unsigned char ircount;
sbit IRIO = P3^2;
unsigned char irfifotemp[32];
unsigned char irfifoindex;
unsigned char irfifooudex;
//从FIFO读取一个字节
unsigned char irreadfifo(unsigned char *irp)
{
if(irfifooudex == irfifoindex)return 0;
*irp = irfifotemp[irfifooudex];
irfifooudex++;
if(irfifooudex>31)irfifooudex=0;
return 1;
}
//从FIFO压入一个字节
void irinbytefifo(unsigned char irp)
{
if((irfifoindex+1) == irfifooudex) return;
irfifotemp[irfifoindex] = irp;
irfifoindex++;
if(irfifoindex>31)irfifoindex=0;
}
//解码 数据,是否加班结束码
void jiema(unsigned char jm,unsigned char jiesu) reentrant
{
switch(jm)
{
case 17: //向上键
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x75);
break;
case 16: //向下键
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x72);
break;
case 18: //向左键
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x6B);
break;
case 19: //向右键
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x74);
break;
case 21: //空格键
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x29);
break;
case 15: //ESC键
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x76);
break;
case 12: //tab键
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x0D);
break;
case 14:
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x1C);
break;
case 11: //关机
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x37);
break;
case 30: //读取key信息
// irinbytefifo(0xE0);
if(jiesu)
{
// irinbytefifo(0xF0);
}
SendPCKey(0xF2);
break;
case 31: //加气
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x14); //左ctrl
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x14); //右ctrl
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x46); //左ctrl
break;
case 23: //加钱
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x14); //左ctrl
irinbytefifo(0xE0);
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x14); //右ctrl
if(jiesu)
{
irinbytefifo(0xF0);
}
irinbytefifo(0x25); //左ctrl
break;
}
}
void irvarinit()
{
irrreatime = 0;
for(irfifoindex=0;irfifoindex<32;irfifoindex++)
{
irfifotemp[irfifoindex] = 0;
}
irfifoindex = 0;
irfifooudex = 0;
irdatatemp = 0xFF;
irover = 0;
irliantemp = 0;
ircount = 0;
irbuf[0] = 0;
irbuf[1] = 0xFF;
}
void IrReadinit()
{
IT0 = 1; //INT0下降沿有效
EX0 = 1; //开INT0中断;
IRIO = 1;
}
void IrReaddata()
{
unsigned char it;
gotoxy(0,1);
printf("%d\n",(unsigned int )Sys_Ma);
gotoxy(0,2);
printf("%d\n",(unsigned int )Sys_FMa);
if(irrreatime>0)
{
gotoxy(0,3);
printf("有红外\n");
}
else
{
gotoxy(0,3);
printf("无红外 %d\n",(unsigned int )ircount);
if(irover && irrreatime == 0)
{
irover = 0;
jiema(irdatatemp,1);
irdatatemp = 0xFF;
ircount = 0;
irbuf[0] = irbuf[1] = 0;
// PrintChCom2(0xAD);
}
}
if(pcsendtime <1)
{
if(irreadfifo(&it))
{
PrintChCom2(it);
SendSCKey(it);
pcsendtime = 0;
}
}
/* if(Sys_FMa == 2)
{
Sys_FMa = 0;
SendPCKey(0xED);
SendPCKey(0x04);
}
if(Sys_FMa == 1)
{
Sys_FMa = 0;
SendPCKey(0xED);
SendPCKey(0x02);
}
if(Sys_FMa == 3)
{
Sys_FMa = 0;
SendPCKey(0xED);
SendPCKey(0x00);
}
if(Sys_FMa == 30)
{
Sys_FMa = 0;
SendPCKey(0xF2);
}
if(Sys_FMa == 14) //a
{
Sys_FMa = 0;
SendSCKey(0x1C);
}
if(Sys_FMa == 17) //向上键
{
Sys_FMa = 0;
EA = 0;
SendSCKey(0xE0);
EA = 0;
DelayMs(30);
SendSCKey(0x75);
EA = 1;
}
if(Sys_FMa == 16) //向下键
{
Sys_FMa = 0;
SendSCKey(0xE0);
EA = 0;
DelayMs(30);
SendSCKey(0x72);
EA = 1;
}
if(Sys_FMa == 18) //向左键
{
Sys_FMa = 0;
SendSCKey(0xE0);
EA = 0;
DelayMs(30);
SendSCKey(0x6B);
EA = 1;
}
if(Sys_FMa == 19) //向右键
{
Sys_FMa = 0;
SendSCKey(0xE0);
EA = 0;
DelayMs(30);
SendSCKey(0x74);
EA = 1;
}
if(Sys_FMa == 21) //空格键
{
Sys_FMa = 0;
SendSCKey(0x29);
EA = 0;
DelayMs(1000);
EA = 1;
}
if(Sys_FMa == 15) //ESC键
{
Sys_FMa = 0;
SendSCKey(0x76);
EA = 0;
DelayMs(1000);
EA = 1;
}
if(Sys_FMa == 12) //tab键
{
Sys_FMa = 0;
SendSCKey(0x0D);
EA = 0;
DelayMs(1000);
EA = 1;
} */
}
void ISR_INT0() interrupt 0
{
if(IRRead())
{
irbuf[ircount] = Sys_FMa;
ircount++;
if(ircount>1)
{
ircount = 0;
if(irbuf[0] == irbuf[1])
{
irrreatime = 8;
if(Sys_FMa != irdatatemp)
{
jiema(irdatatemp,1);
irdatatemp = Sys_FMa;
irover = 1;
irliantemp = 0;
irliantime = 15;
jiema(Sys_FMa,0);
}
else
{
if(irliantemp == 0)
{
// jiema(Sys_FMa,0);
}
irliantemp++;
if(irliantime == 0)// && irliantemp > 2)
{
jiema(Sys_FMa,0);
irliantime = 5;
irliantemp = 2;
}
}
}
irbuf[0] = 0;
irbuf[1] = 0xFF;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -