📄 osdbasic.lst
字号:
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE OSDBASIC
OBJECT MODULE PLACED IN .\Output\Osdbasic.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Osdbasic.c COMPACT OPTIMIZE(9,SIZE) BROWSE MODDP2 INCDIR(.\Include\) DEFINE
-(INTERNAL_MCU) DEBUG OBJECTEXTEND PRINT(.\Source\Osdbasic.lst) OBJECT(.\Output\Osdbasic.obj)
line level source
1 //osd_basic.c
2 // ver0.11 2/1x/2001 Change display format from hex to decimal
3 // 1.32 LJY11262001 .Add border features to OSD window
4 // 1.70 LJY05302003 .Support a menu with external OSD.
5 // 2.00 BYH05102007 .Support internal MCU, which connect with direct memoty bus
6 // It needs change whole ReadTW88, WriteTW88 to regTW88
7
8 #include "Config.h"
9
10 #include "typedefs.h"
11 #include "i2c.h"
12 #include "main.h"
13 #include "tw88.h"
14
15 #include "osdbasic.h"
16 #include "dispinfo.h"
17 #include "measure.h"
18 #include "printf.h"
19 #include "udfont.h"
20 #include "regmap.h"
21
22 extern CODE struct RegisterInfo UserRange;
23
24 //CODE BYTE ZoomAttr[]={ 0, 0, 0x40, 0x80, 0xc0 };
25
26 //IDATA struct BarInfo BarInfo;
27 IDATA struct OSDStrInfo OSDStrInfo;
28 extern bit I2CAutoIncFlagOn ;
29
30 //********************************************************************
31 //
32 // Font
33 //
34 //********************************************************************
35
36 void WaitEndofDisplayArea(void)
37 {
38 1 BYTE ret,i;
39 1
40 1 ret = ReadTW88(OSDWINSTATUS) & 0x40;
41 1
42 1 for(i=0;i<10;i++){
43 2 if( ret^ (ReadTW88(OSDWINSTATUS)&0x40)) break;
44 2 }
45 1 }
46
47 //=============================================================================
48 // Download OSD Color Look up
49 //=============================================================================
50 void Change_OSDColorLookup(void)
51 {
52 1 BYTE i,j;
53 1 for(j=0; j<2; j++) {
54 2 for(i=0; i<8; i++) {
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 2
55 3 WriteTW88(0x9c, i+j*8);
56 3 WriteTW88(0x9d, OSD_Color_LookUp_Data_Table[j][i]);
57 3 }
58 2 }
59 1 }
60
61 //=============================================================================
62 // Download RAM Font Data
63 //=============================================================================
64 #ifdef INTERNAL_MCU // it doesn't have auto increase I2C mode
65 void DownloadUDFont(void)
66 {
67 1 BYTE i, j;
68 1 #ifndef INTERNAL_MCU
BYTE k;
#endif
71 1
72 1 WriteTW88(TW88_MULTISTART, COLORFONT_START); // Set Color Font Start Address.
73 1
74 1 for(i=0; (i< NO_UDFONT) && (i<= MAX_FONT_RAM_CHARS) ; i++) {
75 2 //DownloadFont(i, RAMFONTDATA[i]);
76 2 WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) | 0x01); // Font RAM access mode ON
77 2 WriteTW88(TW88_FONTRAMADDR, i);
78 2
79 2 WriteTW88(0xff, ReadTW88(0xff) | 0x10); // Disable I2C index auto increment during multi-write
80 2 //WriteI2Cn( TW88I2CAddress, TW88_FONTRAMDATA, fontdata, 27 );
81 2 for ( j = 0; j<27; j++ ) {
82 3 WriteTW88(TW88_FONTRAMDATA, RAMFONTDATA[i][j]);
83 3 #ifndef INTERNAL_MCU
for ( k=5; k!=0; k-- ) ;
#endif
86 3 }
87 2
88 2 WriteTW88(TW88_ENABLERAM, (ReadTW88(TW88_ENABLERAM) & 0xfe)); // OSD RAM access mode OFF
89 2 #ifdef DEBUG_OSD
if (( i % 10 )== 0)
dPuts("\r\n");
dPrintf("%02xh, ", (WORD)i);
#endif
94 2 }
95 1
96 1 }
97
98 #else
void DownloadFont(BYTE cod, CODE_P BYTE *fontdata)
{
WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) | 0x01); // Font RAM access mode
WriteTW88(TW88_FONTRAMADDR, cod);
// WriteTW88(0xff, ReadTW88(0xff) | 0x10); // Disable I2C index auto increment during multi-write
WriteTW88(0xe0, ReadTW88(0xe0) | 0x10); // Disable I2C index auto increment during multi-write
WriteI2Cn( TW88I2CAddress, TW88_FONTRAMDATA, fontdata, 27 );
WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) & 0xfe); // OSD RAM access mode
}
void DownloadUDFont(void)
{
BYTE i;
WriteTW88(TW88_MULTISTART, COLORFONT_START); // Set Color Font Start Address.
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 3
for(i=0; i< NO_UDFONT && i<= MAX_FONT_RAM_CHARS ; i++) {
DownloadFont(i, RAMFONTDATA[i]);
}
}
#endif
122 //*****************************************************************************
123 // OSD Window internal subfunction for TW88xx
124 //*****************************************************************************
125 //*****************************************************************************
126 // Functions for TW88xx internal OSD
127 //*****************************************************************************
128 #ifdef SUPPORT_OSDPOSITIONMOVE
void SetOSDWindowX_TW88(BYTE winno, BYTE x)
{
WORD tmp;
BYTE dat;
if( winno<1 || winno>8 ) return;
SetOSDWindowNum(winno);
tmp = x << 3;
dat = ReadTW88(TW88_WINSTART_HI) & 0xf0;
dat = dat | (tmp>>8);
WriteTW88(TW88_WINSTART_HI, dat);
WriteTW88(TW88_WINXSTART, tmp);
}
#endif
147 void SetOSDWindowY_TW88(BYTE winno, BYTE y)
148 {
149 1 WORD tmp;
150 1 BYTE dat;
151 1
152 1 if( winno<1 || winno>8 ) return;
153 1 SetOSDWindowNum(winno);
154 1
155 1 tmp = y << 2;
156 1
157 1 dat = ReadTW88(TW88_WINSTART_HI) & 0x0f;
158 1 dat = dat | ((tmp>>8)<<4);
159 1
160 1 WriteTW88(TW88_WINSTART_HI, dat);
161 1 WriteTW88(TW88_WINYSTART, tmp);
162 1 }
163
164 //=============================================================================
165 // ShowOSDWindow_TW88
166 //=============================================================================
167 void ShowOSDWindowAll(BYTE on)
168 {
169 1 BYTE rd;
170 1
171 1 WaitEndofDisplayArea();
172 1 rd = ReadTW88(TW88_OSDLOCKUPSEL);
173 1
174 1 if( on )
175 1 WriteTW88(TW88_OSDLOCKUPSEL, rd&0xef); //
176 1 else
177 1 WriteTW88(TW88_OSDLOCKUPSEL, rd|0x10); // OSD All Off (TW8806B)
178 1
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 4
179 1 }
180 void ShowOSDWindow_TW88(BYTE winno, BYTE onoff)
181 {
182 1 BYTE rd;
183 1
184 1 if( winno<1 || winno>8 ) return;
185 1 SetOSDWindowNum(winno);
186 1
187 1 rd = ReadTW88(TW88_WINATTR);
188 1 if( onoff ) rd |= 0x01;
189 1 else rd &= 0xfe;
190 1
191 1 WaitEndofDisplayArea();
192 1 WriteTW88(TW88_WINATTR, rd);
193 1 }
194
195 #ifdef SUPPORT_OSDPOSITIONMOVE
WORD GetOSDWindowX(BYTE winno)
{
WORD x;
if( winno<1 || winno>8 ) return 0;
SetOSDWindowNum(winno);
x = (ReadTW88(TW88_WINSTART_HI) & 0x0f) << 8;
x = x | ReadTW88(TW88_WINXSTART);
return (BYTE)(x >> 3);
}
#endif
209
210 WORD GetOSDWindowY(BYTE winno)
211 {
212 1 WORD y;
213 1
214 1 if( winno<1 || winno>8 ) return 0;
215 1 SetOSDWindowNum(winno);
216 1
217 1 y = (ReadTW88(TW88_WINSTART_HI) & 0xf0) << 4;
218 1 y = y | ReadTW88(TW88_WINYSTART);
219 1
220 1 return (BYTE)(y >> 2);
221 1 }
222
223 #include "osdTW88.c"
224 //*****************************************************************************
225 //
226 // Internal Font test
227 //
228 //*****************************************************************************
229 //-----------------------------------------------------------------------------
230 // CopyUDCharToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE attr, BYTE ch)
231 // - For FONT RAM Char.
232 //-----------------------------------------------------------------------------
233 code BYTE FontTestWindow[] = { 0xa1, 10, 0xa2, 10, 0xa0, 0, 0xa3, 16, 0xa4, 16, 0xa5, 0x91,
234 0xa6, 1, 0xa7, 1, 0xa8, 0x22, 0xa9, 0x00, 0xaa, 00, 0xab, 0x62 };
235 void DisplayROMFont( BYTE scode )
236 {
237 1 BYTE i;
238 1
239 1 WriteTW88( 0x94, 0x02 ); // clear OSD RAM clear
240 1 WriteTW88( 0x9e, 0 ); // window #0
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 5
241 1 for ( i=0; i<(sizeof(FontTestWindow)/2); i++ )
242 1 WriteTW88(FontTestWindow[i*2], FontTestWindow[i*2+1]);
243 1 if ( scode == 0 ) {
244 2 WriteTW88( 0x94, 0x00 ); //0000 1100 ROM Font select with same attribute
245 2 for ( i=0; i<0xfe; i++ ) {
246 3 WriteTW88( 0x96, i );
247 3 WriteTW88( 0x97, i );
248 3 WriteTW88( 0x98, 0x97 );
249 3 }
250 2 }
251 1 else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -