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

 
 
 
Reply to this topicStart new topic
> Светодиод, Бегущая строка и суммирование переменной
Bloodykeeper
сообщение Feb 27 2012, 18:51
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 27-02-12
Пользователь №: 70 482



Здравствуйте, помогите пожалуйста с задачкой. Для опытного человека она является простенькой, а мне необходим опыт sm.gif

Суть вот в чём, по нажатии на кнопку, строка из 5 светодиодов пробегает слева направо (т.е. сначала загорается один светодиод, гаснет, потом следующий, и так до последнего), после чего последний светодиод остаётся гореть. Потом нажимается кнопка снова, и опять всё повторяется, но кроме уже горящего 5го светодиода загорается ещё и 4й. И так пока не заполнится вся строка. Задача простенькая, но необходимо её сделать на автоматах Мили или Мура, а это нам плоховато объяснили. Я код набросал немного, но не знаю как сделать сумирование переменных, чтобы светодиоды загорались и горели в конце. Помогите пожалуйста. Заранее спасибо.


CODE
#include<LPC213x.h>
int main()
{
int ST=10000, N=2, L=0, i;
IODIR1 =(1<<16)+(1<<17)+(1<<18)+(1<<19)+(1<<20);
IOCLR1 =(1<<16)+(1<<17)+(1<<18)+(1<<19)+(1<<20);
IOSET1 =(1<<16);
while(1)
{
for(i=0; i<20000000; i++)
{

//Таймер(Граф1)
ST--;
if(ST==0)
{if(N==1){L++; ST=10000;} else ST=10000;}
//if(L==6) {L=1;}

//Направление перемещения(Граф2)
if(!(IOPIN0&(1<<10)))
{N=1;}


//Условия перемещения(Граф3)
//Прямой ход
if(N==1) {
if((L==1))
{if((IOPIN1&(1<<16))){IOSET1=(1<<17); IOCLR1=(1<<16); N=2;}}
if((L==2))
{if((IOPIN1&(1<<17))){IOSET1=(1<<18); IOCLR1=(1<<17); N=2;}}
if((L==3))
{if((IOPIN1&(1<<18))){IOSET1=(1<<19); IOCLR1=(1<<18); N=2;}}
if((L==4))
{if((IOPIN1&(1<<19))){IOSET1=(1<<20); IOCLR1=(1<<19); N=2;}}
if((L==5))
{if((IOPIN1&(1<<20))){IOSET1=(1<<16); IOCLR1=(1<<20); N=2;}}
if (L==6) {L=1; N=0;}
}




}
}
}



Сообщение отредактировал Bloodykeeper - Feb 27 2012, 18:52
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 28 2012, 09:03
Сообщение #2


Гуру
******

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



Это у вас не автомат, а черт знает что.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 28 2012, 12:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Ну на Мура можно и не смотреть - у него нет вектора входных переменных
Только Мили

И описывать автоматы на С - жесть (в данном случае)
Хоть бы на какой-нибудь xHDL посмотрите
Go to the top of the page
 
+Quote Post
Bloodykeeper
сообщение Feb 28 2012, 14:24
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 27-02-12
Пользователь №: 70 482



Я понимаю вас, я тоже вижу, что всё это глупо, но так требует институт, вернее один преподаватель. До этого никто таким не страдал, всё нормально преподавалось, а тут такое... Если бы я мог найти выход из сложившейся ситуации сам, то я бы решил эту задачу, но я не могу это сделать. Поэтому и прошу помощи. Может быть кто-то сталкивался с таким, и сможет как-то помочь мне в написании кода. Задача по требованию должна состоять из графов и реализована на автоматах. Графов здесь 2 - граф перемещения и граф подсчёта последних переходов, чтобы реализовать счётчик. Вот и всё. По идее, написанный мной код работает, переходы осуществляются. Нет только счётчика, который бы считал загорание последнего светодиода, и записывал бы массив этих светодиодов потом в обратном порядке. Вот это я и не могу сделать. sad.gif
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 28 2012, 16:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Забудь про С
Вот когда нечто в схеме или xHDL появится, тогда кто-то подскажет
И, самое главное, xHDL никак не равно С, это просто схема, железо
Go to the top of the page
 
+Quote Post
Bloodykeeper
сообщение Feb 28 2012, 16:52
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 27-02-12
Пользователь №: 70 482



Ясно, спасибо и на том. Буду тогда мучать горепрепода sm.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 29 2012, 09:37
Сообщение #7


Гуру
******

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



Автоматы можно и на С сделать, но в вашей программе автоматов нет. Где переменные, хранящие текущее состояние? Где переходы между состояниями?
И еще - 2 графа это требование преподавателя или ваше личное решение? И можно ли часть функционала сделать не в виде автомата?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 29 2012, 10:08
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(XVR @ Feb 29 2012, 13:37) *
Автоматы можно и на С сделать, но в вашей программе автоматов нет.

это от преподавателя и предмета зависит. У нас по ПТЦА давали разработку автоматов на жесткой логике.
Смысл -- показать умение синтеза функций, понимание цифрового автомата

А так -- оно да, можно, конечно, автомат реализовать и на "обычных" языках программирования
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 29 2012, 10:35
Сообщение #9


Гуру
******

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



Цитата(toweroff @ Feb 29 2012, 14:08) *
это от преподавателя и предмета зависит.
Это зависит от того исходника, который привел ТС. В том исходнике автомат обнаружить очень трудно rolleyes.gif
Цитата
А так -- оно да, можно, конечно, автомат реализовать и на "обычных" языках программирования
Разумеется можно, но ТС этого не сделал.
Автомат (их тут должно быть 2 штуки) должен выглядеть как то так:
Код
typedef enum {
Idle,
Running
} State;

int total_lamps_on=0;

void run_a2(void);
int is_a2_running(void);

int is_button_pressed(void);

State a1_state = Idle;

void a1_step(void)
{
switch(a1_state)
  {
   case Idle:
    if (is_button_pressed())
     {
      run_a2();
      a1_state=Running;
     }
    break;
   case Running:
    if (!is_a2_running())
     {
      a1_state=Idle;
      total_lamps_on++;
      total_lamps_on&=7;
     }
    break;
  }
}

...
main()
{
for(;;)
  {
   a1_step();
   a2_step();
  }
}
Реализацию 2го автомата и вывод на LED'ы оставляю для ТС
Go to the top of the page
 
+Quote Post

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

 


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


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