📄 gsm-
字号:
/*********************************************
Writed By XianQiYuan
2009.11.5
小毛@SCUT Electronic Engineering
*********************************************/
#ifndef _RED_INCLUDED_
#define _RED_INCLUDE
#include "common.h"
sbit RDATA=P3^2; //红外接口
uchar key=255; //红外摇控的键值,无键按下时为255
uchar redchange(uchar rednum);
//红外初始化
void Red_Init(void)
{
RDATA=1; //P3^2输出高电平
EX0=1; //开启红外中断 P3^2
}
//检测脉冲宽度
uchar check(void)
{
uchar t=0;uchar a=0;
while(RDATA)
{
t++;
for(a=0;a<4;a++); //
if(t==250)return t; //超时溢出
}
return t;
}
/*-------------------------协议--------------------------
开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
接着是26位前导脉冲,用于识别该型号的摇控。
然后是发送8位数据的原码,接着又发送8位数据的反码.
最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。
每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别
8位原码就可以识别按键了
---------------------------------------------------------*/
/****** 外部中断0服务程序,按键处理 ******/
void exter0() interrupt 0
{
uchar res=0; uint aa=0;
bit OK=0;
bit RODATA=0;
while(1)
{
if(RDATA)//有高脉冲出现
{
res=check();//获得此次高脉冲宽度
if(res==250)break;//非有用信号
if(res>=200&&res<250)OK=1; //获得前导位(4.5ms)
else if(res>=70&&res<100) //如果是宽脉冲,则RODATA=1
{
aa++;
RODATA=1;//1.5ms
}
else if(res>=10&&res<50) //如果是窄脉冲,则RODATA=0
{
aa++;
RODATA=0;//500us
}
//舍去26位前导脉冲,从第27位开始接着的8位是数据的正码,再后8位是反码
//获取正码
if(OK&&(aa>=27)&&(aa<35))
{
key<<=1;
key=key+(uchar)RODATA;
}
if(aa==42)
{
key=redchange(key);
}
}
}
}
//经测试:KD-29的全部解码如下(正码)
//静音:104 电源:72 数字1:128 数字2:64
//数字3:192 数字4:32 数字5:160 数字6:96
//数字7:224 数字8:16 数字9:144
//-/--:80 数字0:0 交替:88
//SLEEP:56 S.SYS:248 CALL:216
//P.P:152 TV/AV:208
//上:200 下:232 左:40 右:8
//MENU:24 SCAN:240 GAME:48
//把红外数据进行转换
uchar redchange(uchar rednum)
{
switch(rednum)
{
case 0 :return 0;
case 128:return 1;
case 64 :return 2;
case 192:return 3;
case 32 :return 4;
case 160:return 5;
case 96 :return 6;
case 224:return 7;
case 16 :return 8;
case 144:return 9;
case 200:return 10;//上
case 232:return 11;//下
case 40 :return 12;//左
case 8 :return 13;//右
case 24 :return 14;//MENU
case 104:return 15;//静音
case 80 :return 16;//-/--
case 208:return 17;//TV/AV
case 240:return 18;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -