Чт фев 07, 2019 16:39:04
Пт фев 08, 2019 00:34:47
Пт фев 08, 2019 08:56:45
Пт фев 08, 2019 12:52:11
Пт фев 08, 2019 15:03:34
Пт фев 08, 2019 16:58:54
Пт фев 08, 2019 19:02:33
Пт фев 08, 2019 19:20:00
Пт фев 08, 2019 19:28:23
Пт фев 08, 2019 21:17:43
Сб фев 09, 2019 05:37:31
#ifndef BCD_H
#define BCD_H
#include "bcd.h"
#include "main_def_func.h"
//==================
extern char num_str_buf [];
extern char tmp_num_str_buf [];
//==================
//==================
typedef enum
{
VAL_08_BIT = 0,
VAL_16_BIT,
VAL_32_BIT,
} type_val_t;
void val_to_str (u32 value, type_val_t type_val);
u16 str_to_int (void);
u32 str_to_long (void);
//==================
//==================
void clr_tmp_num_str_buf (void);
void clr_num_str_buf (void);
//==================
#endif //BCD_H
//==================
#include "bcd.h"
//==================
//==================
char num_str_buf [11];
char tmp_num_str_buf [11];
//==================
//==================
void clr_num_str_buf (void)
{
char *ptr = num_str_buf;
u08 cnt = 10;
while (cnt)
{
*ptr++ = ' ';
cnt--;
}
*ptr = 0;
}
//==================
//==================
void clr_tmp_num_str_buf (void)
{
char *ptr = tmp_num_str_buf;
u08 cnt = 10;
while (cnt)
{
*ptr++ = ' ';
cnt--;
}
*ptr = 0;
}
//==================
//==================
__flash u32 tab_hex_dec [] =
{
1000000000U,
100000000U,
10000000U,
1000000U,
100000U,
10000U,
1000U,
100U,
10U,
};
//==================
//==================
void val_to_str (u32 value, type_val_t type_val)
{
u32 a;
bool flag = false;
u08 cnt_1;
u08 cnt_2;
u08 displace;
clr_num_str_buf ();
switch (type_val)
{
case VAL_08_BIT:
displace = 7;
cnt_1 = 2;
break;
case VAL_16_BIT:
displace = 5;
cnt_1 = 4;
break;
case VAL_32_BIT:
displace = 0;
cnt_1 = 9;
break;
}
char *ptr = num_str_buf + displace;
u32 __flash *ptr_f = tab_hex_dec + displace;
while (cnt_1)
{
a = *ptr_f;
cnt_2 = 0;
while (value >= a)
{
value -= a;
cnt_2++;
}
if (flag == false)
{
if (cnt_2 == 0)
{
*ptr++ = ' '; // Гашение незначащих нулей.
}
else
{
*ptr++ = (cnt_2 | 0x30);
flag = true;
}
}
else
{
*ptr++ = (cnt_2 | 0x30);
}
ptr_f++;
cnt_1--;
}
*ptr++ = (value | 0x30);
*ptr = 0;
}
//==================
//==================
u16 str_to_int (void)
{
char *ptr_num = tmp_num_str_buf + 5;
u32 __flash *ptr_f = tab_hex_dec + 5;
u16 a;
u08 cnt = 0;
u16 tmp_value = 0;
while (cnt < 4)
{
if ((*ptr_num > 0x30) && (*ptr_num < 0x3A))
{
a = (*ptr_num - 0x30);
while (a)
{
tmp_value += *ptr_f;
a--;
}
}
*ptr_num++;
ptr_f++;
cnt++;
}
return tmp_value += (*ptr_num - 0x30);
}
//==================
//==================
u32 str_to_long (void)
{
char *ptr_num = tmp_num_str_buf;
u32 __flash *ptr_tab_10 = tab_hex_dec;
u32 a;
u08 cnt = 0;
u32 tmp_value = 0;
while (cnt < 9)
{
if ((*ptr_num > 0x30) && (*ptr_num < 0x3A))
{
a = (*ptr_num - 0x30);
while (a)
{
tmp_value += *ptr_tab_10;
a--;
}
}
*ptr_num++;
ptr_tab_10++;
cnt++;
}
return tmp_value += (*ptr_num - 0x30);
}
//==================
Пн фев 11, 2019 13:05:49
avr-gcc, выше есть строка компиляцииКстати, какой компилятор использовался?
10-битный АЦП с соответствующей опорой даст точность 0.2..0.3%, резисторы 0.1% уже не редкость - более чем достаточно для показометра...А бОльшего в подавляющем большинстве случаев и не требуется
Вт фев 12, 2019 16:08:03
Вт фев 12, 2019 18:41:34
Вт фев 12, 2019 21:13:16
Вт фев 12, 2019 23:15:12
Ср фев 13, 2019 03:41:40
Ср фев 13, 2019 04:59:37
Ср фев 13, 2019 06:50:48
Ср фев 13, 2019 07:24:26
вот за одну такую фразу на любительском форуме банил бы навечно. но именно по этой причине я и не модераторНо не годно для массового тиража.