📄 gsm-
字号:
C51 COMPILER V7.06 RED 06/13/2010 15:40:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE RED
OBJECT MODULE PLACED IN red.OBJ
COMPILER INVOKED BY: E:\WorkSpace\Keil\C51\BIN\C51.EXE red.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*********************************************
2 Writed By XianQiYuan
3 2009.11.5
4 小毛@SCUT Electronic Engineering
5 *********************************************/
6 #ifndef _RED_INCLUDED_
7 #define _RED_INCLUDE
8 #include "common.h"
9 sbit RDATA=P3^2; //红外接口
10 uchar key=255; //红外摇控的键值,无键按下时为255
11
12 uchar redchange(uchar rednum);
13
14 //红外初始化
15 void Red_Init(void)
16 {
17 1 RDATA=1; //P3^2输出高电平
18 1 EX0=1; //开启红外中断 P3^2
19 1 }
20
21 //检测脉冲宽度
22 uchar check(void)
23 {
24 1 uchar t=0;uchar a=0;
25 1 while(RDATA)
26 1 {
27 2 t++;
28 2 for(a=0;a<4;a++); //
29 2 if(t==250)return t; //超时溢出
30 2 }
31 1 return t;
32 1 }
33 /*-------------------------协议--------------------------
34 开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
35 接着是26位前导脉冲,用于识别该型号的摇控。
36 然后是发送8位数据的原码,接着又发送8位数据的反码.
37 最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。
38 每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别
39 8位原码就可以识别按键了
40 ---------------------------------------------------------*/
41 /****** 外部中断0服务程序,按键处理 ******/
42 void exter0() interrupt 0
43 {
44 1 uchar res=0; uint aa=0;
45 1 bit OK=0;
46 1 bit RODATA=0;
47 1 while(1)
48 1 {
49 2 if(RDATA)//有高脉冲出现
50 2 {
51 3 res=check();//获得此次高脉冲宽度
52 3 if(res==250)break;//非有用信号
53 3 if(res>=200&&res<250)OK=1; //获得前导位(4.5ms)
54 3
55 3 else if(res>=70&&res<100) //如果是宽脉冲,则RODATA=1
C51 COMPILER V7.06 RED 06/13/2010 15:40:37 PAGE 2
56 3 {
57 4 aa++;
58 4 RODATA=1;//1.5ms
59 4 }
60 3 else if(res>=10&&res<50) //如果是窄脉冲,则RODATA=0
61 3 {
62 4 aa++;
63 4 RODATA=0;//500us
64 4 }
65 3 //舍去26位前导脉冲,从第27位开始接着的8位是数据的正码,再后8位是反码
66 3 //获取正码
67 3 if(OK&&(aa>=27)&&(aa<35))
68 3 {
69 4 key<<=1;
70 4 key=key+(uchar)RODATA;
71 4 }
72 3 if(aa==42)
73 3 {
74 4 key=redchange(key);
75 4 }
76 3
77 3 }
78 2 }
79 1 }
80 //经测试:KD-29的全部解码如下(正码)
81 //静音:104 电源:72 数字1:128 数字2:64
82 //数字3:192 数字4:32 数字5:160 数字6:96
83 //数字7:224 数字8:16 数字9:144
84 //-/--:80 数字0:0 交替:88
85 //SLEEP:56 S.SYS:248 CALL:216
86 //P.P:152 TV/AV:208
87 //上:200 下:232 左:40 右:8
88 //MENU:24 SCAN:240 GAME:48
89
90 //把红外数据进行转换
91 uchar redchange(uchar rednum)
92 {
93 1 switch(rednum)
94 1 {
95 2 case 0 :return 0;
96 2 case 128:return 1;
97 2 case 64 :return 2;
98 2 case 192:return 3;
99 2 case 32 :return 4;
100 2 case 160:return 5;
101 2 case 96 :return 6;
102 2 case 224:return 7;
103 2 case 16 :return 8;
104 2 case 144:return 9;
105 2 case 200:return 10;//上
106 2 case 232:return 11;//下
107 2 case 40 :return 12;//左
108 2 case 8 :return 13;//右
109 2 case 24 :return 14;//MENU
110 2 case 104:return 15;//静音
111 2 case 80 :return 16;//-/--
112 2 case 208:return 17;//TV/AV
113 2 case 240:return 18;
114 2 }
115 1 }
116
117 #endif
C51 COMPILER V7.06 RED 06/13/2010 15:40:37 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 348 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -