proj
This commit is contained in:
parent
f710e88793
commit
e3624f8853
1 changed files with 33 additions and 10 deletions
|
|
@ -161,20 +161,31 @@ void lcd_print_str(const char *str) {
|
|||
lcd_data(*str++);
|
||||
}
|
||||
|
||||
void lcd_print_num(unsigned int num, unsigned int base) {
|
||||
void lcd_print_num(int num, unsigned int base) {
|
||||
char buffer[17];
|
||||
int i = 0;
|
||||
unsigned int unum;
|
||||
|
||||
if (num == 0) {
|
||||
if (base == MODE_DEC) {
|
||||
if (num < 0) {
|
||||
lcd_data('-');
|
||||
num = -num;
|
||||
}
|
||||
}
|
||||
|
||||
unum = (unsigned int)num;
|
||||
|
||||
if (unum == 0) {
|
||||
lcd_data('0');
|
||||
return;
|
||||
}
|
||||
|
||||
while (num > 0 && i < 16) {
|
||||
unsigned int d = num % base;
|
||||
while (unum > 0 && i < 16) {
|
||||
unsigned int d = unum % base;
|
||||
buffer[i++] = (d < 10) ? ('0' + d) : ('A' + d - 10);
|
||||
num /= base;
|
||||
unum /= base;
|
||||
}
|
||||
|
||||
while (i > 0)
|
||||
lcd_data(buffer[--i]);
|
||||
}
|
||||
|
|
@ -294,24 +305,36 @@ unsigned int is_valid_digit(unsigned int key) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* ===== Arithmetic ===== */
|
||||
unsigned int base_arith(unsigned int a, unsigned int b,
|
||||
unsigned int op, unsigned int base) {
|
||||
unsigned int r;
|
||||
/* ===== Arithmetic per base (optimized) ===== */
|
||||
int base_arith(int a, int b, unsigned int op, unsigned int base) {
|
||||
int r = 0;
|
||||
|
||||
switch (op) {
|
||||
case OP_ADD:
|
||||
r = a + b;
|
||||
break;
|
||||
|
||||
case OP_SUB:
|
||||
r = (a >= b) ? (a - b) : 0;
|
||||
r = a - b;
|
||||
break;
|
||||
|
||||
case OP_MUL:
|
||||
r = a * b;
|
||||
break;
|
||||
|
||||
default:
|
||||
r = a;
|
||||
break;
|
||||
}
|
||||
|
||||
// For non-decimal modes, keep everything positive and base-limited
|
||||
if (base != MODE_DEC) {
|
||||
if (r < 0)
|
||||
r = ((r % base) + base) % base;
|
||||
else
|
||||
r = r % (base * base * base * base * base); // safe wraparound for multi-digit bases
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue