⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rprintf_8c-source.html

📁 avr应用测试程序
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00193 <span class="comment">//  uartPrintfNum(16, 6, FALSE, '.', 0x5AA5);  --&gt;  "..5AA5"</span><a name="l00194"></a><a class="code" href="group__rprintf.html#ga10">00194</a> <span class="keywordtype">void</span> <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(<span class="keywordtype">char</span> base, <span class="keywordtype">char</span> numDigits, <span class="keywordtype">char</span> isSigned, <span class="keywordtype">char</span> padchar, <span class="keywordtype">long</span> n)00195 {00196     <span class="comment">// define a global HexChars or use line below</span>00197     <span class="comment">//static char HexChars[16] = "0123456789ABCDEF";</span>00198     <span class="keywordtype">char</span> *p, buf[32];00199     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> x;00200     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> count;00201 00202     <span class="comment">// prepare negative number</span>00203     <span class="keywordflow">if</span>( isSigned &amp;&amp; (n &lt; 0) )00204     {00205         x = -n;00206     }00207     <span class="keywordflow">else</span>00208     {00209         x = n;00210     }00211 00212     <span class="comment">// setup little string buffer</span>00213     count = (numDigits-1)-(isSigned?1:0);00214     p = buf + <span class="keyword">sizeof</span> (buf);00215     *--p = <span class="charliteral">'\0'</span>;00216     00217     <span class="comment">// force calculation of first digit</span>00218     <span class="comment">// (to prevent zero from not printing at all!!!)</span>00219     *--p = hexchar(x%base); x /= base;00220     <span class="comment">// calculate remaining digits</span>00221     <span class="keywordflow">while</span>(count--)00222     {00223         <span class="keywordflow">if</span>(x != 0)00224         {00225             <span class="comment">// calculate next digit</span>00226             *--p = hexchar(x%base); x /= base;00227         }00228         <span class="keywordflow">else</span>00229         {00230             <span class="comment">// no more digits left, pad out to desired length</span>00231             *--p = padchar;00232         }00233     }00234 00235     <span class="comment">// apply signed notation if requested</span>00236     <span class="keywordflow">if</span>( isSigned )00237     {00238         <span class="keywordflow">if</span>(n &lt; 0)00239         {00240             *--p = <span class="charliteral">'-'</span>;00241         }00242         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(n &gt; 0)00243         {00244             *--p = <span class="charliteral">'+'</span>;00245         }00246         <span class="keywordflow">else</span>00247         {00248             *--p = <span class="charliteral">' '</span>;00249         }00250     }00251 00252     <span class="comment">// print the string right-justified</span>00253     count = numDigits;00254     <span class="keywordflow">while</span>(count--)00255     {00256         <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(*p++);00257     }00258 }00259 00260 <span class="preprocessor">#ifdef RPRINTF_FLOAT</span>00261 <span class="preprocessor"></span><span class="comment">// *** rprintfFloat ***</span>00262 <span class="comment">// floating-point print</span>00263 <span class="keywordtype">void</span> rprintfFloat(<span class="keywordtype">char</span> numDigits, <span class="keywordtype">double</span> x)00264 {00265     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> firstplace = FALSE;00266     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> negative;00267     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i, digit;00268     <span class="keywordtype">double</span> place = 1.0;00269     00270     <span class="comment">// save sign</span>00271     negative = (x&lt;0);00272     <span class="comment">// convert to absolute value</span>00273     x = (x&gt;0)?(x):(-x);00274     00275     <span class="comment">// find starting digit place</span>00276     <span class="keywordflow">for</span>(i=0; i&lt;15; i++)00277     {00278         <span class="keywordflow">if</span>((x/place) &lt; 10.0)00279             <span class="keywordflow">break</span>;00280         <span class="keywordflow">else</span>00281             place *= 10.0;00282     }00283     <span class="comment">// print polarity character</span>00284     <span class="keywordflow">if</span>(negative)00285         <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00286     <span class="keywordflow">else</span>00287         <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'+'</span>);00288 00289     <span class="comment">// print digits</span>00290     <span class="keywordflow">for</span>(i=0; i&lt;numDigits; i++)00291     {00292         digit = (x/place);00293 00294         <span class="keywordflow">if</span>(digit | firstplace | (place == 1.0))00295         {00296             firstplace = TRUE;00297             <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(digit+0x30);00298         }00299         <span class="keywordflow">else</span>00300             <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">' '</span>);00301         00302         <span class="keywordflow">if</span>(place == 1.0)00303         {00304             <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'.'</span>);00305         }00306         00307         x -= (digit*place);00308         place /= 10.0;00309     }00310 }00311 <span class="preprocessor">#endif</span>00312 <span class="preprocessor"></span>00313 <span class="preprocessor">#ifdef RPRINTF_SIMPLE</span>00314 <span class="preprocessor"></span><span class="comment">// *** rprintf1RamRom ***</span>00315 <span class="comment">// called by rprintf() - does a simple printf (supports %d, %x, %c)</span>00316 <span class="comment">// Supports:</span>00317 <span class="comment">// %d - decimal</span>00318 <span class="comment">// %x - hex</span>00319 <span class="comment">// %c - character</span><a name="l00320"></a><a class="code" href="group__rprintf.html#ga11">00320</a> <span class="keywordtype">int</span> <a class="code" href="group__rprintf.html#ga11">rprintf1RamRom</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)00321 {00322     <span class="comment">// simple printf routine</span>00323     <span class="comment">// define a global HexChars or use line below</span>00324     <span class="comment">//static char HexChars[16] = "0123456789ABCDEF";</span>00325     <span class="keywordtype">char</span> format_flag;00326     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> u_val, div_val, base;00327     va_list ap;00328 00329     va_start(ap, format);00330     <span class="keywordflow">for</span> (;;)00331     {00332         <span class="keywordflow">while</span> ((format_flag = READMEMBYTE(stringInRom,format++) ) != <span class="charliteral">'%'</span>)00333         {   <span class="comment">// Until '%' or '\0'</span>00334             <span class="keywordflow">if</span> (!format_flag)00335             {00336                 va_end(ap);00337                 <span class="keywordflow">return</span>(0);00338             }00339             <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(format_flag);00340         }00341 00342         <span class="keywordflow">switch</span> (format_flag = READMEMBYTE(stringInRom,format++) )00343         {00344             <span class="keywordflow">case</span> <span class="charliteral">'c'</span>: format_flag = va_arg(ap,<span class="keywordtype">int</span>);00345             <span class="keywordflow">default</span>:  <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(format_flag); <span class="keywordflow">continue</span>;00346             <span class="keywordflow">case</span> <span class="charliteral">'d'</span>: base = 10; div_val = 10000; <span class="keywordflow">goto</span> CONVERSION_LOOP;00347 <span class="comment">//          case 'x': base = 16; div_val = 0x10;</span>00348             <span class="keywordflow">case</span> <span class="charliteral">'x'</span>: base = 16; div_val = 0x1000;00349 00350             CONVERSION_LOOP:00351             u_val = va_arg(ap,<span class="keywordtype">int</span>);00352             <span class="keywordflow">if</span> (format_flag == <span class="charliteral">'d'</span>)00353             {00354                 <span class="keywordflow">if</span> (((<span class="keywordtype">int</span>)u_val) &lt; 0)00355                 {00356                     u_val = - u_val;00357                     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00358                 }00359                 <span class="keywordflow">while</span> (div_val &gt; 1 &amp;&amp; div_val &gt; u_val) div_val /= 10;00360             }00361             <span class="keywordflow">do</span>00362             {00363                 <span class="comment">//rprintfChar(pgm_read_byte(HexChars+(u_val/div_val)));</span>00364                 <a class="code" href="group__rprintf.html#ga6">rprintfu04</a>(u_val/div_val);00365                 u_val %= div_val;00366                 div_val /= base;00367             } <span class="keywordflow">while</span> (div_val);00368         }00369     }00370     va_end(ap);00371 }00372 <span class="preprocessor">#endif</span>00373 <span class="preprocessor"></span>00374 00375 <span class="preprocessor">#ifdef RPRINTF_COMPLEX</span>00376 <span class="preprocessor"></span><span class="comment">// *** rprintf2RamRom ***</span>00377 <span class="comment">// called by rprintf() - does a more powerful printf (supports %d, %u, %o, %x, %c, %s)</span>00378 <span class="comment">// Supports:</span>00379 <span class="comment">// %d - decimal</span>00380 <span class="comment">// %u - unsigned decimal</span>00381 <span class="comment">// %o - octal</span>00382 <span class="comment">// %x - hex</span>00383 <span class="comment">// %c - character</span>00384 <span class="comment">// %s - strings</span>00385 <span class="comment">// and the width,precision,padding modifiers</span>00386 <span class="comment">// **this printf does not support floating point numbers</span>00387 <span class="keywordtype">int</span> rprintf2RamRom(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *sfmt, ...)00388 {00389     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *f, *bp;00390     <span class="keyword">register</span> <span class="keywordtype">long</span> l;00391     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> u;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -