parent
9a2285b53b
commit
efd695e54a
@ -1,165 +0,0 @@
|
|||||||
// TerSer.h Avec zéros non significatifs
|
|
||||||
// remplace serial.Print TerGet()
|
|
||||||
// #include "TerSer.h" SetupTerSer();
|
|
||||||
//Dec8-->Dec8u/s Dec16-->Dec16u/s 190210 jmk 16h
|
|
||||||
void SetupTerSer() {
|
|
||||||
UBRR0=F_CPU/(9600*16L)-1; // set speed
|
|
||||||
UCSR0B=0x18; // -- -- -- rxe txe -- -- --
|
|
||||||
UCSR0C=0x06; // set mode: 8 data bits, no parity, 1 stop bit
|
|
||||||
}
|
|
||||||
// Utilisation avec Pythie
|
|
||||||
//Rx S1 est toujours en sortie sur Pythie
|
|
||||||
//Tx S2 aussi, sous controle du 328 si TerOn (S2 ignoré);
|
|
||||||
//#define TerOn UBRR0=F_CPU/(9600*16L)-1; UCSR0C=0x06; UCSR0B=0x08
|
|
||||||
//#define TerOff DelMs(3); UCSR0C=0x06; UCSR0B=0
|
|
||||||
// définir S1 S2 selon applic
|
|
||||||
|
|
||||||
byte TerGet() { // read bloquant
|
|
||||||
while (!(UCSR0A&0x80)); // wait
|
|
||||||
return UDR0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TerCar( byte dd) { // write bloquant Ok initial
|
|
||||||
while(!(UCSR0A&0x20));// wait
|
|
||||||
UDR0=dd; // OK, send it now!
|
|
||||||
}
|
|
||||||
|
|
||||||
void Echo () {
|
|
||||||
TerCar ( TerGet() );
|
|
||||||
}
|
|
||||||
void TerCR() {
|
|
||||||
TerCar(13);TerCar(10);
|
|
||||||
}
|
|
||||||
void TerText(const char str[]) {
|
|
||||||
for (byte i=0; i< strlen(str); i++) {
|
|
||||||
TerCar(str[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TerBin8 (byte bb) {
|
|
||||||
for (byte i=0;i<8;i++) {
|
|
||||||
if (bb&0x80) TerCar('1');
|
|
||||||
else TerCar('0');
|
|
||||||
bb <<= 1;
|
|
||||||
}
|
|
||||||
TerCar(' ');
|
|
||||||
}
|
|
||||||
char TerConvNibble (byte nn) { // converti 4 bit hexa en Ascii
|
|
||||||
byte cc;
|
|
||||||
if (nn<10) {cc = nn + '0';}
|
|
||||||
else {cc = nn-10 + 'A';}
|
|
||||||
return cc;
|
|
||||||
}
|
|
||||||
void TerHex8 (byte hh) {
|
|
||||||
byte cc;
|
|
||||||
cc = TerConvNibble (hh >> 4) ; // ne modifie pas hh
|
|
||||||
TerCar(cc);
|
|
||||||
cc = TerConvNibble (hh & 0x0F) ;
|
|
||||||
TerCar(cc);
|
|
||||||
TerCar(' '); // space
|
|
||||||
}
|
|
||||||
void TerHex16 (uint16_t hh) {
|
|
||||||
byte cc;
|
|
||||||
cc = TerConvNibble (hh >> 12) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 8)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 4)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh )&0x0F) ; TerCar(cc);
|
|
||||||
TerCar(' ');
|
|
||||||
}
|
|
||||||
void TerHex12 (uint16_t hh) {
|
|
||||||
byte cc=0;
|
|
||||||
cc = TerConvNibble ((hh >> 8)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 4)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble (hh & 0x0F) ; TerCar(cc);
|
|
||||||
TerCar(' ');
|
|
||||||
}
|
|
||||||
void TerHex20 (uint32_t hh) {
|
|
||||||
byte cc;
|
|
||||||
cc = TerConvNibble ((hh >> 16)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 12)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 8 )&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 4 )&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble (hh & 0x0F) ; TerCar(cc);
|
|
||||||
TerCar(' ');
|
|
||||||
}
|
|
||||||
void TerHex32 (uint32_t hh) {
|
|
||||||
byte cc;
|
|
||||||
|
|
||||||
cc = TerConvNibble ((hh >> 28)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 24)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 20)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 16)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 12)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 8)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh >> 4)&0x0F) ; TerCar(cc);
|
|
||||||
cc = TerConvNibble ((hh )&0x0F) ; TerCar(cc);
|
|
||||||
TerCar(' ');
|
|
||||||
}
|
|
||||||
uint16_t TerBinDec8 (uint8_t bb) {
|
|
||||||
uint16_t dd=0;
|
|
||||||
for (byte i=0; i<8; i++) {
|
|
||||||
if ((dd & 0x0F)>0x04) {dd += 0x03;}
|
|
||||||
if ((dd & 0xF0)>0x40) {dd += 0x30;}
|
|
||||||
dd=dd<<1;
|
|
||||||
if ((bb & 0x80)) {dd += 1;} //inject bit
|
|
||||||
bb=bb<<1; // prepare next bit
|
|
||||||
}
|
|
||||||
return dd;
|
|
||||||
}
|
|
||||||
#define TerDec8(v) \
|
|
||||||
do { const int16_t vv = (v); \
|
|
||||||
if(vv<0) { TerDec8S(vv); } \
|
|
||||||
else { TerDec8U(vv); } \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
void TerDec8U (uint8_t hh) {
|
|
||||||
TerHex12(TerBinDec8(hh));
|
|
||||||
}
|
|
||||||
|
|
||||||
void TerDec8S (int8_t hh) {
|
|
||||||
if (hh<0) { // négatif
|
|
||||||
TerCar('-'); hh = -hh;
|
|
||||||
} else {
|
|
||||||
TerCar('+');
|
|
||||||
}
|
|
||||||
TerHex12(TerBinDec8(hh));
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t TerBinDec16 (uint16_t bb) {
|
|
||||||
uint32_t dd=0;
|
|
||||||
for (byte i=0; i<16 ; i++) {
|
|
||||||
if ((dd & 0x000F)>0x0004) {dd += 0x0003;}
|
|
||||||
if ((dd & 0x00F0)>0x0040) {dd += 0x0030;}
|
|
||||||
if ((dd & 0x0F00)>0x0400) {dd += 0x0300;}
|
|
||||||
if ((dd & 0xF000)>0x4000) {dd += 0x3000;}
|
|
||||||
dd=dd<<1;
|
|
||||||
if ((bb & 0x8000)) {dd += 1; } //inject bit
|
|
||||||
bb<<=1; // prepare next bit
|
|
||||||
}
|
|
||||||
return dd;
|
|
||||||
}
|
|
||||||
void TerDec9999 (uint16_t hh) { // limité à 0x2703
|
|
||||||
if (hh>9999) { TerText("over "); }
|
|
||||||
else TerHex16(TerBinDec16(hh));
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TerDec16(v) \
|
|
||||||
do { const int32_t vv = (v); \
|
|
||||||
if(vv<0) { TerDec16S(vv); } \
|
|
||||||
else { TerDec16U(vv); } \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
void TerDec16U (uint32_t hh) { //
|
|
||||||
TerHex20(TerBinDec16(hh));
|
|
||||||
}
|
|
||||||
|
|
||||||
void TerDec16S (int16_t hh) { // signé
|
|
||||||
if (hh<0) { // negatif
|
|
||||||
TerCar('-'); hh = -hh;
|
|
||||||
} else {
|
|
||||||
TerCar('+');
|
|
||||||
}
|
|
||||||
TerHex20(TerBinDec16(hh));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
@ -1,13 +0,0 @@
|
|||||||
//TestTerSerEmpty.ino Terminal série et aff nombres
|
|
||||||
|
|
||||||
#include "TerSer.h"
|
|
||||||
|
|
||||||
void setup() {
|
|
||||||
SetupTerSer();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
|
||||||
TerText("Empty"); TerCR();
|
|
||||||
|
|
||||||
}
|
|
@ -1,97 +1,33 @@
|
|||||||
//TestTerSer.ino Terminal série et aff nombres
|
//TestTerSer.ino Terminal série et aff nombres
|
||||||
|
#include "TerSer.h"
|
||||||
|
|
||||||
#include "TerSer.h"
|
int16_t v16s; uint16_t v16; uint8_t v8;
|
||||||
#define Serialprint(v,BIN) TerBin8(v)
|
|
||||||
void setup() {
|
void setup() {
|
||||||
SetupTerSer();
|
SetupTerSer();
|
||||||
}
|
}
|
||||||
uint8_t v8;
|
void loop(){ // empty 456 bytes 16 var
|
||||||
int8_t v8s;
|
Textln("Test TerSer");
|
||||||
uint16_t var;
|
v8= 19; Bin8(v8); CR();
|
||||||
int16_t vars;
|
v16= 1000; Hex16(v16); CR();
|
||||||
|
v16s= 0; Dec16(v16s);CR();
|
||||||
void loop() {
|
v16s= 5; Dec16(v16s);CR();
|
||||||
TerText("Test TerSer.h"); TerCR();
|
v16s= 23124; Dec16(v16s);CR();
|
||||||
|
v16s= -200; Dec16(v16s);CR();
|
||||||
Serialprint(0x35,BIN);
|
v16= 200; Dec16(v16);CR();
|
||||||
TerCR();TerCR();
|
|
||||||
v8=127; v8s=127; TerHex8(v8); TerDec8(v8); TerDec8(v8s); TerCR();
|
for(;;);
|
||||||
v8=129; v8s=129; TerHex8(v8); TerDec8(v8); TerDec8(v8s); TerCR();
|
}
|
||||||
v8=255; v8s=255; TerHex8(v8); TerDec8(v8); TerDec8(v8s); TerCR();
|
/*
|
||||||
|
Size is 1014 bytes on my PC -0s Compare witz TestSerial
|
||||||
var=1025;vars=1025;
|
What you should see, size is 1032 bites on my PC -0s
|
||||||
TerHex16(var); //6ms
|
Test TerSer
|
||||||
TerDec9999(var);
|
00010011
|
||||||
TerDec16(var);
|
03E8
|
||||||
TerDec16(vars);
|
0
|
||||||
TerCR();
|
+5
|
||||||
|
+23124
|
||||||
var=2049;vars=2049;
|
-200
|
||||||
TerHex16(var); //6ms
|
200
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
TerCR();
|
|
||||||
|
|
||||||
var=4097;vars=4097;
|
|
||||||
TerHex16(var); //6ms
|
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
TerCR();
|
|
||||||
|
|
||||||
var=8193;vars=8193;
|
|
||||||
TerHex16(var); //6ms
|
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
TerCR();
|
|
||||||
|
|
||||||
var=16385;vars=16385;
|
|
||||||
TerHex16(var); //6ms
|
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
TerCR();
|
|
||||||
|
|
||||||
var=32767;vars=32767;
|
|
||||||
TerHex16(var); //6ms
|
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
TerCR();
|
|
||||||
|
|
||||||
var=32769;vars=32769;
|
|
||||||
TerHex16(var); //6ms
|
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
|
|
||||||
TerCR();
|
|
||||||
var=65535;vars=65535;
|
|
||||||
TerHex16(var); //6ms
|
|
||||||
TerDec9999(var);
|
|
||||||
TerDec16(var);
|
|
||||||
TerDec16(vars);
|
|
||||||
TerCR();
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
v8=TerGet();
|
|
||||||
TerCar(v8);
|
|
||||||
Echo();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
Test TerSer.inc
|
|
||||||
7F 127 +127
|
|
||||||
81 129 -127
|
|
||||||
FF 255 -001
|
|
||||||
0401 1025 01025 +01025
|
|
||||||
0801 2049 02049 +02049
|
|
||||||
1001 4097 04097 +04097
|
|
||||||
2001 8193 08193 +08193
|
|
||||||
4001 over 16385 +16385
|
|
||||||
7FFF over 32767 +32767
|
|
||||||
8001 over 32769 +32767
|
|
||||||
FFFF over 65535 +00001
|
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
#######################################
|
||||||
|
# Syntax Coloring Map
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Datatypes (KEYWORD1)
|
||||||
|
#######################################
|
||||||
|
TerSer KEYWORD1
|
||||||
|
moz KEYWORD1
|
||||||
|
uni KEYWORD1
|
||||||
|
diz KEYWORD1
|
||||||
|
cen KEYWORD1
|
||||||
|
mil KEYWORD1
|
||||||
|
dim KEYWORD1
|
||||||
|
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Methods and Functions (KEYWORD2)
|
||||||
|
#######################################
|
||||||
|
SetupTerSer KEYWORD2
|
||||||
|
Bin8 KEYWORD2
|
||||||
|
Bin16 KEYWORD2
|
||||||
|
BinDec8 KEYWORD2
|
||||||
|
BinDec16 KEYWORD2
|
||||||
|
Dec8u KEYWORD2
|
||||||
|
Dec8s KEYWORD2
|
||||||
|
Dec16u KEYWORD2
|
||||||
|
Dec16s KEYWORD2
|
||||||
|
Hex8 KEYWORD2
|
||||||
|
Hex16 KEYWORD2
|
||||||
|
Hex32 KEYWORD2
|
||||||
|
Get KEYWORD2
|
||||||
|
Car KEYWORD2
|
||||||
|
CR KEYWORD2
|
||||||
|
Text KEYWORD2
|
||||||
|
Textln KEYWORD2
|
||||||
|
TtBin8 KEYWORD2
|
||||||
|
ConvNibble KEYWORD2
|
||||||
|
Af3Dig KEYWORD2
|
||||||
|
Af5Dig KEYWORD2
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
name=Didel TerminalSerial Library
|
||||||
|
version=1.0.0
|
||||||
|
author=Didel <info@didel.com>
|
||||||
|
maintainer=Boxtec <info@boxtec.ch>
|
||||||
|
sentence=Tiny Footprint serial drop-in replacement Library.
|
||||||
|
paragraph=A replacement Library for the Arduino Serial Library with a tiny footprint and less execution time. Features special methods for tabular data output over serial.
|
||||||
|
category=Communication
|
||||||
|
url=https://git.boxtec.ch/didel/TerSer
|
||||||
|
architectures=*
|
@ -0,0 +1,275 @@
|
|||||||
|
// TerSer.h 4 modes 190318
|
||||||
|
// 280 lines 7775 car
|
||||||
|
//add in main program #include "TerSer.h" SetupTerSer();
|
||||||
|
|
||||||
|
void SetupTerSer() {
|
||||||
|
UBRR0= 103; // 9600
|
||||||
|
UCSR0B=0x18; // -- -- -- rxe txe -- -- --
|
||||||
|
UCSR0C=0x06; // set mode: 8 data bits, no parity, 1 stop bit
|
||||||
|
}
|
||||||
|
|
||||||
|
byte moz=0; // Default value
|
||||||
|
#define Normal moz=0
|
||||||
|
#define Spaces moz=1
|
||||||
|
#define Zeros moz=2
|
||||||
|
#define Compact moz=3
|
||||||
|
|
||||||
|
byte Get() { // read bloquant
|
||||||
|
while (!(UCSR0A&0x80)); // wait
|
||||||
|
return UDR0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Car( byte dd) { // write bloquant
|
||||||
|
while(!(UCSR0A&0x20));// wait
|
||||||
|
UDR0=dd; // OK, send it now!
|
||||||
|
}
|
||||||
|
|
||||||
|
void CR() {
|
||||||
|
Car(13);Car(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Text(const char str[]) {
|
||||||
|
for (byte i=0; i< strlen(str); i++) { Car(str[i]); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void Textln(const char str[]) {
|
||||||
|
for (byte i=0; i< strlen(str); i++) { Car(str[i]); }
|
||||||
|
Car(13);Car(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TtBin8 (byte bb) { // auxiliary function
|
||||||
|
for (byte i=0;i<8;i++) {
|
||||||
|
if (bb&0x80) Car('1');
|
||||||
|
else Car('0');
|
||||||
|
bb <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Bin8 (byte bb) {
|
||||||
|
TtBin8 (bb); Car(' ');
|
||||||
|
}
|
||||||
|
void Bin16 (uint16_t bb) {
|
||||||
|
TtBin8 (bb>>8); Car('.');
|
||||||
|
TtBin8 (bb&0xFF);
|
||||||
|
Car(' ');
|
||||||
|
}
|
||||||
|
char ConvNibble (byte nn) { // converti 4 bit hexa en Ascii
|
||||||
|
byte cc;
|
||||||
|
if (nn<10) {cc = nn + '0';}
|
||||||
|
else {cc = nn-10 + 'A';}
|
||||||
|
return cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hex8 (byte hh) {
|
||||||
|
byte cc;
|
||||||
|
cc = ConvNibble (hh >> 4); Car(cc);
|
||||||
|
cc = ConvNibble (hh & 0x0F) ; Car(cc);
|
||||||
|
Car(' '); // space
|
||||||
|
}
|
||||||
|
void Hex16 (uint16_t hh) {
|
||||||
|
volatile uint8_t cc;
|
||||||
|
cc = ConvNibble (hh >> 12) ; Car(cc);
|
||||||
|
cc = ConvNibble ((hh >> 8)&0x0F) ; Car(cc);
|
||||||
|
cc=hh&0xFF; Hex8 (cc);
|
||||||
|
Car(' ');
|
||||||
|
}
|
||||||
|
void Hex32 (uint32_t hh) {
|
||||||
|
volatile uint8_t cc;
|
||||||
|
cc = ConvNibble (hh >> 28) ; Car(cc);
|
||||||
|
cc = ConvNibble ((hh >> 24)&0x0F) ; Car(cc);
|
||||||
|
cc = ConvNibble ((hh >> 20)&0x0F) ; Car(cc);
|
||||||
|
cc = ConvNibble ((hh >> 16)&0x0F) ; Car(cc);
|
||||||
|
cc=hh&0xFFFF; Hex16 (cc);
|
||||||
|
Car(' ');
|
||||||
|
}
|
||||||
|
// -- new functions with 4 modes
|
||||||
|
|
||||||
|
volatile uint8_t uni,diz,cen,mil,dim;
|
||||||
|
volatile uint8_t tyn; // type number
|
||||||
|
volatile uint8_t sig;
|
||||||
|
|
||||||
|
void Af5() {Car(dim+'0'); Car(mil+'0'); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' ');}
|
||||||
|
|
||||||
|
void BinDec8 (uint8_t bb) {
|
||||||
|
uni=0;diz=0;cen=0;
|
||||||
|
tyn=0; if (bb==0) return;
|
||||||
|
uni=bb%10; bb=bb/10; if (bb==0){tyn=1;return;}
|
||||||
|
diz=bb%10; bb=bb/10; if (bb==0){tyn=2;return;}
|
||||||
|
cen=bb; tyn=3;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Af3Dig() {
|
||||||
|
switch (moz) {
|
||||||
|
case 0: // Normal signe devant le nombre
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car(' '); Car(' ');Car(' ');Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(' ');Car(' '); Car(sig); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(' '); Car(sig); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break; // case moz 0
|
||||||
|
case 1: // Spaces
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car(' '); Car(' ');Car(' ');Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(sig);Car(' '); Car(' '); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(sig); Car(' '); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break; // case moz 1
|
||||||
|
case 2: // Zeros
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car(' '); Car('0');Car('0');Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(sig);Car('0'); Car('0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(sig); Car('0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break; // case moz 2
|
||||||
|
case 3: // Compact
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(sig); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(sig); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break; // case moz 3
|
||||||
|
} // end switch moz
|
||||||
|
}
|
||||||
|
|
||||||
|
#define Dec8(v) \
|
||||||
|
do { typeof(v) _v = -1; \
|
||||||
|
if (_v < 0) { Dec8s(v); } \
|
||||||
|
else { Dec8u(v); } \
|
||||||
|
} while(0);
|
||||||
|
|
||||||
|
void Dec8u (uint8_t hh) {
|
||||||
|
sig=' ';
|
||||||
|
BinDec8 (hh); Af3Dig();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Dec8s (int8_t hh) {
|
||||||
|
if (hh<0) { // négatif
|
||||||
|
sig='-'; hh = -hh;
|
||||||
|
} else {
|
||||||
|
sig='+';
|
||||||
|
}
|
||||||
|
BinDec8 (hh); Af3Dig();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------
|
||||||
|
void BinDec16 (uint32_t bb) {
|
||||||
|
uni=0;diz=0;cen=0;mil=0;dim=0;
|
||||||
|
tyn=0; if (bb==0) return;
|
||||||
|
uni=bb%10; bb=bb/10; if (bb==0){tyn=1;return;}
|
||||||
|
diz=bb%10; bb=bb/10; if (bb==0){tyn=2;return;}
|
||||||
|
cen=bb%10; bb=bb/10; if (bb==0){tyn=3;return;}
|
||||||
|
mil=bb%10; bb=bb/10; if (bb==0){tyn=4;return;}
|
||||||
|
dim=bb; tyn=5;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Af5Dig() {
|
||||||
|
switch (moz) {
|
||||||
|
case 0: // Normal signe devant le nombre
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car(' '); Car(' '); Car(' ');Car(' ');Car(' ');Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(' '); Car(' '); Car(' ');Car(' ');Car(sig);Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(' '); Car(' '); Car(' ');Car(sig);Car(diz+'0');Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(' '); Car(' '); Car(sig);Car(cen+'0');Car(diz+'0');Car(uni+'0'); Car(' '); break;
|
||||||
|
case 4:
|
||||||
|
Car(' '); Car(sig); Car(mil+'0');Car(cen+'0');Car(diz+'0');Car(uni+'0'); Car(' '); break;
|
||||||
|
case 5:
|
||||||
|
Car(sig); Car(dim+'0'); Car(mil+'0');Car(cen+'0');Car(diz+'0');Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break;
|
||||||
|
case 1: // Spaces
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car(' '); Car(' ');Car(' ');Car(' ');Car(' ');Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(sig);Car(' '); Car(' ');Car(' ');Car(' '); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(sig); Car(' '); Car(' ');Car(' ');Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car(' '); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 4:
|
||||||
|
Car(sig); Car(' ');Car(mil+'0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 5:
|
||||||
|
Car(sig); Car(dim+'0');Car(mil+'0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break; // case 1
|
||||||
|
case 2: // Zeros
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car(' '); Car('0');Car('0');Car('0');Car('0');Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(sig); Car('0');Car('0');Car('0'); Car('0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(sig); Car('0');Car('0');Car('0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car('0');Car('0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 4:
|
||||||
|
Car(sig); Car('0');Car(mil+'0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 5:
|
||||||
|
Car(sig); Car(dim+'0');Car(mil+'0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break;
|
||||||
|
case 3: // Compact
|
||||||
|
switch (tyn) {
|
||||||
|
case 0:
|
||||||
|
Car('0'); Car(' '); break;
|
||||||
|
case 1:
|
||||||
|
Car(sig); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 2:
|
||||||
|
Car(sig); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 3:
|
||||||
|
Car(sig); Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 4:
|
||||||
|
Car(sig); Car(mil+'0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
case 5:
|
||||||
|
Car(sig); Car(dim+'0');Car(mil+'0');Car(cen+'0'); Car(diz+'0'); Car(uni+'0'); Car(' '); break;
|
||||||
|
} // end switch tyn
|
||||||
|
break;
|
||||||
|
} // end switch moz
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define Dec16(v) \
|
||||||
|
do { typeof(v) _v = -1; \
|
||||||
|
if (_v < 0) { Dec16s(v); } \
|
||||||
|
else { Dec16u(v); } \
|
||||||
|
} while(0);
|
||||||
|
|
||||||
|
void Dec16u (uint16_t hh) {
|
||||||
|
sig=' ';
|
||||||
|
BinDec16(hh); Af5Dig();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Dec16s (int16_t hh) {
|
||||||
|
if (hh<0) { // négatif
|
||||||
|
sig='-'; hh = -hh;
|
||||||
|
} else {
|
||||||
|
sig='+';
|
||||||
|
}
|
||||||
|
BinDec16(hh); Af5Dig();
|
||||||
|
}
|
||||||
|
// end code
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue