📄 tv2.lst
字号:
217 2 P25=1;
218 2 P26=1;
219 2 P27=1;
220 2
221 2 /*if (p!=0)
222 2 { P0=dis_code[pbai]; //频道
223 2 P2=0xfe;
224 2 delay_ms(5);
225 2
226 2 P0=dis_code[pshi];
227 2 P2=0xfd;
228 2 delay_ms(5);
229 2
230 2 P0=dis_code[pge];
231 2 P2=0xfb;
232 2 delay_ms(5);
233 2
234 2 P0=0x8c;
235 2 P2=0xf7;
236 2 delay_ms(5);
237 2 }
238 2 P2=0xff; */
239 2 }
240 1 }
C51 COMPILER V8.05a TV2 09/03/2008 15:10:22 PAGE 5
241
242 void write_byte_fi1256()
243 // fi1256写操作
244 { I2C_Start();//I2C总线开始
245 1
246 1 data_out(ADD);
247 1 data_out(DB1);
248 1 data_out(DB2);
249 1 data_out(0x8E);
250 1
251 1 NDB=(DB1*256+DB2)/16;
252 1 NDB=NDB-38;
253 1
254 1 if(NDB>0 && NDB<160) PB=0XA0; //频段计算 VHF-L
255 1 if(NDB>168 && NDB<466) PB=0X90; // VHF-H
256 1 if(NDB>470 && NDB<863) PB=0X30; // UHF
257 1
258 1 data_out(PB); //频段控制
259 1 I2C_Stop(); //I2C总线停止
260 1 delay_ms(100); // 写入周期
261 1 display();
262 1 }
263
264
265
266
267
268 void search() // 搜台、存台子程序
269 { DB1=FHIGH;
270 1 DB2=FLOW;
271 1 address=0;
272 1 fill_byte(0xff);
273 1 while(1)
274 1 {
275 2 K1=1;
276 2 K2=1;
277 2 K3=1;
278 2 K4=1;
279 2 if(K1==0)
280 2 {
281 3 DB2+=2;
282 3 if(DB2>255)
283 3 {DB2=0;DB1++;}
284 3 } //不延时,长按可连续调台
285 2
286 2 if(K2==0)
287 2 {
288 3 DB2-=2;
289 3 if(DB2==0) {DB2=255;DB1--;}
290 3 }
291 2 if(DB1==0x38)
292 2 {DB1=FHIGH; DB2=FLOW;}
293 2 if((DB1==FHIGH)&&(DB2<FLOW))
294 2 {DB1=0x37; DB2=0xff;}
295 2 if (K3==0)
296 2 {write_byte_eeprom(address,DB1);
297 3 address++;
298 3 write_byte_eeprom(address,DB2);
299 3 address++;
300 3 delay_ms(1000); //存台 确保按一次键,只写一次
301 3 }
302 2 write_byte_fi1256();
C51 COMPILER V8.05a TV2 09/03/2008 15:10:22 PAGE 6
303 2 if (address==(MAX_ADDR-1))
304 2 address=0;
305 2 if (K4==0)
306 2 { delay_ms(500);
307 3 write_byte_eeprom(MAX_ADDR,address); //将频道数存入最大地址处
308 3 mode=2;
309 3 break;
310 3 } //存台结束
311 2 }
312 1 }
313
314 void watch_tv() //看节目子程序
315 { unsigned char chmax;
316 1 unsigned int t;
317 1 address=0;
318 1 DB1=0;
319 1 DB2=0;
320 1 chmax=read_eeprom(MAX_ADDR);
321 1 if (chmax==0)
322 1 {t=100;
323 2 while(t!=0)
324 2 {
325 3 P0=0xc0;
326 3 P24=0;
327 3 delay_ms(5);
328 3 P24=1;
329 3
330 3 P0=0xc6;
331 3 P25=0;
332 3 delay_ms(5);
333 3 P25=1;
334 3
335 3 P0=0x89;
336 3 P26=0;
337 3 delay_ms(5);
338 3 P26=1;
339 3 t--;
340 3 }
341 2 mode=1;
342 2 }
343 1 if (mode==2)
344 1 { DB1=read_eeprom(address);
345 2 address++;
346 2 delay_ms(500);
347 2 DB2=read_eeprom(address);
348 2 address++;
349 2 delay_ms(500);
350 2 write_byte_fi1256();
351 2 while(1)
352 2 {
353 3 if (K1==0)
354 3 { DB1=read_eeprom(address);
355 4 address++;
356 4 delay_ms(500);
357 4 DB2=read_eeprom(address);
358 4 address++;
359 4 delay_ms(500);
360 4 write_byte_fi1256();
361 4 if (address==chmax)
362 4 address=0;
363 4 }
364 3 if (K2==0)
C51 COMPILER V8.05a TV2 09/03/2008 15:10:22 PAGE 7
365 3 { if (address<=2)
366 4 address=chmax+2;
367 4 address-=4; //退回到最后一个频道
368 4 DB1=read_eeprom(address);
369 4 address++;
370 4 delay_ms(500);
371 4 DB2=read_eeprom(address);
372 4 address++;
373 4 delay_ms(500);
374 4 write_byte_fi1256();
375 4
376 4 }
377 3 if (K3==0)
378 3 {delay_ms(500);
379 4 mode=1;
380 4 break;
381 4 }
382 3 }
383 2 }
384 1 }
385
386
387 /***********************************主程序*********************************/
388 void main()
389 { //start-ADD(C2,PIN15悬空)-ACK-DB1(频率1)-ACK-DB2(频率2)-ACK-CB(控制)-ACK-PB(波段)-ACK-STOP
390 1 ADD=0XC2; //地址
391 1 DB1=FHIGH; //分频1,可变
392 1 DB2=FLOW; //分频2,可变 f_picture=f_osc-f_pif=f_osc-38 MHz
393 1 //f_osc=(DB1*256+DB2)/16
394 1 address=0; //24c02 存台地址
395 1 mode=0;
396 1 //fill_byte(0xff); // 24c02 全部填充0xff
397 1 while(1)
398 1 {
399 2 K1=1;
400 2 K2=1;
401 2 K3=1;
402 2 K4=1;
403 2 if(K3==0)
404 2 mode=1;
405 2 if(K4==0)
406 2 mode=2;
407 2 if(mode==1)
408 2 {delay_ms(1000);
409 3 search();
410 3 }
411 2 if(mode==2)
412 2 {delay_ms(1000);
413 3 watch_tv();
414 3 }
415 2 }
416 1
417 1
418 1 }
419
420
421
422
423
424
425
C51 COMPILER V8.05a TV2 09/03/2008 15:10:22 PAGE 8
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1399 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 17
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -