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

|
Здравствуйте, помогите пожалуйста с задачкой. Для опытного человека она является простенькой, а мне необходим опыт  Суть вот в чём, по нажатии на кнопку, строка из 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
|
|
|
|
|
Feb 28 2012, 14:24
|
Группа: Новичок
Сообщений: 3
Регистрация: 27-02-12
Пользователь №: 70 482

|
Я понимаю вас, я тоже вижу, что всё это глупо, но так требует институт, вернее один преподаватель. До этого никто таким не страдал, всё нормально преподавалось, а тут такое... Если бы я мог найти выход из сложившейся ситуации сам, то я бы решил эту задачу, но я не могу это сделать. Поэтому и прошу помощи. Может быть кто-то сталкивался с таким, и сможет как-то помочь мне в написании кода. Задача по требованию должна состоять из графов и реализована на автоматах. Графов здесь 2 - граф перемещения и граф подсчёта последних переходов, чтобы реализовать счётчик. Вот и всё. По идее, написанный мной код работает, переходы осуществляются. Нет только счётчика, который бы считал загорание последнего светодиода, и записывал бы массив этих светодиодов потом в обратном порядке. Вот это я и не могу сделать.
|
|
|
|
|
Feb 28 2012, 16:52
|
Группа: Новичок
Сообщений: 3
Регистрация: 27-02-12
Пользователь №: 70 482

|
Ясно, спасибо и на том. Буду тогда мучать горепрепода
|
|
|
|
|
Feb 29 2012, 10:35
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(toweroff @ Feb 29 2012, 14:08)  это от преподавателя и предмета зависит. Это зависит от того исходника, который привел ТС. В том исходнике автомат обнаружить очень трудно Цитата А так -- оно да, можно, конечно, автомат реализовать и на "обычных" языках программирования Разумеется можно, но ТС этого не сделал. Автомат (их тут должно быть 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'ы оставляю для ТС
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|