|
Проблема с преобразованиями |
|
|
|
Nov 22 2011, 05:22
|
Местный
  
Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474

|
Здравствуйте. Реализую клавиатуру числовую 0-9. Для окончания ввода использую клавишу принятия ввода. Работаю с 1,2,3,4,5 значными цифрами, если введено чило, содержащее более 5 цифр, то ошибка. Как преобразовать из двоично-десятичной формы в двоичную знаю. Но вот как реализовать сохранение группы нажатых цифр в одну переменную 16-битную - вот проблема. Например ввели число 4563, надо чтобы оно было сохранено в 16-битной переменнойи и цифры были сохранены в нужной мне последовательности после нажатия клавиши "accept". Помогите, пожалуйста, в данной проблеме?
|
|
|
|
|
 |
Ответов
|
Nov 22 2011, 07:16
|
Местный
  
Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474

|
Во первых я замарачиваться не стал сделал клаву просто от ножки МК через резистор на конпку. Во вторых цифре от 0-9 соответствует 4 разрядный двоичный код, поэтому 5 цифр числа просто в 16-битную пер. не уместится, если исп. ее для хран. нажатой цифры. И как я уже выше написал: Я не пойму только одного момента: как мне сохранить нажатый код цифры, ячтобы в дальнейшем ее расчитать и получить нужное мне число. Вот пример на 6 цифрах: unsigned char counter=0; // для подсчета кол-ва введенных цифр unsigned key[6]; // массив для хранения цифры для опред. кнопки unsigned int addr=0;
if (!ZERO) { writed(10); // 0 on LCD key[0]=0; counter++; } if (!ONE) { if (pp == 0) { writed(1); // 1 on LCD key[1]=1; counter++; } pp=10000; } if (!TWO) { if (pp == 0) { writed(2); // 2 on LCD key[2]=2; counter++; } pp=10000; } if (!THREE) { if (pp == 0) { writed(3); // 3 on LCD key[3]=3; counter++; } pp=10000; } if (!FOUR) { if (pp == 0) { writed(4); // 4 on LCD key[4]=4; counter++; } pp=10000; } if (!FIVE) { if (pp == 0) { writed(5); // 5 on LCD key[5]=5; counter++; } pp=10000; }
if (!ACCEPT) // accept input data(end of inputting data) { if (pp == 0) { if (counter == 1) // 1 digit { // надо сохр введеные цифры в пер. addr, чтобы получить 1 значное число counter=0; //..
} if (counter == 2) // 2 digits { // надо сохр введеные цифры в пер. addr, чтобы получить 2 значное число counter=0; //..
} if (counter == 3) // 3 digits { // надо сохр введеные цифры в пер. addr, чтобы получить 3 значное число counter=0; //..
} if (counter == 4) // 4 digits { // надо сохр введеные цифры в пер. addr, чтобы получить 4 значное число counter=0; //..
} if (counter == 5) // 5 digits { // надо сохр введеные цифры в пер. addr, чтобы получить 5 значное число counter=0; //.. } if (counter > 5) { counter=0; // отображаю ошибку } Вот как мне сохр. в пер. addr я не знаю. Я знаю что, чтобы получить например число 453 из введенных цифр надо просто: 4*100+5*10+3=453 в 16 битной переменной. Но я не знаю как мне их сохранять при нажатии клавиши, чтобы не потерять последовательность. Помогите, пожалуйста с кодом? Дописать его, чтобы реализовать задуманное.
|
|
|
|
Сообщений в этой теме
max_mart Проблема с преобразованиями Nov 22 2011, 05:22 Navovvol Цитата(max_mart @ Nov 22 2011, 08:22) Здр... Nov 22 2011, 06:21 stells Цитата(max_mart @ Nov 22 2011, 09:22) Пом... Nov 22 2011, 06:27 haker_fox QUOTE (max_mart @ Nov 22 2011, 13:22) Здр... Nov 22 2011, 06:39 Navovvol Можно сделать еще интересней. Допустим диапазон от... Nov 22 2011, 06:40 haker_fox QUOTE (Navovvol @ Nov 22 2011, 14:40) Мож... Nov 22 2011, 06:49 stells так все красиво расписывают: буфер , ОЗУ...
вопро... Nov 22 2011, 06:49 haker_fox QUOTE (stells @ Nov 22 2011, 14:49) так в... Nov 22 2011, 06:57  stells Цитата(haker_fox @ Nov 22 2011, 10:57) Ав... Nov 22 2011, 06:58   haker_fox QUOTE (stells @ Nov 22 2011, 14:58) а по-... Nov 22 2011, 07:05 stells Цитата(max_mart @ Nov 22 2011, 11:16) 5 ц... Nov 22 2011, 07:20 max_mart мне нужно число 0-65535. Если мне надо будит больш... Nov 22 2011, 07:34 Navovvol к сожалению я ни черта не понимаю в С/С++ Nov 22 2011, 08:21 hd44780 Автор, как я понял, хочет получить, допустим, числ... Nov 22 2011, 09:48 haker_fox QUOTE (hd44780 @ Nov 22 2011, 17:48) Буфе... Nov 22 2011, 09:57 max_mart нет не матрица. Всего 9 клавиш.
Я не могу сообраз... Nov 22 2011, 10:10 ut1wpr Цитата(max_mart @ Nov 22 2011, 14:10) нет... Nov 22 2011, 10:49 max_mart Не понял:
зачем умножать на 10 и для чего прибавля... Nov 22 2011, 11:08 hd44780 Цитата(max_mart @ Nov 22 2011, 14:08) зач... Nov 22 2011, 11:39 max_mart ладно подумаю на накопителем. цифр всего 5, а мак... Nov 22 2011, 11:54 ut1wpr Цитата(max_mart @ Nov 22 2011, 15:54) лад... Nov 22 2011, 12:45  neiver Цитата(ut1wpr @ Nov 22 2011, 16:45) Не зн... Nov 22 2011, 14:20   ut1wpr Цитата(neiver @ Nov 22 2011, 18:20) Здесь... Nov 22 2011, 15:11 max_mart [удалено] Nov 22 2011, 14:05 max_mart int GetCodeButton()
{
if (!ZERO)
return 0;
... Nov 22 2011, 15:36 hd44780 Цитата(max_mart @ Nov 22 2011, 18:36) Хот... Nov 22 2011, 17:51 max_mart Хотелось бы узнать какое значение получает функция... Nov 22 2011, 18:31 hd44780 Цитата(max_mart @ Nov 22 2011, 21:31) Как... Nov 22 2011, 18:34 max_mart [quote name='max_mart' date='Nov 22 20... Nov 22 2011, 19:08 haker_fox QUOTE (max_mart @ Nov 22 2011, 15:16) Во ... Nov 23 2011, 04:40 max_mart Конечно!!! Внутренние подтягивающие ре... Nov 23 2011, 05:21 hd44780 hacker_fox, там и резистор не нужен. Нога МК - кно... Nov 23 2011, 05:23 haker_fox QUOTE (hd44780 @ Nov 23 2011, 13:23) hack... Nov 24 2011, 08:57 max_mart С учетом всего выше сказанного реализую это все. н... Nov 23 2011, 09:06 hd44780 Ладно, хотите массив, делайте массив. Тоже верно.
... Nov 23 2011, 13:05 max_mart ))) Извиняюсь!!! Писал в торопях!... Nov 23 2011, 18:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|