Заголовок сообщения: Re: Изменение кода для счетчика
Добавлено: Пт июн 09, 2017 12:46:24
Первый раз сказал Мяу!
Зарегистрирован: Вт май 23, 2017 15:41:09 Сообщений: 26
Рейтинг сообщения:0
Конечно, лучше учить поэтапно. Но у меня получается, что выполняю такие задания параллельно с чтением теории, задания такие уже задают, знаний не хватает. Ищу по кускам, но куски вместе не склеиваются. В учебниках упражнения приводятся для выполнения непосредственно в ОС, как правило. Поэтому самостоятельная практика началась с уроков того сайта, откуда был взят изначальный код.
давай по шагам... 1) объяви переменную i для счетчика и опиши массив (10 элементов, с кодами цифр - можешь скопировать их (коды) из соих примеров (если не подойдут потом поправим))
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: Изменение кода для счетчика
Добавлено: Пт июн 09, 2017 13:38:22
Первый раз сказал Мяу!
Зарегистрирован: Вт май 23, 2017 15:41:09 Сообщений: 26
Рейтинг сообщения:0
Массив знаков получился такой:
Код:
for (i=0; i<10; i+1) // i должна быть от нуля до 9 включительно, т. к. строго меньше 10, шаг отсчета 1 char dig [10]= // Массив символов для индикатора { 0b00000110; 0b01011011; 0b01001111; 0b01100110; 0b01101101; 0b01111101; 0b00000111; 0b01111111; 0b01101111; 0b00111111; }
Добавлено after 6 minutes 12 seconds: А может быть и так можно:
i+1 здесь не будет давать нужного вам эффекта, т.к. результат выражения ничему не присваивается. здесь или i++ надо писать, или i+=1 или i = i + 1 иначе цикл у вас будет вечным
mnirti писал(а):
char dig [10]= // Массив символов для индикатора { 0b00000110; 0b01011011; 0b01001111; 0b01100110; 0b01101101; 0b01111101; 0b00000111; 0b01111111; 0b01101111; 0b00111111; }
это всё магические числа, что плохо по определению.
mnirti писал(а):
char dig [i=0; i<10; i+1]
так точно нельзя.
вы по какой книге язык Си изучаете? неужели там такое написано?!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
char dig [10]= // Массив символов для индикатора { 0b00000110; 0b01011011; 0b01001111; 0b01100110; 0b01101101; 0b01111101; 0b00000111; 0b01111111; 0b01101111; 0b00111111; }
это всё магические числа
я считаю это — настройка периферии, а как без них предлагаете знакогенератор собрать? mnirti массив лучше: 1. сделать константным - мы в нём по ходу программы ни чего менять не будем, 2. объявлять не в цикле for (почитайте про область видимости переменных) 3. если массив заполняется при объявлении — его размер можно не писать, компилятор сам сощитает ... dig[]={...}; 4. элементы массива разделяются запятыми
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
9 строка: переменная не нужна (она ни где не используется). 32-36: дополнительной проверки не надо,достаточно только цикла. 40: этот цикл сделай закольцованным навсегда, без учета кнопки. 43: циклу for добавь операторные скобки и в них впиши задержку, пустой цикл с условием по кнопке и вывод iтой цифры в порт.
всё дальнейшее стирай.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Программа в процессоре никогда не должна "закончиться", для этого в функции main создается бесконечный цикл
Код:
int main(void) //main start { //инициализация переменных и настройка железа(настройка портов на вход- выход) while (1) { // Тут будет основной код } }//main end
В вашем случае удобнее ввести переменную в которую считать состояние кнопки(кнопок) и в зависимости от нее делать разветвления программы.
Код:
unsigned char knopka; unsigned int perevennaja=0; while (1) { knopka = PINB; // если кнопка нажата делаем то if ((knopka & 0b00000001) == 0 ) { //Если надо добавляете проверку на мах значение, с учетом того ее увеличите perenennaja++;
} else //если кнопка не нажата делаем то { //Если надо добавляете проверку на min значение, с учетом того ее уменьшите peremennaja--; } //тут удобное место написать код для отображения значения "perenennaja" _delay_ms(300); перед следующим опросом кнопки, пропускаем дребезг кнопки }
Для того, чтобы определить какое это нажатие первое или второе нужна еще одна переменная. В ней будет хранится информация о том это первое или второе нажатие кнопки. (Или внутри блока еще один опрос кнопки, немного усложняется программа)
много раз слышал фразу "математика мне не нужна, я люблю историю и пойду учиться в на истфак" - найдите 7 отличий от вашего утверждения...
жаль, что правила хорошего тона постепенно умирают как в реальной жизни, так и в программировании. зачем пользоваться салфеткой, если можно и рукой рот вытереть? зачем избавляться от магических чисел, если "только один раз надо"?
как минимум затем, чтобы самого себя уважать не за лень, а за аккуратность.
извините за оффтоп.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Изменение кода для счетчика
Добавлено: Вт июн 13, 2017 08:07:20
Первый раз сказал Мяу!
Зарегистрирован: Вт май 23, 2017 15:41:09 Сообщений: 26
Рейтинг сообщения:0
Константа была добавлена в дополнение к массиву, который посоветовали сделать константным. Указанный Вами блок выполняется только, если на ножке появляется логическая единица, то есть кнопка не нажата.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения