📄 intctrl.lst
字号:
C51 COMPILER V7.50 INTCTRL 10/18/2005 14:13:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE INTCTRL
OBJECT MODULE PLACED IN IntCtrl.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IntCtrl.c DEBUG OBJECTEXTEND
line level source
1 #include "reg52.h"
2 #include "intrins.h"
3 #include "globedef.h"
4 #include "intctrl.h"
5 #include "keyproc.h"
6 #include "keydef.h"
7 #include "Lcd.h"
8
9 extern unsigned char ff_key_flag;
10 extern unsigned char fb_key_flag;
11
12 void RemoteInt(void) interrupt 0
13 {
14 1 WORD IRTimeCount;
15 1 BYTE temp1,temp2;
16 1 IRTimeCount = (WORD)Timer0_CntH*256+(WORD)Timer0_CntL;
17 1 Timer0_CntH =0;
18 1 Timer0_CntL = 0;
19 1 Start_Timer0; //中断后timer0开始定时,定时数值放到IRTimeCount
20 1 switch(IrState)
21 1 {
22 2 case IR_READY:
23 2 IRDataTemp=0;
24 2 IRDataCount=0;
25 2 IrState=IR_HEAD; //进入NEC码头低电平段
26 2 break;
27 2 case IR_HEAD:
28 2 if((IRTimeCount<IR_HEAD_MAX) && (IRTimeCount>IR_HEAD_MIN)) //NEC码头9ms+4.5ms=13.5ms
29 2 {
30 3 IRDataCount=0;
31 3 IrState=IR_OFFCODE; //NEC码头完毕
32 3 IRDataTemp=0;
33 3 RepCount = 0;
34 3 Current_Remote_In = 0;
35 3 }
36 2 else if((IRTimeCount > IR_REP_MIN) && (IRTimeCount < IR_REP_MAX)) //重复码9ms+2.5ms=11.5ms
37 2 {
38 3
39 3 #ifdef IRRepEnable
40 3 if(1 == Current_Remote_In)
41 3 {
42 4 if((Remote_value == 0x0b) || (Remote_value == 0x1b))
43 4 FF_FB_Active = 1;
44 4 if( (Remote_value == 0x0a) || //音量+
45 4 (Remote_value == 0x0e) || //音量-
46 4 (Remote_value == 0x0b) || //NEXT_KEY
47 4 (Remote_value == 0x1b)||//PREVIOUS_KEY
48 4 (Remote_value == 0x0f)) //PLAY/PAUSE_KEY
49 4 {
50 5 RepCount++;
51 5 if(RepCount > 3)
52 5 {
53 6 if( (Remote_value == 0x0a) ||
54 6 (Remote_value == 0x0e)) //如果按住的是音量键
55 6 {
C51 COMPILER V7.50 INTCTRL 10/18/2005 14:13:28 PAGE 2
56 7 IR_KeyAct = 1;
57 7 Remote_Key = Remote_value;
58 7 }
59 6 /* if((Remote_value == 0x0b)||(Remote_value == 0x1b))
60 6 {
61 6 Remote_Key = Remote_value + 1;//FF_KEY OR FB_KEY
62 6 IR_KeyAct = 1;//遥控有效标志位
63 6 }*/
64 6 if(Remote_value == 0x0b)
65 6 ff_key_flag = 1;
66 6 if(Remote_value == 0x1b)
67 6 fb_key_flag = 1;
68 6 }
69 5
70 5 if(RepCount > 10)
71 5 {
72 6 if(Remote_value == 0x0f) //如果常按住play键则关ipod
73 6 {
74 7 Remote_Key = 0x13;//IPOD_OFF_KEY
75 7 Current_Remote_In = 0;
76 7 }
77 6 IR_KeyAct = 1;
78 6 }
79 5 }
80 4 }
81 3 #endif
82 3 IrState = IR_READY;
83 3 }
84 2 else
85 2 {
86 3 IR_KeyAct = 0;
87 3 IrState = IR_READY;
88 3 Current_Remote_In = 0;
89 3 }
90 2 break;
91 2 case IR_OFFCODE:
92 2 IRDataTemp<<=1;
93 2 if(((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
94 2 || ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
95 2 {
96 3 IRDataCount++;
97 3 if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
98 3 IRDataTemp |= 0x1;
99 3 if(IRDataCount >= 16)
100 3 {
101 4 IRDataCount=0;
102 4
103 4 if((IRDataTemp==IR_SYSTEM_CODE))
104 4 {
105 5 IrState=IR_ADDRESS;
106 5 IRDataTemp=0;
107 5 }
108 4 else
109 4 {
110 5 IR_KeyAct=0;
111 5 Current_Remote_In = 0;
112 5 IrState=IR_READY;
113 5 }
114 4 }
115 3 }
116 2 else
117 2 {
C51 COMPILER V7.50 INTCTRL 10/18/2005 14:13:28 PAGE 3
118 3 IR_KeyAct = 0;
119 3 Current_Remote_In = 0;
120 3 IrState = IR_READY;
121 3 }
122 2 break;
123 2 case IR_ADDRESS:
124 2 IRDataTemp>>=1;
125 2 if(((IRTimeCount < CODE_1_MAX)&&(IRTimeCount > CODE_1_MIN))
126 2 || ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
127 2 {
128 3 IRDataCount++;
129 3 if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
130 3 IRDataTemp |= 0x8000;
131 3
132 3 if(IRDataCount >= 16)
133 3 {
134 4 IRDataCount=0;
135 4 temp1 = (BYTE)(IRDataTemp%256);
136 4 temp2 = (BYTE)(IRDataTemp/256);
137 4 temp2 = ~temp2;
138 4
139 4 if(temp1 == temp2)
140 4 {
141 5 Remote_value = temp1;
142 5
143 5 Remote_Key = Remote_value;
144 5 Current_Remote_In = 1;
145 5 if((Remote_value == 0x0b) || (Remote_value == 0x1b))
146 5 FF_FB_Active = 1;
147 5 else
148 5 IR_KeyAct = 1;
149 5 }
150 4 IrState = IR_READY;
151 4 IRDataCount = 0;
152 4 }
153 3 }
154 2 else
155 2 {
156 3 IR_KeyAct = 0;
157 3 Current_Remote_In = 0;
158 3 IrState = IR_READY;
159 3 }
160 2 break;
161 2 }
162 1 }
163
164 void TIMER2Int(void) interrupt INT_Timer2
165 {
166 1 TF2 = 0;
167 1 if(FF_FB_Active >= 1)
168 1 {
169 2 FF_FB_Active++;
170 2 if(FF_FB_Active > 40)
171 2 {
172 3 if(RepCount < 4)
173 3 {
174 4 Remote_Key = Remote_value;
175 4 }
176 3 else
177 3 {
178 4 Remote_value = 0x7;
179 4 Remote_Key = Remote_value;
C51 COMPILER V7.50 INTCTRL 10/18/2005 14:13:28 PAGE 4
180 4 }
181 3 IR_KeyAct = 1;
182 3 FF_FB_Active = 0;
183 3 }
184 2
185 2 }
186 1
187 1 display_counter++;
188 1 flash_counter++;
189 1
190 1 if((Key_LongTimer >=1) && (Key_LongTimer < 130))
191 1 {
192 2 Key_LongTimer++;
193 2 }
194 1
195 1 if((Key_ShortTimer >=1) && (Key_ShortTimer < 25))
196 1 {
197 2 Key_ShortTimer++;
198 2 }
199 1
200 1 if(ReadKey_Timer < 5)
201 1 ReadKey_Timer++;
202 1
203 1
204 1 }
205
206 void NotUsing(void) interrupt INT_EXT1 //外部中断1
207 {
208 1 _nop_();
209 1 _nop_();
210 1 }
211
212 void TIMER0Int(void) interrupt INT_Timer0
213 {
214 1 Stop_Timer0;
215 1 IrState = IR_READY;
216 1 Timer0_CntH = 0;
217 1 Timer0_CntL = 0;
218 1 ET0 = 1;
219 1 }
220
221 void TIMER1Int(void) interrupt INT_Timer1
222 {
223 1 }
224
225 void SerialInt(void) interrupt INT_Serial
226 {
227 1 if(RI)
228 1 RI = 0;
229 1 }
230
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 675 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V7.50 INTCTRL 10/18/2005 14:13:28 PAGE 5
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -