Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Как сохронить данные введёные с на LCD?
Alexej79 Дата: Пн, 12.05.2014, 22:56  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 71
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Привет.
Такая ситуация, ввожу значение с цифровой клавиатуры на LCD  и надо записать это значение для последующей обработки программой.
Что то типа калькулятора. Введённое значение запомнить в переменную потом произвести с ним математическое действие.
Использую Pic18F4550 в паре с  LCD ALpha 4 ряда по 20 символов. Клавиатура последовательно спаянные резисторы с кнопками опрос через  через АЦП.
Буду очень признателен любой помощи.
ЯНДЕКС Дата: 12.05.2014
Andriy76 Дата: Пн, 12.05.2014, 23:19  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 231
Репутация: 10   ±
Замечания:   ±
На сайте с 06.04.2010

Статус: Offline

Если просто кнопками то так . 
 
    If UP = 0 Then
        DelayMS 200
        GoSub BEEP
        C = C + 0.1
        If C > CMAX  Then C = CMAX
    EndIf

    If DOWN = 0 Then
        DelayMS 200
        GoSub BEEP
        C = C - 0.1
        If C < 0 Then C = 0
    EndIf

А для АЦП думаю что будет аналогично .
Alexej79 Дата: Пн, 12.05.2014, 23:35  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 71
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Я попробую уточнить вопрос.
С клавиатуры вывожу число на LCD например 35,4 оно у меня высветилось на экране.
Надо при нажатии на кнопку ОК или же ENTER чтобы число 35,4 записалось в переменную Х
следующим этапом вводится следующее значение 98,6 его записать в переменную Y и т.д.
Потом уже на основании этих переменных с данными идёт выполнение программы, например прибавление X+Y=134
Как то так.
ADMIN Дата: Вт, 13.05.2014, 03:25  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Здесь нужно, по идее, говорить обратно - я вывожу на LCD вводимое мной число. В программе присваиваем X какое-то число, выводим на дисплей, потом присваиваем Y какое-то число и тоже выводим. В чем конкретно проблема?
xvovanx Дата: Вт, 13.05.2014, 10:29  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 328
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата ADMIN ()
Здесь нужно, по идее, говорить обратно - я вывожу на LCD вводимое мной число.


+1. Дисплей надо использовать только для вывода информации, а исходные данные и результат (X, Y, X+Y) прописывать и считывать в память проца, либо хранить во временных переменных программы
Alexej79 Дата: Вт, 13.05.2014, 14:45  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 71
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

ADMIN, xvovanx, правильно поправили. У меня не получается никак свою мысль в буквы переписать.
Так оно и есть, при нажатии на клавишу, АЦП определяет что за цифра нажата и записывает её в переменную Z следующим шагом программы выводит это значение на LCD потом сдвигает позицию знакоместа на одно положение вправо и ждёт следуещего нажатия кнопки. если это символ от 0 до 9 то присваивает значение переменной Z и та же процедура что и с первой цифрой пока не будет нажата клавиша ентер.
Это алгоритм а вот проблема в том что при нажатии последующих кнопок переменная Z переписывается и ей остаётся присвоенно только значение последней нажатой цифры. На LCD светится 246 а в переменной Z имею только символ последней нажатой кнопки в данном примере 6.
Если создать массив и прописывать каждый символ в свою ячейку то представления не имею как на основании массива присвоить всё его содержимое одной переменной.
Вот собственно в этом и есть моя проблема.
ADMIN Дата: Вт, 13.05.2014, 15:00  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я так понимаю, это калькулятор? Может на код глянуть? Я вот решительно проблемы не понимаю. wink
Matrix252005 Дата: Вт, 13.05.2014, 15:31  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!!!!

Цитата
На LCD светится 246 а в переменной Z имею только символ последней нажатой кнопки в данном примере 6.

Alexej79, как я Вас понял, Вы хотите связать все числа в одно значение..

Если это так, то путей решения этого очень много... Например так:

i = (i * 10) + х,

где i - Ваша переменная типа Word, в которой и будет сохраняться Ваше число, например 246. "х" - это номер кнопки.

Можно по другому, если использовать массив:
Arr [x]- где х нужное кол-во элементов массива. В данном случае - 3

i = (Arr[0] * 100) + (Arr[1] * 10) + Arr[2]  

Ну или что то похожее, если нужно большее число, чем 999

Последний пример не проверял, а вот i = (i * 10) + х проверен в железе!!!

С уважением, Николай.
ivan_fd Дата: Вт, 13.05.2014, 17:30  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Alexej79,  если Вам не трудно, нарисуйте алгоритм (блоками), что нужно сделать?
Потому, что, если честно, не совсем понятно, что у Вас не получается.
Alexej79 Дата: Вт, 13.05.2014, 21:11  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 71
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Цитата ADMIN ()
Я так понимаю, это калькулятор?
Да, правильно это типа калькулятора. Надо делать математические операции с числами.

Цитата Matrix252005 ()
Вы хотите связать все числа в одно значение..
Вот это совершенно верно это мне и надо. Возможно ли с первым примером решать задачи с дробными частями?

Спасибо Вам большое что помогаете мне.
Matrix252005 Дата: Ср, 14.05.2014, 08:39  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!!!

Цитата
 Спасибо Вам большое что помогаете мне.

Alexej79, для этого мы тут и собрались, чтобы помогать друг другу!!!  biggrin

Цитата
Возможно ли с первым примером решать задачи с дробными частями?

Думаю что НЕТ, если сделать переменную I и Х типа Float (Dim I, Х as Float) то получится следующее. Например:

С формулой i = (i * 10) + х :

i = 0
x = 36.6
i = (0 * 10) + 36.6
i = 36.6

дальше мы хотим приплюсовать целое число, что может случится:

i = (36.6 * 10) + 5
i = 371

Результат не верен...
Значит, эта формула не приемлема к такой задаче!!!  sad

В таком случае, формула должна быть проста:

I = I + X

и получаем, значения I и X выше:

I = 0 + 36.6
I = 36.6
I = 36.6 + 5
I = 41.6

Ответ верен!!!

Либо я что то не так понял, в Вашем условии!!! Если это калькулятор, то до нажатия кнопок (+, -, *, /) должно работать по первой формуле, при нажатии на любую из тех кнопок, то по другой...

Так что, если Вас не затруднит, то опишите вкратце алгоритм работы этой части программы...

С уважением, Николай.
ЯНДЕКС Дата: 14.05.2014
xvovanx Дата: Ср, 14.05.2014, 12:05  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 328
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Alexej79 ()
На LCD светится 246 а в переменной Z имею только символ последней нажатой кнопки


Я бы для упрощения наоборот не привязывался бы к одной переменной Z, а делал бы в цикле Z(i)=Z1, Z2, ... , где i-введенный по порядку знак. А потом бы вычислял Z=Z3*100+Z2*10+Z1. Как писали форумчане выше идей много и попроще и посложней

Сообщение отредактировал xvovanx - Ср, 14.05.2014, 12:10
Alexej79 Дата: Ср, 14.05.2014, 20:28  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 71
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Цитата Matrix252005 ()
Либо я что то не так понял, в Вашем условии!!! Если это калькулятор, то до нажатия кнопок (+, -, *, /) должно работать по первой формуле, при нажатии на любую из тех кнопок, то по другой... Так что, если Вас не затруднит, то опишите вкратце алгоритм работы этой части программы...
Всё правильно. Я просто очень залез в дебри а ответ оказался до безобразия прост чистая математика.
Алгоритм программы таков.
Пытаюсь создать меню для использования моторов. В меню должен быть выбор номера двигателя и когда он выбран надо отрегулировать  время продолжительности его включения для перекачки жидкости.
При помощи цифровой клавиатуры вводить данные в литрах потом при помощи формулы просчитать сколько времени должен быть мотор включен что бы перекачать определённое количество жидкости.
Да вот вводить данные надо с точностью до десятых то есть 0,1 0,2 и так далее. Поэтому и интересуюсь как можно сделать решения с дробными числами.
Я так понимаю что после ввода запятой (нажатия клавиши) формула должна поменяться и выглядеть будет примерно так
I=I+(X/10) тем самым я получу десятые доли числа.

Сообщение отредактировал Alexej79 - Ср, 14.05.2014, 22:49
ivan_fd Дата: Ср, 14.05.2014, 22:51  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вот теперь более менее понятно, что Вам нужно.

Можно сделать, например, так:

Код
Dim I As Float
Dim X As Float
Dim OUT As Float

I = 12
X = 5

OUT = I + (X/10)


Тут получается, что если Вы ввели число 12, записали его в переменную Х (как Вы будете записывать, это другое дело), потом добавили число после точки - 5.
Matrix252005 Дата: Чт, 15.05.2014, 08:44  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!!!

Alexej79, а можно немного уточнить, у Вас клавиатура какая будет, матричная или просто "+", "-" и "ОК"??? Если последний вариант, то проблем вообще нет... Просто, нужное число изменяйте на 0,1. 

Если клавиатура матричная (или АЦП не важно).... То тогда, нужна будет переменная (флаг) для запятой... Например...

Вы вводите число: 12, потом нажимаете ".", флаг запятой был Flag = 0, стал Flag = 1. Дальше Вы вводите число 3. То в коде получается:

I = (I * 10) + X
...
и получаем число I = 123... Затем смотрим флаг, если он равен 1 (Flag = 1) то:

OUT = I / 10

Но это все догадки... Не видя схемы, тяжело гадать... 

Так что, способов реализации Вашей проблемы очень много, но нам нужно точка опоры, чтобы мы могли хоть от чего то оттолкнуться... Если Вас не затруднит, выложите блок схему Вашего устройства, хотя бы, ту часто, которая отвечает за клавиатуру...

С уважением, Николай.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: