Приветствую Вас, Гость! Регистрация RSS

Вторник, 22.08.2017
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 4 из 9«12345689»
Форум » Форум mega-avr.ucoz.ru » Вопросы начинающих » первые вопросы (кто собрал программатор, вставил мк- а он не работает)
первые вопросы
DenisДата: Суббота, 08.01.2011, 14:22 | Сообщение # 61
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
skiff,
Привет!
Хочу вывести число с ds18b20 (с минусом), а также хочу выводить с ацп(четырехзначные, а может и пятизначные)
 
ilvzДата: Суббота, 08.01.2011, 18:37 | Сообщение # 62
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Ладно. Самый простой вариант:
Code

# include <stdlib.h> // библиотека с функцией преобразования целого в строку
/*
void itoa(int n, char *str)    converts the integer n to characters in string str.

  без описания функций. только суть.
  а - целое со знаком
   str[7] - строка вывода на дисплей
*/
     itoa(a,str)// вызов функции преобразования целого в строку
// теперь в str находится символьное представление числа из "a" со знаком   

Можно печатать. В цикле с от str[0] до "0" в str[n]
Годится только для АЦП. Для 18в20 таким образом можно вывести только целую часть. Дробную нужно преобразовывать.
С самостоятельным преобразованием числа в строку рекомендую поразбираться. Хорошее упражнение. Ведь мы тут учимся программировать!? Готовые решения отупляют smile


Сообщение отредактировал ilvz - Суббота, 08.01.2011, 18:38
 
АвторДата: Суббота, 08.01.2011, 22:37 | Сообщение # 63
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Денис, в статье по ds18b20 ведь же описана программа вывода числа из датчика на LCD и при том, что в случае отрицательного значения!!! По выводу с АЦП четырех-пятизначных чисел на LCD я пока не пробовал! В ближайшем времени буду пробовать!!!


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
DenisДата: Воскресенье, 09.01.2011, 16:13 | Сообщение # 64
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
Параметры хочу выводить при помощи
Code
display_putchar( i/10+0x30,0,0,0 );     
display_putchar( i%10+0x30,1,0,0 );

В библиотеки stdio.h слишком много всего лишнего и весит она как я!!!))))
Поэтому мне и надо разобраться с выводом четырех-пятизначных чисел!


Сообщение отредактировал Denis - Воскресенье, 09.01.2011, 16:14
 
ilvzДата: Воскресенье, 09.01.2011, 18:14 | Сообщение # 65
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Я же писал как через % и / вывести хоть лонг.
Ещё раз. 8((
Code

int nunb=-12345;
char i,str[7]={' ',' ',' ',' ',' ',' ',0x00};
   if(numb < 0) //  если numb < 0 то делаем его положительным и выставляем минус перед числом на вывод
      {
        numb = ~numb+1;
        str[0]='-';
       };
i=5;
do
      {
        str[i]=(numb % 10) + '0'; // берём мл. разряд numb и превращаем в соответствующий символ
        numb /=10; // уменьшаем numb на порядок. теперь значение в 10 раз меньше.
//    if(!(numb /=10)) break; // уменьшаем numb на порядок. теперь значение в 10 раз меньше. И если numb==0 выходим.
      }
while(--i);

Дальше выводим строку куда нужно
P.S. Вроде без ошибок. Не проверял. Алгоритм верный.

Добавлено (09.01.2011, 18:11)
---------------------------------------------
Денис мне непонятно почему тебе непонятно. Ведь ти и сам приводишь похожий код.

Добавлено (09.01.2011, 18:14)
---------------------------------------------
Приводить готовые куски считаю дидактически неверным. Нужно пытаться понять самому. Знания полученные самостоятельно самые стойкие =)

Сообщение отредактировал ilvz - Воскресенье, 09.01.2011, 18:09
 
DenisДата: Воскресенье, 09.01.2011, 18:51 | Сообщение # 66
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
то есть получается следущие:
i=12345;
str[0]=i%10; // 5
i=i/10;
str[1]=i%10; // 4
i=i/10;
str[2]=i%10; // 3
i=i/10;
str[3]=i%10; // 2
i=i/10;
str[4]=i%10; // 1

Это правильная мысль?

 
ilvzДата: Воскресенье, 09.01.2011, 19:16 | Сообщение # 67
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Да. Только наоборот smile С 5-й по 1-ю позицию, а в нулевой позиции или пробел или "-"
В 6-ой поз. 0х00 как признак конца строки.
 
DenisДата: Воскресенье, 09.01.2011, 19:46 | Сообщение # 68
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
А как посчитать количество символов в переменной?
мне нужно понять сколько в переменной int i=156654 находится символов, как это сделать?
 
ilvzДата: Воскресенье, 09.01.2011, 20:34 | Сообщение # 69
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
В инт столько не поместится. Только от -32768 до 32767. Так что в инт не более 5 цифр плюс знак.

Добавлено (09.01.2011, 20:32)
---------------------------------------------
Если без знака то 65535

Добавлено (09.01.2011, 20:34)
---------------------------------------------
Изучай Хелп к КодеВижену. Там есть размерность данных. Это обязательно надо знать.

 
DenisДата: Воскресенье, 09.01.2011, 20:45 | Сообщение # 70
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
хорошо поставлю вопрос по другому!
как узнать сколько знаков в переменной типа int, float?
как узнать тип переменной?
 
ilvzДата: Воскресенье, 09.01.2011, 21:05 | Сообщение # 71
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Начну с конца. Тип переменной однозначно только посмотрев в объявлениях. Как правило такой необходимости нет. Ведь объявляешь ты их сам.
А размерность типов есть в описании конкретного компилятора.
У CV:
Type.................... Size (Bits) .........................Range
------------------------------------------------------------------------
bit ........................1 ......................................0 , 1
bool, _Bool ............8 ......................................0 , 1
char ......................8 .....................................-128 to 127
unsigned char ........8 ......................................0 to 255
signed char ............8 ......................................-128 to 127
int .........................16 ....................................-32768 to 32767
short int .................16 ....................................-32768 to 32767
unsigned int ............16 .....................................0 to 65535
signed int ...............16 .....................................-32768 to 32767
long int ..................32 .....................................-2147483648 to 2147483647
unsigned long int ....32 ......................................0 to 4294967295
signed long int ........32 .....................................-2147483648 to 2147483647
float .......................32 .....................................±1.175e-38 to ±3.402e38
double ....................32...................................... ±1.175e-38 to ±3.402e38

Вот срисовал из хелпа smile
В хелпе огромное к-во полезной информации.
Ещё есть в инете книга Лебедева по CVAVR.

Сообщение отредактировал ilvz - Воскресенье, 09.01.2011, 21:09
 
us4ilqДата: Воскресенье, 09.01.2011, 21:46 | Сообщение # 72
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Попробую и я свои 5копеек вставить smile

По поводу sprinf()
Во вложении документ, а внизу довольно понятно про sprinf() написано.

Файл: LCD.pdf(331Kb)
 
DenisДата: Воскресенье, 09.01.2011, 21:50 | Сообщение # 73
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
us4ilq,
Привет! Я хочу это реализовать без использования библиотек, возможно с ассемблером!
 
us4ilqДата: Воскресенье, 09.01.2011, 22:02 | Сообщение # 74
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Ну так этож
хозяин - барин smile
 
ilvzДата: Воскресенье, 09.01.2011, 22:11 | Сообщение # 75
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
А зачем с ассемблером? Врятли получится короче. Потом там только один тип данных - char. Всё остальное надо будет головой и ручками =)
 
