📄 ifr_ir.lst
字号:
C51 COMPILER V7.50 IFR_IR 09/17/2007 09:47:22 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE IFR_IR
OBJECT MODULE PLACED IN ifr_ir.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ifr_ir.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #define ifr_ir_c
3 #include"io.h"
4 #include"ifr_ir.h"
5 #include"key.h"
6 #include"main.h"
7 #include "LME2200.h"
8 #include "stc_eeprom.h"
9 #include "lcd.h"
10
11 void ifr_key_deal(uchar dat1);
12 void data_com(uchar K_ifr_Dat);
13
14 uchar code ADDR_ID0[3] = {0x01,0x01,0x10};
15
16 //****************************************************
17 //function:ir init
18 //input :无
19 //output :i,延时i x 100us
20 //modify :2007-06-21
21 //*****************************************************
22 void ifr_init()
23 {
24 1 b_ifr = 0;
25 1 b_irf = 0;
26 1 b_send = 0;
27 1 b_zero = 1;
28 1 b_keytwo = 0;
29 1 b_keythree = 0;
30 1 b_checkok = 0;
31 1 number_d = 0;
32 1 number_ent = 0;
33 1 }
34
35 //****************************************************
36 //function:红外的接收函数
37 //input :无
38 //output :无
39 //modify :2007-6-19
40 //*****************************************************
41 void ifr_irn()
42 {
43 1 uchar cont;
44 1 cont=mj=0;
45 1
46 1 while(!ifr_ir)mj++;
47 1 if((mj<1000)||(mj>2000))return ;
48 1 mj =0;
49 1 while(ifr_ir)mj++;
50 1 if((mj<500)||(mj>1000))return ;
51 1 mj =0;
52 1 delay(2);
53 1 if(ifr_ir)return;
54 1 for(i=0;i<4;i++) //4个字节
55 1 for(j=0;j<8;j++){ //每个字节8位
C51 COMPILER V7.50 IFR_IR 09/17/2007 09:47:22 PAGE 2
56 2 cont ++;
57 2 while (!ifr_ir); //等待Infr为1; //560us完成
58 2 ifr_buf[i] >>= 1;
59 2 delay(35);
60 2 if(ifr_ir) // 小于560us为位0
61 2 delay(18);
62 2 if(ifr_ir)
63 2 ifr_buf[i] |= 0x80;// 大于900us为位1
64 2 while(ifr_ir);
65 2 }
66 1 if(cont == 32)
67 1 {
68 2 cont = 0;
69 2
70 2 if((ifr_buf[0]+ifr_buf[1]==0xff)&&(ifr_buf[2]+ifr_buf[3]==0xff))
71 2 {
72 3 b_ifr=1;
73 3 //if((ifr_buf[0]==0x7f)&&(ifr_buf[1]==0x80))
74 3 //led_ray1(2);
75 3 //ifr_key_deal(ifr_buf[2]);
76 3 }
77 2 }
78 1 }
79
80
81 /*************************************************************
82 //function:无线的接收函数
83 //input :无
84 //output :ifr_buf[0],ifr_buf[1],ifr_buf[2],ifr_buf[3],b_ifr
85 //modify :2007-8-27 by tony
86 **************************************************************/
87 void Time0Star()
88 {
89 1 TR0=0;
90 1 TH0=0;
91 1 TL0=0;//修正值
92 1 TF0=0;
93 1 TR0=1;
94 1 }
95
96 void RF_bitRx(bit _bitRF)//RF 接收位
97 {
98 1 uchar delayi,count;
99 1 count=0;
100 1 while((count<4) && (!TF0))
101 1 {
102 2 while(rfintpin==_bitRF);// ifr_buf[0]=0;
103 2 delayi=4;
104 2 while(delayi>1) delayi--;
105 2 if ((rfintpin!=_bitRF))
106 2 {
107 3 count++;
108 3 delayi=3;
109 3 while(delayi>1) delayi--;
110 3 }
111 2 }
112 1 TR0=0;
113 1 }
114
115
116 //****************************************************
117 //function:红外的接收函数
C51 COMPILER V7.50 IFR_IR 09/17/2007 09:47:22 PAGE 3
118 //input :无
119 //output :无
120 //modify :2007-6-19
121 //*****************************************************
122 void ifr_rf()
123 {
124 1 #define Louttime 2//允许最大码宽555us
125 1 #define t11ms 1000
126 1 #define t1100us 100//100us的宽度
127 1 uint rxdataRF[2];
128 1 uint zerotime,onetime,saveLtime;//存放高低电平时间长短
129 1 Time0Star();
130 1 rxdataRF[0]=0;
131 1 rxdataRF[1]=0;
132 1
133 1 //*********************防止误入,通调试此方法又能防误入,又不会误退出**************************/
134 1 if(!rfintpin)
135 1 {
136 2 for(zerotime=5;zerotime>1;zerotime--);
137 2 if(!rfintpin) return;
138 2 }
139 1
140 1
141 1 //*********************防止误入,通调试此方法又能防误入,又不会误退出**************************/
142 1 zerotime=0;
143 1 while((zerotime<5) && (!TF0))
144 1 {
145 2 while(rfintpin)// ifr_buf[0]=0;
146 2 {
147 3 if((TH0>=2)) return;//555us则退出
148 3 }
149 2 for(onetime=4;onetime>1;onetime--) ;
150 2 if (!rfintpin)
151 2 {
152 3 zerotime++;
153 3 for(onetime=2;onetime>1;onetime--) ;
154 3 }
155 2 }
156 1 //
157 1 TR0=0;
158 1 if((TH0>2)) return;//69us--555us认为允许
159 1 if(TH0<1)
160 1 if(TL0<60)return;
161 1
162 1 saveLtime=(((uint)TH0)<<8) | ((uint)TL0);//作参考对象
163 1 Time0Star();
164 1 if(saveLtime<t1100us) saveLtime=t1100us;//最小为100us
165 1 if(saveLtime<(t1100us*2)) saveLtime+=150;//150us
166 1 else if(saveLtime<(t1100us*4)) saveLtime+=80;//80us
167 1 else saveLtime+=50;//50us
168 1 //修正参考时间(码宽)
169 1 RF_bitRx(0);//无线位接收
170 1 if(TF0) return;//如果是时间益出那是错误
171 1
172 1 onetime=(((uint)TH0)<<8) | ((uint)TL0);
173 1 if(onetime<(t11ms*3)) return;
174 1 if(onetime>(t11ms*17)) return;
175 1 /**********************************RF数据接收开始**************************************/
176 1
177 1
178 1
179 1 Time0Star();
C51 COMPILER V7.50 IFR_IR 09/17/2007 09:47:22 PAGE 4
180 1 ifr_buf[1]=0;//用于记字数
181 1 ifr_buf[2]=0;//用于记位个数
182 1 while(ifr_buf[1]<2)
183 1 {
184 2 ///////////////////////////////////////////////////////
185 2 RF_bitRx(1);
186 2 if(TF0) break;//error或结束
187 2 zerotime=(((uint)TH0)<<8) | ((uint)TL0);
188 2 /////////////////////////////////////////////////////////接收高电平
189 2 ////////////////////////////////////////////////////////
190 2 Time0Star();
191 2 RF_bitRx(0);
192 2 if(TF0) break;//error或结束
193 2 onetime=(((uint)TH0)<<8) | ((uint)TL0);
194 2 /////////////////////////////////////////////////////////接收低电平
195 2 Time0Star();
196 2 //以下部分为处理数据
197 2 if(zerotime>(t11ms*2)) break;
198 2 if(onetime>(t11ms*2)) break;//码宽超过2m则做错误处理
199 2 if(zerotime>(onetime+(onetime/2))) //1
200 2 {
201 3 rxdataRF[ifr_buf[1]] |=0x01;
202 3 ifr_buf[2]++;
203 3 if(ifr_buf[2]>=16)
204 3 {
205 4 ifr_buf[2]=0;
206 4 ifr_buf[1]++;
207 4 }
208 3 else
209 3 rxdataRF[ifr_buf[1]]<<=1;
210 3 }
211 2 else if(onetime>(zerotime+(zerotime/2))) //0
212 2 {
213 3 rxdataRF[ifr_buf[1]] &=0xFFFE;//此行不用也可以
214 3 ifr_buf[2]++;
215 3 if(ifr_buf[2]>=16)
216 3 {
217 4 ifr_buf[2]=0;
218 4 ifr_buf[1]++;
219 4 }
220 3 else
221 3 rxdataRF[ifr_buf[1]]<<=1;
222 3 }
223 2 else //如果没有比例关系,那么按时间与码宽关系定值;
224 2 {
225 3 if(zerotime<saveLtime)
226 3 {
227 4 rxdataRF[ifr_buf[1]] &=0xFFFE;//认为为0
228 4 ifr_buf[2]++;
229 4 if(ifr_buf[2]>=16)
230 4 {
231 5 ifr_buf[2]=0;
232 5 ifr_buf[1]++;
233 5 }
234 4 else
235 4 rxdataRF[ifr_buf[1]]<<=1;
236 4 }
237 3 else
238 3 {
239 4 rxdataRF[ifr_buf[1]] |=0x01;//作1处理
240 4 ifr_buf[2]++;
241 4 if(ifr_buf[2]>=16)
C51 COMPILER V7.50 IFR_IR 09/17/2007 09:47:22 PAGE 5
242 4 {
243 5 ifr_buf[2]=0;
244 5 ifr_buf[1]++;
245 5 }
246 4 else
247 4 rxdataRF[ifr_buf[1]]<<=1;
248 4 }
249 3 }
250 2
251 2
252 2 }//loop接收4个数据收完的话等待处理
253 1
254 1 if(ifr_buf[1]==0) return;//一收就错误,则退出
255 1 if(ifr_buf[2]!=0) //收完四个字节
256 1 {
257 2 for(;ifr_buf[2]<15;ifr_buf[2]++)
258 2 {
259 3 rxdataRF[ifr_buf[1]] &=0xFFFE;
260 3 rxdataRF[ifr_buf[1]]<<=1;
261 3 }
262 2 rxdataRF[ifr_buf[1]] &=0xFFFE;
263 2 ifr_buf[1]++;
264 2 }
265 1 //数据处理后转换到数据存放区:ifr_buf[0]--ifr_buf[3]
266 1 ifr_buf[0]=(uchar)rxdataRF[0];//低地址
267 1 ifr_buf[1]=(uchar)(rxdataRF[0]>>8);//高地址
268 1 ifr_buf[2]=(uchar)rxdataRF[1];//低数据
269 1 ifr_buf[3]=(uchar)(rxdataRF[1]>>8);//高数据
270 1 b_ifr=1;
271 1 if((ifr_buf[0]==0x55)&&(ifr_buf[1]==0x55)&&(ifr_buf[3]==0x03))
272 1 led_ray1(3);
273 1 }
274
275 //*********************************************************************################################
276 //*******************************************************##############################################
277 //****************************************************
278 //function:
279 //input :无
280 //output :无
281 //modify :2007-9-10
282 //*****************************************************
283 void checkok(uchar dat_dat)
284 {
285 1 bit b_check=0,b_check1=0;
286 1 bit b_keychoose1=0;
287 1
288 1 if(b_send)
289 1 {
290 2 b_send=0;
291 2 if(!b_study)led_ray1(1);else led_ray11(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -