реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Алгоритм для программы
Jead
сообщение Oct 30 2011, 21:06
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056



Доброе время суток!
Очень нужна помощь, подсказка.. Хотя бы направление.

В общем у нас имеется модуль ввода вывода, который содержит в своем составе четыре кнопки и четыре светодиода. Свечениe светодиода обеспечивается в том случае, если в соответствующем разряде модуля (D7...D4) имеет место логическая единица. Нажатие любой кнопки приводит к формированию логической единицы на линии, связанной с кнопкой (D3...D0).

Структурная схема модуля.


И требуется обеспечить при отпущенных кнопках S1, S2 и S3 свечение светодиода VD1. При нажатии любой (одной) из кнопок свечение светодиода VD2. При нажатии любой пары кнопок свечение светодиода VD3. В случае одновременного нажатия трех кнопок должен гореть светодиод VD4.

О программировании говорить еще пока рано.
В общем я составил структурную схему подсистемы, которая выглядит так.


Дальше требуется составить алгоритм решения задачи, а вот тут-то и наступает ступор. До этого писал алгоритмы всего пару раз, и то абсолютно несерьезные.

Можете помочь с этим делом? Насколько я понял для реализации надо использовать сумматор.

Составил первые два пункта, а дальше проблемы

Включение - Запись логической единицы в порт Р1.3 - Дело доходит до сумматора и я теряюсь.
Очень надеюсь на понимание и помощь..
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Oct 31 2011, 06:49
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
О программировании говорить еще пока рано

Рано говорить о реализации алгоритма.
Вы достаточно внятно описали то, что должно делать устройство.
Но не имеете НИКАКОГО опыта в программировании. Безотносительно языка.

Программа может быть короткой или длинной. Эффективной или не эффективной (по неким критериям).
Но главный критерий - работает - не работает.

Посему реализуйте все то, о чем написано ДО СЛОВ "о программировании говорить ...".

Для начала можете на любом языке (включая русский) написать следущее.

1. Ждем нажатия какой-либо кнопки.
2. Если нажата только кнопка 1 то...
Если нажата только кнопка 12 то...
Если нажата только кнопка 13 то...

И так далее.
Программа будет не такой эффективной, но зато будет работать.

А потом, глядя на нее можно применить некую сообразительность и упростить... (Не факт, что это будет возможно, да и не факт что это будет необходимо).


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Jead
сообщение Oct 31 2011, 07:13
Сообщение #3





Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056



Да, опыта действительно не имею, но делать-то надо.

Само собой можно сделать так.
VD1 = NOT (S1 OR S2 OR S3)
VD2 = S1 OR S2 OR S3 OR S4
VD3 = (S1 AND (S2 OR S3 OR S4)) OR (S2 AND (S1 OR S3 OR S4)) OR (S3 AND (S1 OR S2 OR S4))
VD4 = (S1 AND S2 AND S3) OR (S1 AND S2 AND S4) OR (S2 AND S3 AND S4) OR (S1 AND S3 AND S4)

Но, нужен именно алгоритм.. И тут я просто не понимаю, ибо не имею опыта..
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Oct 31 2011, 07:49
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
И тут я просто не понимаю


Вы ПРИДУМАЛИ себе определение "алгоритма", который и не понимаете.
Алгоритм я вам написал. Примерно. Это и есть алгоритм. Алгоритмов решения одной задачи может быть великое множество. И выражены они могут быть в миллионе различных форм.
Форма определяется разработчиком алгоритма. Или заказчиком.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Jead
сообщение Oct 31 2011, 08:25
Сообщение #5





Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056



Ну в данном случае мне надо написать алгоритм такого вида
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 31 2011, 09:36
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Код
sum = 0
для всех кнопок
если кнопка нажата то sum = sum+1
повторять
LED = 1 сдвинутая влево на sum

Go to the top of the page
 
+Quote Post
DpInRock
сообщение Oct 31 2011, 09:57
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



русский язык в прямоугольничке ничем не отличается от оного без прямоугольничков.
Это раз.

2. Степень детализации прямоугольничка может быть разной.
Сначала пишем в виде "ждем нажатие кнопки". А потом этот прямоугольничек детализируем "считываем содержимое порта прикладываем маску если не 0, то выход иначе все сначала"