DenisДата: Воскресенье, 09.01.2011, 22:30 | Сообщение # 76
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
хорошо! а как тогда выводить тип floar при помощи display_putchar( i/10+0x30,0,0,0 ); ?
 
ilvzДата: Воскресенье, 09.01.2011, 22:44 | Сообщение # 77
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
А что с INT уже всё уже нормально? smile
С флоатом всё несколько сложнее. И дело даже не в выводе. Флоат вычисляется в некотором смысле "примерно". Там много всяких заморочек. Мне кажется надо двигаться постепенно. Если не хватает ИНТ, тогда есть ЛОНГ ИНТ. Разрядностью он кстати превышает ФЛОАТ.
 
DenisДата: Понедельник, 10.01.2011, 12:30 | Сообщение # 78
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
Решился я делать через функцию sprintf(); =)))) и вот что получилось!
Code
char *lcd[30];
int x=20;
sprintf(lcd, "x=%-i" x );
display_puts( lcd,4,0,0 );

что-то не выходит нечего((((
По книге Лебедева смотрел вроде все правильно!
Что может быть не так?
 
ilvzДата: Понедельник, 10.01.2011, 15:27 | Сообщение # 79
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Для начала, зачем звёздочка в объявлении. Ведь объявляется массив из символов, а не массив указателей.
Звёздочку надо убрать. Хотя при ближайшем рассмотрении, даже при ошибочном объявлении должно работать, если sprintf и display_puts воспримут ссылку такого типа.. Ведь LCD просто адрес начала. Только массив получится в 60 байт. И ещё, в sprintf не хватает запятой перед Х. Это просто не должно компилиться, а не только не работать.
Про вывод на дисплей не скажу. Я с этой библиотекой не работал. Ели первых две цифры координаты, то что значит третья?
 
DenisДата: Понедельник, 10.01.2011, 16:13 | Сообщение # 80
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
Привет! Я иногда возмущён своей невнимательностью!!!
Ошибка была в запятой, не хватало запятой перед переменной x

Спасибо!

Третий параметр это инвертирование!

Добавлено (10.01.2011, 16:01)
---------------------------------------------
ilvz,
Извини меня за мою тупость, но как вывести число с плавающей точкой?

Добавлено (10.01.2011, 16:13)
---------------------------------------------
ох...., теперь не могу вывести время при помощи этой функции.
Пойду разбираться с этой функцией!

Сообщение отредактировал Denis - Понедельник, 10.01.2011, 15:57
 
Форум » Форум mega-avr.ucoz.ru » Вопросы начинающих » первые вопросы (кто собрал программатор, вставил мк- а он не работает)
Страница 4 из 9«12345689»
Поиск: