jm_LiquidCrystal_I2C.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #include <jm_LiquidCrystal_I2C.h>
  2. // -----------------------------------------------------------------------------
  3. int jm_LiquidCrystal_I2C::buf_u32( uint32_t u32 )
  4. {
  5. len = snprintf( buf, 12, "%lu", u32 );
  6. return len;
  7. }
  8. int jm_LiquidCrystal_I2C::buf_s32( int32_t s32 )
  9. {
  10. if (s32)
  11. len = snprintf( buf, 12, "%+li", s32 );
  12. else
  13. len = snprintf( buf, 12, "0" );
  14. return len;
  15. }
  16. int jm_LiquidCrystal_I2C::buf_u32f( uint32_t u32, int nfrac )
  17. {
  18. buf_u32(u32);
  19. if (len > nfrac) {
  20. memmove( &buf[len-nfrac+1], &buf[len-nfrac], nfrac );
  21. len++;
  22. } else {
  23. memmove( &buf[nfrac+1+1-len], &buf[0], len );
  24. memset( &buf[0], '0', nfrac+1+1-len );
  25. len = nfrac+1+1;
  26. }
  27. buf[len-nfrac-1] = '.';
  28. return len;
  29. }
  30. int jm_LiquidCrystal_I2C::buf_s32f( int32_t value, int nfrac )
  31. {
  32. buf_u32f( (value<0?-value:+value), nfrac );
  33. if (value) {
  34. memmove( &buf[1], &buf[0], len );
  35. buf[0] = sign(value)?'+':'-';
  36. len++;
  37. }
  38. return len;
  39. }
  40. int jm_LiquidCrystal_I2C::buf_rjprint( int num ) // right justification print
  41. {
  42. return ( print_spaces( (num-len) >= 0 ? (num-len) : 0 ) + write( buf, len ) );
  43. }
  44. // -----------------------------------------------------------------------------
  45. jm_LiquidCrystal_I2C::jm_LiquidCrystal_I2C() : fm_LiquidCrystal_I2C::fm_LiquidCrystal_I2C(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE)
  46. {
  47. }
  48. // -----------------------------------------------------------------------------
  49. void jm_LiquidCrystal_I2C::begin()
  50. {
  51. fm_LiquidCrystal_I2C::begin(20, 4, LCD_5x8DOTS);
  52. }
  53. void jm_LiquidCrystal_I2C::clr_screen()
  54. {
  55. clear();
  56. }
  57. void jm_LiquidCrystal_I2C::set_cursor( int col, int row )
  58. {
  59. setCursor(col, row);
  60. }
  61. // -----------------------------------------------------------------------------
  62. int jm_LiquidCrystal_I2C::print_space()
  63. {
  64. return print(' ');
  65. }
  66. int jm_LiquidCrystal_I2C::print_spaces( int num )
  67. {
  68. for (int i=0; i<num; i++) print_space();
  69. return num;
  70. }
  71. // -----------------------------------------------------------------------------
  72. int jm_LiquidCrystal_I2C::print_sgn( int sgn )
  73. {
  74. return print( (sgn==+1) ? '+' : (sgn==-1) ? '-' : ' ' );
  75. }
  76. int jm_LiquidCrystal_I2C::print_sign( bool sign )
  77. {
  78. return print( sign ? '+' : '-' );
  79. }
  80. // -----------------------------------------------------------------------------
  81. int jm_LiquidCrystal_I2C::print_u8( uint8_t value )
  82. {
  83. return print_u32( (uint32_t)value, 3 );
  84. }
  85. int jm_LiquidCrystal_I2C::print_u8( uint8_t value, int nprint )
  86. {
  87. return print_u32( (uint32_t)value, nprint );
  88. }
  89. // -----------------------------------------------------------------------------
  90. int jm_LiquidCrystal_I2C::print_s8( int8_t value )
  91. {
  92. return print_s32( (int32_t)value, 3+1 );
  93. }
  94. int jm_LiquidCrystal_I2C::print_s8( int8_t value, int nprint )
  95. {
  96. return print_s32( (int32_t)value, nprint );
  97. }
  98. // -----------------------------------------------------------------------------
  99. int jm_LiquidCrystal_I2C::print_u16( uint16_t value )
  100. {
  101. return print_u32( (uint32_t)value, 5 );
  102. }
  103. int jm_LiquidCrystal_I2C::print_u16( uint16_t value, int nprint )
  104. {
  105. return print_u32( (uint32_t)value, nprint );
  106. }
  107. // -----------------------------------------------------------------------------
  108. int jm_LiquidCrystal_I2C::print_s16( int16_t value )
  109. {
  110. return print_s32( (int32_t)value, 5+1 );
  111. }
  112. int jm_LiquidCrystal_I2C::print_s16( int16_t value, int nprint )
  113. {
  114. return print_s32( (int32_t)value, nprint );
  115. }
  116. // -----------------------------------------------------------------------------
  117. int jm_LiquidCrystal_I2C::print_u32( uint32_t value )
  118. {
  119. return print_u32( value, 10 );
  120. }
  121. int jm_LiquidCrystal_I2C::print_u32( uint32_t value, int nprint )
  122. {
  123. buf_u32( value );
  124. return buf_rjprint( nprint );
  125. }
  126. // -----------------------------------------------------------------------------
  127. int jm_LiquidCrystal_I2C::print_s32( int32_t value )
  128. {
  129. return print_s32( value, 10+1 );
  130. }
  131. int jm_LiquidCrystal_I2C::print_s32( int32_t value, int nprint )
  132. {
  133. buf_s32( value );
  134. return buf_rjprint( nprint );
  135. }
  136. // -----------------------------------------------------------------------------
  137. int jm_LiquidCrystal_I2C::print_h4( uint8_t value )
  138. {
  139. value &= 0x0F;
  140. return print( value>=10 ? (char)('A'+value-10) : (char)('0'+value) );
  141. }
  142. int jm_LiquidCrystal_I2C::print_h8( uint8_t value )
  143. {
  144. return print_h4( value>>4 ) + print_h4( value>>0 );
  145. }
  146. int jm_LiquidCrystal_I2C::print_h16( uint16_t value )
  147. {
  148. return print_h8( (uint8_t)(value>>8) ) + print_h8( (uint8_t)(value>>0) );
  149. }
  150. int jm_LiquidCrystal_I2C::print_h24( uint32_t value )
  151. {
  152. return print_h8( (uint8_t)(value>>16) ) + print_h16( (uint16_t)(value>>0) );
  153. }
  154. int jm_LiquidCrystal_I2C::print_h32( uint32_t value )
  155. {
  156. return print_h16( (uint16_t)(value>>16) ) + print_h16( (uint16_t)(value>>0) );
  157. }
  158. // -----------------------------------------------------------------------------
  159. int jm_LiquidCrystal_I2C::print_u32f( uint32_t value, int nfrac )
  160. {
  161. return print_u32f( value, nfrac, 10+1 );
  162. }
  163. int jm_LiquidCrystal_I2C::print_u32f( uint32_t value, int nfrac, int nprint )
  164. {
  165. buf_u32f( value, nfrac );
  166. return buf_rjprint( nprint );
  167. }
  168. // -----------------------------------------------------------------------------
  169. int jm_LiquidCrystal_I2C::print_s32f( int32_t value, int nfrac )
  170. {
  171. return print_s32f( value, nfrac, 10+1+1 );
  172. }
  173. int jm_LiquidCrystal_I2C::print_s32f( int32_t value, int nfrac, int nprint )
  174. {
  175. buf_s32f( value, nfrac );
  176. return buf_rjprint( nprint );
  177. }
  178. // -----------------------------------------------------------------------------
  179. // END.