и так далее.



--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Nov 1 2011, 07:33
Сообщение #8


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Jead @ Oct 31 2011, 01:06) *
...Структурная схема модуля.....


посмотрите внимательно на кнопки.
если нажали - подали лог. 1
а если отпустили? как Вы будете детектировать что кнопка НЕ нажата? чего Вы хотите считать из порта?

и ещё, для затравки. часто, при разработке подобных схем сталкиваются с элементарной проблемой не хватки пинов у МК. Для вашего случая можно ли уменьшить кол-во входов-выходов МК?


подумайте...
(круглый)
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 1 2011, 08:04
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Jead @ Oct 31 2011, 01:06) *
В общем у нас имеется модуль ввода вывода, который содержит в своем составе четыре кнопки и четыре светодиода. Свечениe светодиода обеспечивается в том случае, если в соответствующем разряде модуля (D7...D4) имеет место логическая единица. Нажатие любой кнопки приводит к формированию логической единицы на линии, связанной с кнопкой (D3...D0).

И требуется обеспечить при отпущенных кнопках S1, S2 и S3 свечение светодиода VD1. При нажатии любой (одной) из кнопок свечение светодиода VD2. При нажатии любой пары кнопок свечение светодиода VD3. В случае одновременного нажатия трех кнопок должен гореть светодиод VD4.


Сделайте на основе таблицы.
Скажем комбинации нажатия кнопок (всего 16) - индекс таблицы: нет нажатий - 0, нажата S1 - 1, S2 - 2, S1 и S2 - 3 и т.д. (это автоматически получится при считывании состояний линий кнопок).

В таблице храните состояния светодиодов: ячейка 0 - не горят (0), ячейка 1 - горит VD2, ячейка 3 - горит VD3 и т.д.
Т.о. любым комбинациям нажатых кнопок можно сопоставить любую комбинацию зажжённых светодиодов.
Останется задача - считать состояния кнопок, выбрать из таблицы состояния светодиодов и отправить их в порт светодиодов.

Вообще можно расписать одну их форм (КНФ или ДНФ) упростить её и получить логическую формулу, но с института этим не занимался уже забыл как это делать.
Go to the top of the page
 
+Quote Post
ae_
сообщение Nov 4 2011, 13:36
Сообщение #10


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(Jead @ Oct 31 2011, 06:06) *
И требуется обеспечить при отпущенных кнопках S1, S2 и S3 свечение светодиода VD1. При нажатии любой (одной) из кнопок свечение светодиода VD2. При нажатии любой пары кнопок свечение светодиода VD3. В случае одновременного нажатия трех кнопок должен гореть светодиод VD4.

1. Получить состояние кнопок
2. Сосчитать, сколько кнопок нажато (N)
3. Если N=0, то D1;D2;D3;D4=1;0;0;0 и вернуться к п.1
4. Если N=1, то D1;D2;D3;D4=0;1;0;0 и вернуться к п.1
5. Если N=2, то D1;D2;D3;D4=0;0;1;0 и вернуться к п.1
6. D1;D2;D3;D4=0;0;0;1 и вернуться к п.1
Go to the top of the page
 
+Quote Post
Iptash
сообщение Nov 4 2011, 14:36
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата(Jead @ Oct 31 2011, 01:06) *
И требуется обеспечить при отпущенных кнопках S1, S2 и S3 свечение светодиода VD1. При нажатии любой (одной) из кнопок свечение светодиода VD2. При нажатии любой пары кнопок свечение светодиода VD3. В случае одновременного нажатия трех кнопок должен гореть светодиод VD4.

Здесь у вас фигурирует 3 кнопки?... На Си будет так выглядеть:
Код
switch(S) {
    case 0: VD1 = 1; break; //Ничего не нажато
    case 1: VD2 = 1; break; // Нажата S1
    case 2: VD2 = 1; break; // Нажата S2
    case 3: VD3 = 1; break; // Нажата пара S1 S2
    case 4: VD2 = 1; break; // Нажата S3
    case 5: VD3 = 1; break; // Нажата S1 S3
    case 6: VD3 = 1; break; // Нажата  S2 S3
    case 7: VD4 = 1; break; // нажата S1 S2 S3
   default: VD1 = VD2 = VD3 = VD4 = 0; break;
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016