本人以前做的一個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_();
- }
- }
- }
復制代碼