📄 intctrl.lst
字号:
C51 COMPILER V7.20 INTCTRL 06/30/2005 14:02:57 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE INTCTRL
OBJECT MODULE PLACED IN IntCtrl.OBJ
COMPILER INVOKED BY: C:\Keil51\C51\BIN\c51.exe IntCtrl.c DB OE SMALL ROM(LARGE)
line level source
1 #include "reg52.h"
2 #include "intrins.h"
3 #include "..\..\inc\globedef.h"
4 #include "..\..\inc\intctrl.h"
5 #include "..\..\inc\keyproc.h"
6 #include "..\..\inc\tuner.h"
7
8 /*====================================================
9 外部中断1, 用来接收遥控信号,和Timer0配合使用
10 ====================================================*/
11 void RemoteInt(void) interrupt 2
12 {
13 1 WORD IRTimeCount;
14 1 BYTE temp1,temp2;
15 1 IRTimeCount = (WORD)Timer0_CntH*256+(WORD)Timer0_CntL;
16 1 Timer0_CntH =0;
17 1 Timer0_CntL = 0;
18 1 Start_Timer0;
19 1 switch(IrState)
20 1 {
21 2 case IR_READY:
22 2 IRDataTemp=0;
23 2 IRDataCount=0;
24 2 IrState=IR_HEAD;
25 2 break;
26 2 case IR_HEAD:
27 2 if((IRTimeCount<IR_HEAD_MAX)&&(IRTimeCount>IR_HEAD_MIN))
28 2 {
29 3 IRDataCount=0;
30 3 IrState=IR_OFFCODE;
31 3 IRDataTemp=0;
32 3 RepCount = 0;
33 3 Current_Remote_In = 0;
34 3 }
35 2 else if((IRTimeCount>IR_REP_MIN) && (IRTimeCount<IR_REP_MAX))
36 2 {
37 3 //是重复信号
38 3 #ifdef IRRepEnable
39 3 if(1 == Current_Remote_In)
40 3 {
41 4 if( (Remote_value == 18) //FM/AM 和AUTO_SCAN_KEY复用
42 4 || (Remote_value == 7) //STEPR和FB复用
43 4 || (Remote_value == 8)) //STEPF和FF复用
44 4 {
45 5 FMAM_PRESSED = 1;
46 5 RepCount++;
47 5 }
48 4 if( (Remote_value == 19) //IR_KEY_TBL[2] = VOLUME_UP_KEY;
49 4 ||(Remote_value == 2) //IR_KEY_TBL[6] = VOLUME_DOWN_KEY;
50 4 ||(Remote_value == 12) //IR_KEY_TBL[5] = BASS_PLUS_KEY;
51 4 ||(Remote_value == 14)) //IR_KEY_TBL[9] = CENTER_MINUS_KEY;
52 4 //||(Remote_value == 0x7) ) //IR_KEY_TBL[7] = CENTER_PLUS_KEY;
53 4 {
54 5 //当遥控输入是以上按键时,才有重复功能
55 5 RepCount++;
C51 COMPILER V7.20 INTCTRL 06/30/2005 14:02:57 PAGE 2
56 5 if(RepCount > 3)
57 5 IR_KeyAct = 1; //当重复计数值超过设定值时,重复有效
58 5 }
59 4 }
60 3 #endif
61 3 IrState = IR_READY;
62 3 }
63 2 else
64 2 {
65 3 //是杂波
66 3 IR_KeyAct = 0;
67 3 IrState = IR_READY;
68 3 Current_Remote_In = 0;
69 3 }
70 2 break;
71 2 case IR_OFFCODE:
72 2 //地址码检测
73 2 IRDataTemp<<=1;
74 2 if(((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
75 2 || ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
76 2 {
77 3 IRDataCount++;
78 3 if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
79 3 IRDataTemp |= 0x1;//检测"1
80 3 if(IRDataCount >= 16)
81 3 {
82 4 IRDataCount=0;
83 4 if((IRDataTemp==IR_SYSTEM_CODE))
84 4 {
85 5 //是正确的地址码
86 5 IrState=IR_ADDRESS;
87 5 IRDataTemp=0;
88 5
89 5
90 5 }
91 4
92 4 else
93 4 {
94 5 //错误的地址码
95 5 IR_KeyAct=0;
96 5 Current_Remote_In = 0;
97 5 IrState=IR_READY;
98 5 }
99 4 }
100 3 }
101 2 else
102 2 {
103 3 //是杂波
104 3 IR_KeyAct = 0;
105 3 Current_Remote_In = 0;
106 3 IrState = IR_READY;
107 3 }
108 2 break;
109 2 case IR_ADDRESS:
110 2 //数据码检测
111 2 IRDataTemp>>=1;
112 2 if(((IRTimeCount < CODE_1_MAX)&&(IRTimeCount > CODE_1_MIN))
113 2 || ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
114 2 {
115 3 IRDataCount++;
116 3
117 3 if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
C51 COMPILER V7.20 INTCTRL 06/30/2005 14:02:57 PAGE 3
118 3 IRDataTemp |= 0x8000; //检测到“1”
119 3
120 3 if(IRDataCount >= 16)
121 3 {
122 4 //判断检测到的数据码是否正确
123 4 IRDataCount=0;
124 4 temp1 = (BYTE)(IRDataTemp%256);
125 4 temp2 = (BYTE)(IRDataTemp/256);
126 4 temp2 = ~temp2;
127 4 if(temp1 == temp2)
128 4 {
129 5 Remote_value = temp1;
130 5 if(Remote_value > 0x1f)
131 5 Remote_value -= 0x20;
132 5 Current_Remote_In = 1;
133 5 if( (Remote_value == 18) //FM/AM 和AUTO_SCAN_KEY复用
134 5 || (Remote_value == 7) //STEPR和FB复用
135 5 || (Remote_value == 8)) //STEPF和FF复用
136 5 FMAM_PRESSED = 1;
137 5 else
138 5 IR_KeyAct = 1;
139 5 }
140 4 IrState = IR_READY;
141 4 IRDataCount = 0;
142 4 }
143 3 }
144 2 else
145 2 {
146 3 //无效键
147 3 IR_KeyAct = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -