本人以前做的一个DVD+TV 项目,51用做控制,含 NEC红外遥控接收和转发,VFD1632驱动,OSD 芯片M35055,NTSC高频头控制以及I2C 24C02的读写,因为以前所写,有些地方看起来有点乱,但功能模块OK,整个程序也是可以运行的,希望能给初用者有点参考
部分源代码
-
- //**************************************
- //BY EDIL FOR DVD+TV
- //**************************************
- #include "reg51.h"
- #include "intrins.h"
- #include "global.h"
- #include "main.h"
- //*******************************function
- void main_task(void);
- void main()
- {
-
- PSW=0;
- SP=0x50 ; //48 byte
- TH0=0x0;//30ms
- TL0=0x0;
- TH1=0x3c ; //0xD8;//50ms
- TL1=0xaf; //0xEF;
- TMOD=0x11;
- PCON=0;
- SCON=0x00; // mode 0
- ET0=0; //timer 0 int enabled
- ET1=1; //timer 1 int disabled
- EX0=0; //extrn int0 int_enable
- EX1=1; //extrn int1 int_disable
- TR0=1; //timer 0 start
- TR1=1; //timer 1 start
- IT0=1; //extrn int 0 edge flag
- IT1=1; //extrn int 1 edge flag
- ES=0; //turn off serial port int
- U1369_RESET_PIN=1;
- POWER_CTRL_PIN=1;
- P3=P3&0x1f;
- P1=P1&0x8F;
-
- EA=1;
- while(1)
- {
- main_task();
- }
- }
- //************************************************************
- void main_task()
- {
- //******************REMOTE CONTROL
- Tv_Process_key();
- VFD_scan_key();
- Process_Tv_Osd();
- }
- void U1369_Reset()
- {
-
- delay_n_ms(100);
- U1369_RESET_PIN=1;
- delay_n_ms(100);
- delay_n_ms(100);
- U1369_RESET_PIN=0;
- }
- static void delay_n_ms(unsigned char i)
- {
- unsigned char j,k;
- for(j=0;j<i;j++) // i*400us
- {
- for(k=0;k<100;k++)
- {
- _nop_(); //400us
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
复制代码