显示屏驱动源代码
源代码在线查看: printf.lst
C51 COMPILER V7.06 PRINTF 02/21/2008 14:00:30 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PRINTF
OBJECT MODULE PLACED IN .\Output\Printf.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Printf.c COMPACT OPTIMIZE(9,SIZE) BROWSE INCDIR(.\Include\) DEBUG OBJECTEXT
-END PRINT(.\Source\Printf.lst) OBJECT(.\Output\Printf.obj)
stmt level source
1 #include "Config.h"
2
3 #ifdef SERIAL
4
5 #include "reg.h"
6 #include "Typedefs.h"
7 #include "main.h"
8 #include "printf.h"
9 #include
10
11 CODE BYTE Hex[] = "0123456789ABCDEF";
12 extern bit RS_Xbusy; // bit RS_Xbusy=0;
13 extern BYTE DebugLevel;
14
15
16 void DoPrint( const char CODE_P *fmt, va_list ap )
17 {
18 1 char ch;
19 1 char i;
20 1 long value;
21 1 bit fl_zero;
22 1 bit fl_num;
23 1 BYTE fl_len;
24 1 BYTE cnt;
25 1 DWORD mask=1;
26 1
27 1 #ifdef KEILC
28 1 char *ptr;
29 1 #endif
30 1
31 1 while(1) {
32 2
33 2 //----- Find Formatter % -----
34 2
35 2 switch( ch = *fmt++ ) {
36 3 case 0: return;
37 3 case '%': if( *fmt != '%' ) break;
38 3 fmt++;
39 3 default: _outchar( ch );
40 3 continue;
41 3 }
42 2
43 2 //----- Get Count -------------
44 2
45 2 fl_zero = 0;
46 2 fl_num = 0;
47 2 cnt = 0;
48 2
49 2 ch = *fmt++;
50 2
51 2 if( ch=='0' ) {
52 3 fl_zero = 1;
53 3 ch = *fmt++;
54 3 cnt = ch - '0';
C51 COMPILER V7.06 PRINTF 02/21/2008 14:00:30 PAGE 2
55 3 ch = *fmt++;
56 3 }
57 2 else if( ch>='0' && ch 58 3 cnt = ch - '0';
59 3 ch = *fmt++;
60 3 }
61 2
62 2 //----- Get char(B) / int / long(L) ----------------
63 2
64 2 fl_len = 2;
65 2
66 2 switch(ch) {
67 3 case 'l':
68 3 case 'L': ch = *fmt++; fl_len = 4; break;
69 3 case 'b':
70 3 case 'B': ch = *fmt++; fl_len = 1; break;
71 3 }
72 2
73 2 //----- Get Type Discriptor -----
74 2
75 2 switch( ch ) {
76 3
77 3 case 'd':
78 3 case 'u':
79 3
80 3 switch (fl_len) {
81 4 case 1:
82 4 if( ch=='d' ) value = (char)va_arg( ap, char );
83 4 else value = (BYTE)va_arg( ap, BYTE );
84 4 break;
85 4
86 4 case 2:
87 4 if( ch=='d' ) value = (int)va_arg( ap, int );
88 4 else value = (WORD)va_arg( ap, WORD );
89 4 break;
90 4
91 4 case 4:
92 4 if( ch=='d' ) value = (long)va_arg( ap, long );
93 4 else value = (DWORD)va_arg( ap, DWORD );
94 4 break;
95 4 }
96 3
97 3 if( value 98 4 _outchar('-');
99 4 value = value*(-1);
100 4 }
101 3
102 3 if(cnt==0) {
103 4 if( value==0 ) { _outchar('0'); continue; }
104 4
105 4 for(cnt=0, mask=1; cnt 106 5 if( (value/mask)==0 ) break;
107 5 mask = mask*10;
108 5 }
109 4 }
110 3
111 3 for(i=0, mask=1; i 112 3
113 3 while(1) {
114 4 ch = (value / mask) + '0';
115 4 if( ch=='0' && fl_zero==0 && mask!=1 ) ch=' ';
116 4 else fl_zero = 1;
C51 COMPILER V7.06 PRINTF 02/21/2008 14:00:30 PAGE 3
117 4 _outchar(ch);
118 4
119 4 value = value % (mask);
120 4 mask = mask / 10;
121 4
122 4 if( mask==0 )
123 4 break;
124 4 }
125 3 continue;
126 3
127 3 case 'x':
128 3 case 'X':
129 3
130 3 switch (fl_len) {
131 4 case 1: value = (BYTE)va_arg( ap, BYTE ); break;
132 4 case 2: value = (WORD)va_arg( ap, WORD ); break;
133 4 case 4: value = (DWORD)va_arg( ap, DWORD ); break;
134 4 }
135 3
136 3 if(cnt==0) cnt = fl_len*2;
137 3
138 3 for(i=0; i 139 4 _outchar( Hex[(value >> (cnt-i-1)*4) & 0x000f] );
140 4 }
141 3 continue;
142 3
143 3 case 's':
144 3
145 3 #ifdef TASKINGC
value = (WORD)va_arg( ap, WORD );
while(*(char CODE_P *)value!='\0')
_outchar(*(char CODE_P *)value++);
continue;
#elif defined KEILC
153 3
154 3 ptr = (char *)va_arg( ap, char* );
155 3 while(*ptr!='\0')
156 3 _outchar(*ptr++);
157 3 continue;
158 3
159 3 #endif
160 3
161 3
162 3 case 'c':
163 3 value = va_arg( ap, int );
164 3 _outchar((BYTE)value);
165 3 continue;
166 3
167 3 default:
168 3 value = (WORD)va_arg( ap, int );
169 3 continue;
170 3 }
171 2 }
172 1 }
173
174 //===========================================================================//
175 // //
176 //===========================================================================//
177 //va_list ap;
178
C51 COMPILER V7.06 PRINTF 02/21/2008 14:00:30 PAGE 4
179 void Printf( const char CODE_P *fmt, ... )
180 {
181 1 va_list ap;
182 1
183 1 va_start(ap, fmt);
184 1 DoPrint( fmt, ap );
185 1 va_end( ap );
186 1 }
187
188 void Puts( CODE_P char *ptr )
189 {
190 1 while(*ptr!='\0')
191 1 RS_tx(*ptr++);
192 1 }
193
194 //===========================================================================//
195 // //
196 //===========================================================================//
197 #ifdef DEBUG
198
199 void dPrintf( const char CODE_P *fmt, ... )
200 {
201 1 va_list ap;
202 1
203 1 if( DebugLevel >= DEBUG_INFO ) {
204 2 va_start(ap, fmt);
205 2 DoPrint( fmt, ap );
206 2 va_end( ap );
207 2 }
208 1 }
209 /*
210 void wPrintf( const char CODE_P *fmt, ... )
211 {
212 va_list ap;
213
214 if( DebugLevel >= DEBUG_WARN ) {
215 va_start(ap, fmt);
216 DoPrint( fmt, ap );
217 va_end( ap );
218 }
219 }
220 */
221
222 void ePrintf( const char CODE_P *fmt, ... )
223 {
224 1 va_list ap;
225 1
226 1 if( DebugLevel >= DEBUG_ERR ) {
227 2 va_start(ap, fmt);
228 2 DoPrint( fmt, ap );
229 2 va_end( ap );
230 2 }
231 1 }
232
233 //===========================================================================//
234 // //
235 //===========================================================================//
236 void dPuts( CODE_P char *ptr )
237 {
238 1 if( DebugLevel >= DEBUG_INFO ) {
239 2 while(*ptr!='\0')
240 2 RS_tx(*ptr++);
C51 COMPILER V7.06 PRINTF 02/21/2008 14:00:30 PAGE 5
241 2 }
242 1 }
243
244 #if defined( SUPPORT_PC ) || defined( SUPPORT_DTV ) || defined( DEBUG_SETPANEL)
245 void wPuts( CODE_P char *ptr )
246 {
247 1 if( DebugLevel >= DEBUG_WARN ) {
248 2 while(*ptr!='\0')
249 2 RS_tx(*ptr++);
250 2 }
251 1 }
252
253 void ePuts( CODE_P char *ptr )
254 {
255 1 if( DebugLevel >= DEBUG_ERR ) {
256 2 while(*ptr!='\0')
257 2 RS_tx(*ptr++);
258 2 }
259 1 }
260 #endif
261
262 #endif // DEBUG
263
264 //===========================================================================//
265 // //
266 //===========================================================================//
267 /*
268 #ifdef DEBUG
269 BYTE Getch(void)
270 {
271 while(!RS_ready());
272 return RS_rx();
273 }
274 #endif
275 */
276 BYTE Getche(void)
277 {
278 1 BYTE ch;
279 1
280 1 while(!RS_ready());
281 1 ch = RS_rx();
282 1 RS_tx(ch);
283 1
284 1 return ch;
285 1 }
286
287 #endif // SERIAL
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1077 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 97
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)