Как разложить по разрядам, програмно (Си).
Как разложить по разрядам, програмно (Си).
Проще говоря,
Получаю с АЦП число.
Мне нада его вывести на LCD.
Таблица кодов есть, как проще (быстрее)
Разложить на сотые, десятые... чтоб подставить под таблику кодов и вывести на дисплей.
Какбы форами и ифами, довольно долго.
Нет ли какогонибыдь оператора или функции(пример) похожая на результат маски для битов?
Спасибо.
Получаю с АЦП число.
Мне нада его вывести на LCD.
Таблица кодов есть, как проще (быстрее)
Разложить на сотые, десятые... чтоб подставить под таблику кодов и вывести на дисплей.
Какбы форами и ифами, довольно долго.
Нет ли какогонибыдь оператора или функции(пример) похожая на результат маски для битов?
Спасибо.
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Re: Как разложить по разрядам, програмно (Си).
MetEl писал(а):Мне нада его вывести на LCD.
Разложить на сотые, десятые... чтоб подставить под таблику кодов и вывести на дисплей.
Посмотри Вывод на LCD
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Ты когданибудь спишь вооще?!
Спасибо ...
Я вспомнил getchar и putchar.
Но LCD от nokia 3410, и таблица кодов самодельная. И "драйвер" тоже.
У меня есть число (пусть - байт) какбы мне его так разложить на сотые, десятые и единицы, чтоб подготовить к последовательному (по разрядному) подставлению с моей таблицей символов.
т.е:
если это число 5 = массив 10
если это число 23 = ???
Как мне "десятый" разряд убрать? (понятно, что делишь пока флаг отрицательный не вылезет, но может чтото есть по проще)
Спасибо ...
Я вспомнил getchar и putchar.
Но LCD от nokia 3410, и таблица кодов самодельная. И "драйвер" тоже.
У меня есть число (пусть - байт) какбы мне его так разложить на сотые, десятые и единицы, чтоб подготовить к последовательному (по разрядному) подставлению с моей таблицей символов.
т.е:
если это число 5 = массив 10
если это число 23 = ???
Как мне "десятый" разряд убрать? (понятно, что делишь пока флаг отрицательный не вылезет, но может чтото есть по проще)
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
MetEl писал(а):Ты когданибудь спишь вооще?!
Вот заснул
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
-
L29Ah
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Пн июл 23, 2007 03:10:34
- Откуда: СПб
- Контактная информация:
MetEl писал(а):Ты когданибудь спишь вооще?!
Спасибо ...
Я вспомнил getchar и putchar.
Но LCD от nokia 3410, и таблица кодов самодельная. И "драйвер" тоже.
У меня есть число (пусть - байт) какбы мне его так разложить на сотые, десятые и единицы, чтоб подготовить к последовательному (по разрядному) подставлению с моей таблицей символов.
т.е:
если это число 5 = массив 10
если это число 23 = ???
Как мне "десятый" разряд убрать? (понятно, что делишь пока флаг отрицательный не вылезет, но может чтото есть по проще)
Есть в С такая мегаоперация - называется "%". Вместе с "/" получается аццкий тандем
Ꙑ!
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
Как usindger char на два байта разломить! (типа int)
Вот новый вопрос?
это сложный вопрос если чар это уже байт... а инт это два байта...
оч просто... делаете указатель на байт... и присваиваете нач адрес инт... при увеличении указателя на 1 получаете второй байт...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
MetEl писал(а):Типа 49%10=9, 23%5=3
Так пол дня искал...
Как usindger char на два байта разломить! (типа int)
Вот новый вопрос?
старший байт int будет 0 а младший будет твой исходный char
Посмотри наиболе часто используемые типы данных
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
чето я может попутал..
но unsigned char это же два байта (65535).
А int это один вайт (255).
Может чето поменялось, но оно так работает сайчас... и не ругается?
эээ...ммм... никогда такого не было... читайте книги тогда... что-то у вас бардак какой-то в голове...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
Код: Выделить всё
int dataInt;
char *ptrChar;
char little, big;
void main()
{
dataInt = 0xffcc;
ptrChar = &dataInt;
little = *ptrChar;
big = *++ptrChar;
}вот код... в Борланд С++ необходимо выполнять приведение типов... а винавр и так проглотил... глупый...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Да десительно двухбайтная unsigned short (чё на пнях int не применяют теперь...).
http://www.citforum.ru/programming/c/h12.shtml
Вот ... гуляю по ссылка с курса...
http://www.citforum.ru/programming/c/h12.shtml
Вот ... гуляю по ссылка с курса...
Как вот это на Си написать?
И вообще правильно ли?
unsigned int u;
u = ADCW; // после опросf АЦП
if(u>=10000){ a=u%10000; a1 = (u-a)/10000; };
if(u>=1000){b=a%1000; b1=(a-b)/1000; };
if(u>=100){c=b%100; c1=(b-c)/100; };
if(u>=10){d=c%10; d1=(c-d)/10; };
if(u<10){e=u;};
e=d;
Результат a1,b1,c1,d1,e (10 000-e, 1 000-e, 100-e, 10-e и единицы соответственно ), если я ничего не перепутал.
И вообще правильно ли?
unsigned int u;
u = ADCW; // после опросf АЦП
if(u>=10000){ a=u%10000; a1 = (u-a)/10000; };
if(u>=1000){b=a%1000; b1=(a-b)/1000; };
if(u>=100){c=b%100; c1=(b-c)/100; };
if(u>=10){d=c%10; d1=(c-d)/10; };
if(u<10){e=u;};
e=d;
Результат a1,b1,c1,d1,e (10 000-e, 1 000-e, 100-e, 10-e и единицы соответственно ), если я ничего не перепутал.
Товарисчи рубайте быстрее!
Во вяких курсах не затронута алгоритмическая и синтаксическая часть!
Не проработана примерами и не закреплена практикой!
Простейший пример по написанию программы калькулятора или термометра с часами!
Ведь что читать приходится!
1.3.9. Поразрядные операции
http://www.citforum.ru/programming/c/h13.shtml
Вы находите эту таблицу(внизу перед 1.3.10) правильной?
1.2.2. Целый тип данных
http://www.citforum.ru/programming/c/h12.shtml
Таблица 6
Таблица 72. Связь между частотами SCK и генератора
http://www.gaw.ru/html.cgi/txt/doc/micr ... 8/15_1.htm
Разряд 0 - SPI2X: Бит удвоения скорости SPI - а по таблице деление!
Как вас понять ТА!
Во вяких курсах не затронута алгоритмическая и синтаксическая часть!
Не проработана примерами и не закреплена практикой!
Простейший пример по написанию программы калькулятора или термометра с часами!
Ведь что читать приходится!
1.3.9. Поразрядные операции
http://www.citforum.ru/programming/c/h13.shtml
Вы находите эту таблицу(внизу перед 1.3.10) правильной?
1.2.2. Целый тип данных
http://www.citforum.ru/programming/c/h12.shtml
Таблица 6
Таблица 72. Связь между частотами SCK и генератора
http://www.gaw.ru/html.cgi/txt/doc/micr ... 8/15_1.htm
Разряд 0 - SPI2X: Бит удвоения скорости SPI - а по таблице деление!
Как вас понять ТА!
- alex2103
- Прорезались зубы
- Сообщения: 219
- Зарегистрирован: Вт сен 18, 2007 16:41:16
- Откуда: Украина, г. Запорожье
- Контактная информация:
Вот так быстрее будет чем с делением:
Код: Выделить всё
void perevod (int a)
{
unsigned char Num1, Num2, Num3;
Num1=Num2=0;
while (a >= 100)
{
a -= 100;
Num1++;
}
while (a >= 10)
{
a -= 10;
Num2++;
}
Num3 = a;
digits[0] = Num1; //сотни
digits[1] = Num2; //десятки
digits[2] = Num3; //единицы
}- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
ну да быстрее... единственно что внутри эти переменные NUM1 NUM2 NUM3 не очень нужны... можно просто глобальную digits[3] увеличивать... к примеру ++digits[0]; и код сократится... вот вам и оптимизация... если digits не глобальная тогда ссылками орудуем...
Код: Выделить всё
void perevod (int a)
{
while (a >= 100)
{
a -= 100;
++digits[0];
}
while (a >= 10)
{
a -= 10;
++digits[1];
}
digits[2] = a;
}если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
MetEl писал(а):Таблица 72. Связь между частотами SCK и генератора
http://www.gaw.ru/html.cgi/txt/doc/micr ... 8/15_1.htm
Разряд 0 - SPI2X: Бит удвоения скорости SPI
а по таблице деление!
А я вижу удвоение частоты когда он "1".
MetEl писал(а):Не проработана примерами ...
1.3.9. Поразрядные операции
http://www.citforum.ru/programming/c/h13.shtml
Вы находите эту таблицу(внизу перед 1.3.10) правильной?
Неужели вам моих примеров было не достаточно ?
Код: Выделить всё
00010010 & 01001111 // "И" - только 1 и 1 дают 1
// англ. название AND
00000010 // это результат
// только биты_2 в обоих числах были единицы И для других операций тоже примеры даны.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
из курсов
""
1) Строка где переменная стоит слева от = но через знак &
PORTB & = 0x23;
на Си означает - прочитать содержимое переменной PORTB, затем выполнить "поразрядное (побитное) логическое И" между прочитанным значением и числом 0x23 и поместить (записать, присвоить) результат в переменную PORTB
""
А может оно так выглядеть?
Переместить содержание регистра PORTB в стек (допустим), переместить число (с права) в следующию "строку"(регистр стека) стека, провести операцию логическкого И (АЛУ уходит в себя...) и выдаёт(выставляет) результат в регистр PORTB.
Ну фиг его знает, зачем вообще тогда нада инт, чары какая нафиг разница!
Умня МС виснет!
-> alex2103
Пасиб! Но всёравно проц виснет и молчит!
""
1) Строка где переменная стоит слева от = но через знак &
PORTB & = 0x23;
на Си означает - прочитать содержимое переменной PORTB, затем выполнить "поразрядное (побитное) логическое И" между прочитанным значением и числом 0x23 и поместить (записать, присвоить) результат в переменную PORTB
""
А может оно так выглядеть?
Переместить содержание регистра PORTB в стек (допустим), переместить число (с права) в следующию "строку"(регистр стека) стека, провести операцию логическкого И (АЛУ уходит в себя...) и выдаёт(выставляет) результат в регистр PORTB.
Ну фиг его знает, зачем вообще тогда нада инт, чары какая нафиг разница!
Умня МС виснет!
-> alex2103
Пасиб! Но всёравно проц виснет и молчит!
Последний раз редактировалось MetEl Вт ноя 20, 2007 22:06:43, всего редактировалось 1 раз.