📄 tuner.lst
字号:
251 3 //FM,中频频率为10.7MHz在32ms内的计数值应为0x53980
252 3 if((uiIFCount>=(FMIFS-FMDELTA))&&(uiIFCount<=(FMIFS+FMDELTA)))
253 3 {
254 4 return TRUE;
255 4 }
256 3
257 3 }
258 2 else
259 2 {
260 3 //AM,中频是450KHZ,在32MS内的计数为0x3840
261 3 if((uiIFCount>=(AMIFS-AMDELTA))&&(uiIFCount<=(AMIFS+AMDELTA)))
262 3 {
263 4 return TRUE;
264 4 }
265 3 }
266 2 return FALSE;
267 2 }
268 1
269 1 }
270
271 /********************************************
272 * 频率加1,如果超过范围,则自动从最小开始 *
273 * 返回当前频率值 *
274 ********************************************/
275 void RadioUp(void)
276 {
277 1 //WORD idata uiFreqTemp;
278 1
279 1 //当前频率加1个步长
280 1 if(FM_AM_Select == FM_MODE )
281 1 {
282 2 //加50KHz
283 2 if(DeltFMFreq >= (FMFREQMAX - FMFREQSTEP))
284 2 {
285 3 DeltFMFreq = 0;
286 3 if(Auto_Scan_Enable == 1)
287 3 Auto_Is_Reach = 1;
288 3 }
289 2 else
290 2 DeltFMFreq += FMFREQSTEP; //
291 2 Current_Freq=(WORD)DeltFMFreq+(WORD)FMFREQMIN;
292 2 }
293 1 else
294 1 {
295 2 if(DeltAMFreq >= (AMFREQMAX-AMFREQSTEP))
296 2 {
297 3 DeltAMFreq = 0;
298 3 if(Auto_Scan_Enable == 1)
299 3 Auto_Is_Reach = 1;
300 3 }
301 2 else
302 2 DeltAMFreq += AMFREQSTEP;
303 2 Current_Freq=(WORD)DeltAMFreq+AMFREQMIN;
C51 COMPILER V7.20 TUNER 06/30/2005 14:02:57 PAGE 6
304 2 }
305 1 //RadioFreq(Current_Freq);
306 1 //return Current_Freq;
307 1 }
308
309 /********************************************
310 * 频率减1,如果超过范围,则自动从最大开始 *
311 * 返回当前频率 *
312 ********************************************/
313 void RadioDown(void)
314 {
315 1 //WORD uiFreq;
316 1 //当前频率减1个步长
317 1 if(FM_AM_Select == FM_MODE)
318 1 {
319 2 if(DeltFMFreq < FMFREQSTEP) //如果当前的偏差小于步长, 那么设置最大值
320 2 DeltFMFreq = FMFREQMAX;
321 2 else
322 2 DeltFMFreq -= FMFREQSTEP;
323 2 Current_Freq=FMFREQMIN+DeltFMFreq;
324 2 }
325 1 else
326 1 {
327 2 if(DeltAMFreq < AMFREQSTEP)
328 2 DeltAMFreq = AMFREQMAX;
329 2 else
330 2 DeltAMFreq -= AMFREQSTEP;
331 2 Current_Freq=AMFREQMIN+(WORD)DeltAMFreq;
332 2 }
333 1
334 1 }
335 /*****************************************************************
336 * TUNER 处理函数 *
337 包括全自动扫描, 手动向下扫描, 手动向上扫描, 记忆存储
338 数字键的处理,
339 ****************************************************************/
340 void Tuner_Proc(void)
341 {
342 1 BYTE Lock_Flag;
343 1 BYTE TEMP1;
344 1 BYTE TEMP2;
345 1 if(Auto_Scan_Enable == Auto_Scan_Go)
346 1 {
347 2 //刚开始第一次自动扫描扫描
348 2 if(Auto_Scan_Start == 0)
349 2 {
350 3 if(FM_AM_Select == FM_MODE)
351 3 Current_Freq = FMFREQMIN; //在FM模式,置FM的频率为最小值
352 3 else
353 3 Current_Freq = AMFREQMIN; //AM模式的频率最小值
354 3
355 3 DeltFMFreq = 0; //FM的增量为0
356 3 DeltAMFreq = 0; //AM的增量为0
357 3 RadioMute(); //RADIO静音
358 3 RadioFreq(Current_Freq); //送当前频率到TUNER PLL
359 3 Auto_Scan_Start = 1; //自动扫描起始标志位置位
360 3 Scan_Channel = 0;
361 3 Wait_Lock_40ms = Wait_Timer_Start; //
362 3 }
363 2 else
364 2 {
365 3 Lock_Flag = RadioLock(); //看是否到达中频锁定时间
C51 COMPILER V7.20 TUNER 06/30/2005 14:02:57 PAGE 7
366 3 if( Lock_Flag != Timer_Not_Reach)
367 3 {
368 4 if(Lock_Flag == TRUE)
369 4 {
370 5 //如果有台锁定,那么保存台值,继续下一个扫描
371 5 //Scan_Channel,扫描的台的频率
372 5 if(FM_AM_Select == FM_MODE)
373 5 {
374 6 TEMP1 = FM_Start + (Scan_Channel * 2);
375 6 I2C_PutByte(A24C02, TEMP1, DeltFMFreq & 0xFF );
376 6 DelayX1ms(2);
377 6 TEMP2 = (DeltFMFreq & 0xFF00) >> 8;
378 6 I2C_PutByte(A24C02, TEMP1 + 1, TEMP2);
379 6 }
380 5 else
381 5 {
382 6 I2C_PutByte(A24C02, (AM_Start + Scan_Channel - 1), (BYTE)(DeltAMFreq & 0xFF) );
383 6 }
384 5 Scan_Channel++;
385 5 }
386 4
387 4 //如果还没有到频率的最大值和存储的台没有超过30,那么继续扫描
388 4 if((Auto_Is_Reach == 0)&& (Scan_Channel < 30))
389 4 {
390 5 RadioMute(); //中频静音
391 5 RadioUp(); //频率加加
392 5 RadioFreq(Current_Freq); //设置改变后的频率
393 5 Wait_Lock_40ms = Wait_Timer_Start;
394 5 }
395 4 else
396 4 {
397 5 //假如已经搜索到最大频率或者存储的台超过30
398 5 if(FM_AM_Select == FM_MODE)
399 5 {
400 6 //从24C02中取出第一个存储的频率
401 6 DeltFMFreq = I2C_GetByte(A24C02, (FM_Start + 0));
402 6 DeltFMFreq = (I2C_GetByte(A24C02, (FM_Start + 1))) << 8 + DeltFMFreq;
403 6 //如果取到的频率大于最大值,那么设置最小值频率为当前频率
404 6 if(DeltFMFreq > FMFREQMAX)
405 6 DeltFMFreq = 0;
406 6 Current_Freq = FMFREQMIN+ DeltFMFreq;
407 6 }
408 5 else
409 5 {
410 6 DeltAMFreq = I2C_GetByte(A24C02, (AM_Start + 0));
411 6 if(DeltAMFreq > AMFREQMAX)
412 6 DeltAMFreq = 0;
413 6 Current_Freq = AMFREQMIN+ DeltAMFreq;
414 6
415 6 }
416 5 RadioMute(); //radio静音
417 5 RadioFreq(Current_Freq); //设置当前频率
418 5 RadioOpen(); //Raido 打开
419 5 Auto_Scan_Enable = Auto_Scan_Stop;
420 5 Auto_Is_Reach = 0;
421 5 Wait_Lock_40ms = Wait_Timer_End;
422 5 Scan_Channel = 0;
423 5 Channel_Display = 100;
424 5 Auto_Scan_Start = 0;
425 5 }
426 4 }
427 3 }
C51 COMPILER V7.20 TUNER 06/30/2005 14:02:57 PAGE 8
428 2 }
429 1
430 1 else if(Manual_Scan_Enable != Manual_Scan_End)
431 1 {
432 2
433 2 if(Manual_Scan_Flag == 0)
434 2 {
435 3 RadioMute();
436 3 if(Manual_Scan_Enable == Manual_Scan_FF)//前向扫描
437 3 RadioUp();
438 3 else if(Manual_Scan_Enable == Manual_Scan_FB)//后向扫描
439 3 RadioDown();
440 3 RadioFreq(Current_Freq); //设置当前频率
441 3 Frequency_Display(); //显示当前频率
442 3 Wait_Lock_40ms = Wait_Timer_Start;
443 3 Manual_Scan_Flag = 1;
444 3 }
445 2 else
446 2 {
447 3 Lock_Flag = RadioLock(); //看是否到达中频锁定时间
448 3 if( Lock_Flag != Timer_Not_Reach)
449 3 {
450 4 if(Lock_Flag == TRUE)
451 4 {
452 5 RadioOpen();
453 5 Manual_Scan_Enable = Manual_Scan_End;
454 5 }
455 4 Manual_Scan_Flag = 0;
456 4
457 4 }
458 3 }
459 2
460 2
461 2
462 2 }
463 1 }
464 //执行下一曲按键
465 void Proc_Tuner_NEXT_KEY(void)
466 {
467 1 BYTE TEMP1;
468 1 BYTE TEMP2;
469 1
470 1 Manual_Scan_Enable = Manual_Scan_End;
471 1 Auto_Scan_Enable = Auto_Scan_Stop;
472 1
473 1 //如果在FM 模式
474 1 if(FM_AM_Select == FM_MODE)
475 1 {
476 2 //当前频道加加
477 2 if(Scan_Channel == FM_MAX_Channel - 1)
478 2 Scan_Channel = 0;
479 2 else
480 2 Scan_Channel++;
481 2 }
482 1 else
483 1 {
484 2 if(Scan_Channel == AM_MAX_Channel - 1)
485 2 Scan_Channel = 0;
486 2 else
487 2 Scan_Channel++;
488 2 }
489 1
C51 COMPILER V7.20 TUNER 06/30/2005 14:02:57 PAGE 9
490 1 if(FM_AM_Select == FM_MODE)
491 1 {
492 2 //取出台的对应频率
493 2 TEMP1 = FM_Start + (Scan_Channel * 2);
494 2 DeltFMFreq = I2C_GetByte(A24C02, TEMP1);
495 2 TEMP2 = I2C_GetByte(A24C02, TEMP1+1);
496 2 DeltFMFreq += (TEMP2 << 8);
497 2 if(DeltFMFreq > FMFREQMAX)
498 2 DeltFMFreq = 0;
499 2 Current_Freq = FMFREQMIN+ DeltFMFreq;
500 2 }
501 1 else
502 1 {
503 2 DeltAMFreq = I2C_GetByte(A24C02, (AM_Start + Scan_Channel));
504 2 if(DeltAMFreq > AMFREQMAX)
505 2 DeltAMFreq = 0;
506 2 Current_Freq = AMFREQMIN+ DeltAMFreq;
507 2 }
508 1 //设置当前频率
509 1 RadioMute();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -