📄 xray.c
字号:
/************************************************
HT6221,PT2221红外编码遥控器处理模块VER1.0
全局调用变量:bit keyflag; //按键标志
unsigned char prekey ; //返回按键值
占用硬件资源:INT0
6MHZ晶振 CPU: 51系列 单指令周期:2us.
作 者: David Wang
Email: wy94081@sina.com.cn
日 期: 2001年2月16日*************************************************/
#pragma code debug symbols
#include <reg51.h>
#include <intrins.h>
#include "xray.h"
#define uchar unsigned char
#define uint unsigned int
#define MS108 0Xd2 //108ms
#define MS9R0 0X11 //9ms
#define MS4R5 0X08 //4.5ms
#define MS2R2 0x04 //2.24ms
#define MS1R6 0x03 //1.68ms
#define MSR56 0x01 //0.56ms
void ex0(void);
uchar GetL(void);
uchar GetH(void);
bit keyflag;
unsigned char prekey ; //press key value
/*********************************************
中断函数 39KHZ 载波检测
**********************************************/
void ex0(void) interrupt 0 using 1
{
uchar i,k,h,temp;
unsigned char rec[4];
EX0=0;
k=GetL();
if(k!=9) goto end; /* 检测9ms */
k=GetH();
if(k==2) /* 检测2.24ms 红外遥控器连续按键*/
{ //置连续按键标志
//keyflag=1;
goto ddd;
}
if(k!=4) goto end; /* 检测4.5ms 红外遥控器单次按键*/
for(h=0;h<4;h++) //读取键值
{
temp=0;
for(i=0;i<8;i++)
{
GetL();
k=GetH();
if(k==1) temp++;
if(i<7) temp<<=1;
if(k==255) goto end;
}
rec[h]=temp;
}
if((rec[2]+rec[3])!=0xff) goto end;
switch(rec[2]) //分析红外遥控键值
{
case 0xC1: prekey=KEYMODE;
break;
case 0x61: prekey=KEYESC;
break;
case 0x91: prekey=KEYENT;
break;
case 0x09: prekey=KEYADD;
break;
case 0x31: prekey=KEYSUB;
break;
default: goto end;
break;
}
keyflag=1;
ddd:
_nop_();
end:
EX0=1;
}
/*********************************************
**********************************************/
uchar GetH(void)
{
TH0=0;
TL0=0;
TR0=1;
do
{
if(TH0>MS9R0) return(255); /* 脉宽>9ms */
}while(INT0!=0);
TR0=0;
if(TH0==MS4R5) return(4); //4.5ms
if(TH0==MS2R2) return(2); //2.24ms
if(TH0==MS1R6) return(1); //1.68ms
if(TH0==MSR56) return(0); //0.56ms
}
/*********************************************
**********************************************/
uchar GetL(void)
{
TH0=0;
TL0=0;
TR0=1;
while(INT0!=1);
TR0=0;
if(TH0<MS9R0) return(0); //判断9ms低电平
else return(9);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -