📄 v46x_panel.lst
字号:
C51 COMPILER V7.50 V46X_PANEL 12/14/2006 10:36:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE V46X_PANEL
OBJECT MODULE PLACED IN .\V46X_PANEL.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\V46X_PANEL.C LARGE DEBUG OBJECTEXTEND PRINT(.\V46X_PANEL.lst) OBJ
-ECT(.\V46X_PANEL.obj)
line level source
1 #include "..\inc\V46X_PANEL.h"
2 #include "..\inc\V46X_RegDef.h"
3 #include "..\inc\Gamma_Tab.h"
4
5 extern void I2C_Write(unsigned char,unsigned char,unsigned char,unsigned char *);
6 extern void I2C_Read(unsigned char,unsigned char,unsigned char,unsigned char *);
7 extern void I2C_WriteByte(unsigned char,unsigned char,unsigned char);
8 extern unsigned char I2C_ReadByte(unsigned char,unsigned char);
9
10 extern unsigned char CVD1_ReadWrite(unsigned char, unsigned char, unsigned char);
11
12 void V46X_Set_ScanLines(unsigned char);
13
14
15 bit V46X_If_CorrectCS();
16
17
18 #define V46X_WRID 0x28
19 #define W_TYPE 0x01 //Type for Write in CVD1
20 #define R_TYPE 0x00
21
22 extern unsigned char ColorEN;
23
24 //unsigned char _Color = NTSC, _Source = VIDEO1, _Screen = 0, _HPosition = 0x20, _VPosition = 0;
25 unsigned char _Scan = S525, _Color = NTSC, _Source = VIDEO1, _Screen = 0, _HPosition = 0x20, _VPosition =
-0;
26
27 code unsigned char _VStatus[8] =
28 {
29 0x00, // NTSC
30 0x05, // PAL
31 0x06, // SECAM
32 0x01, // PAL M
33 0x05, // PAL N
34 0x01, // PAL 60
35 0x00, // NTSC 433
36 0x04, // NTSC N
37 };
38
39 void _Delay(unsigned int value)
40 {
41 1 while(value>0)
42 1 value--;
43 1 }
44
45 void V46X_RegInit()
46 {
47 1
48 1 // I2C_WriteByte(V46X_WRID, 0xAD, 0x07); //Enable TV-Decoder source detect interrupt
49 1
50 1 I2C_Write(V46X_WRID, 0x00, 0x87, TCON_Ctrl); //V462 Reg. from 0x00~ 0x86
51 1 I2C_WriteByte(V46X_WRID, 0xA7, TCON_Ctrl[0x87]); //RGBDAC output voltage
52 1
53 1 // I2C_WriteByte(V46X_WRID, 0x90, 0x04); //Dither ON (Digital Panel) *
C51 COMPILER V7.50 V46X_PANEL 12/14/2006 10:36:49 PAGE 2
54 1 // I2C_WriteByte(V46X_WRID, 0x92, 0x20); // (Digital Panel) *
55 1
56 1 V46X_Gamma_Init();
57 1 }
58
59 void V46X_Gamma_Init()
60 {
61 1 unsigned char i;
62 1
63 1 I2C_WriteByte(V46X_WRID, 0x0C, 0xF6);
64 1 for (i=0;;i++)
65 1 {
66 2 I2C_WriteByte(V46X_WRID, 0x15, Gamma_Table2[i]);
67 2 I2C_WriteByte(V46X_WRID, 0x15, Gamma_Table2[i]);
68 2 I2C_WriteByte(V46X_WRID, 0x15, Gamma_Table2[i]);
69 2 if ( i == 0xFF )
70 2 break;
71 2 }
72 1 I2C_WriteByte(V46X_WRID, 0x0C, 0xFA);
73 1 }
74
75 void V46X_HV(bit horizontal, bit vertical)
76 {
77 1 unsigned char hv;
78 1
79 1 hv = TCON_Ctrl[0x60];
80 1
81 1 if ( horizontal )
82 1 hv ^= 0x18;
83 1 if ( vertical )
84 1 hv ^= 0x60;
85 1
86 1 I2C_WriteByte(V46X_WRID, 0x60, hv);
87 1 }
88
89 bit V46X_If_Signal_In()
90 {
91 1 unsigned char r3A;
92 1
93 1 r3A = CVD1_ReadWrite(R_TYPE, 0x3A, 0x00) & 0x1;
94 1
95 1 if ( r3A == 0x0 )
96 1 return 1;
97 1 else
98 1 return 0;
99 1 }
100
101
102 void V46X_VideoSource(unsigned char video_source)
103 {
104 1 _Source = video_source;
105 1
106 1 if ( _Source <= SVIDEO2 )
107 1 {
108 2 V46X_Change_Mode(_Source, _Color, _Screen);
109 2 return;
110 2 }
111 1 }
112
113
114 void V46X_Set_ScreenMode(unsigned char screen_mode)
115 {
C51 COMPILER V7.50 V46X_PANEL 12/14/2006 10:36:49 PAGE 3
116 1 _Screen = screen_mode;
117 1 }
118
119 void V46X_ScreenMode(unsigned char screen_mode)
120 {
121 1 _Screen = screen_mode;
122 1 // _Screen = 0;
123 1
124 1 I2C_WriteByte(V46X_WRID, 0x1A, 0x80); // Turn OFF Screen;
125 1
126 1 I2C_Write(V46X_WRID, 0x08, 0x03, &TCON_Scaler[_Screen][_Scan][0]);
127 1 I2C_Write(V46X_WRID, 0x38, 0x28, &TCON_Scaler[_Screen][_Scan][3]);
128 1
129 1 _Delay(20000);
130 1 // I2C_WriteByte(V46X_WRID, 0x1A, 0x40); // Turn ON Screen;
131 1 }
132
133 unsigned char V46X_Get_ColorSystem()
134 {
135 1 return _Color;
136 1 }
137
138 void V46X_ColorSystem(unsigned char color_system)
139 {
140 1 unsigned char i,R00;
141 1
142 1 _Color = color_system;
143 1
144 1 if ( _Source == SVIDEO1 || _Source == SVIDEO2)
145 1 R00 = VideoSTD_Data[_Color][0] | 0x1;
146 1 else
147 1 R00 = VideoSTD_Data[_Color][0];
148 1
149 1 if ( _Scan == S625 )
150 1 R00 = R00 | 0x30;
151 1 else
152 1 R00 = R00 & 0xCF;
153 1
154 1 CVD1_ReadWrite(W_TYPE, 0x00, R00);
155 1
156 1 for (i=1; i<19; i++)
157 1 CVD1_ReadWrite(W_TYPE, VideoSTD_Addr[i], VideoSTD_Data[_Color][i]);
158 1 _Delay(20000);
159 1 }
160
161 unsigned char V46X_Detect_ColorSystem()
162 {
163 1 unsigned char r3A,r3C;
164 1
165 1 r3C = CVD1_ReadWrite(R_TYPE, 0x3C, 0x00);
166 1 r3A = CVD1_ReadWrite(R_TYPE, 0x3A, 0x00);
167 1 if ( (r3C&0x8) || (r3A&0x1) ) // Noisy or NO Signal
168 1 return _Color;
169 1 if ( V46X_If_CorrectCS() )
170 1 return _Color;
171 1
172 1 _Delay(200);
173 1 r3C = CVD1_ReadWrite(R_TYPE, 0x3C, 0x00);
174 1 r3A = CVD1_ReadWrite(R_TYPE, 0x3A, 0x00);
175 1 if ( (r3C&0x8) || (r3A&0x1) ) // Noisy or NO Signal
176 1 return _Color;
177 1 if ( V46X_If_CorrectCS() )
C51 COMPILER V7.50 V46X_PANEL 12/14/2006 10:36:49 PAGE 4
178 1 return _Color;
179 1
180 1 _Delay(200);
181 1 r3C = CVD1_ReadWrite(R_TYPE, 0x3C, 0x00);
182 1 r3A = CVD1_ReadWrite(R_TYPE, 0x3A, 0x00);
183 1 if ( (r3C&0x8) || (r3A&0x1) ) // Noisy or NO Signal
184 1 return _Color;
185 1 if ( V46X_If_CorrectCS() )
186 1 return _Color;
187 1
188 1 I2C_WriteByte(V46X_WRID, 0x1A, 0x80); // Turn OFF Screen;
189 1
190 1 _Delay(50000);
191 1 _Delay(30000);
192 1
193 1 r3A = CVD1_ReadWrite(R_TYPE, 0x3A, 0x00);
194 1 r3C = CVD1_ReadWrite(R_TYPE, 0x3C, 0x00);
195 1
196 1 if ( r3A&0x1 ) // No Signal
197 1 {
198 2 // I2C_WriteByte(V46X_WRID, 0x1A, 0x40); // Turn ON Screen;
199 2 return _Color;
200 2 }
201 1
202 1 if ( (r3C&0x4) ) // 625 Detected
203 1 {
204 2 if ( ColorEN&0x2 )
205 2 {
206 3 V46X_ColorSystem(PAL);
207 3 if ( V46X_If_CorrectCS() )
208 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -