Семисегментный индикатор и клавиатура
09.05.2016, 11:35
|
|
|
Прописка
Регистрация: 17.11.2009
Сообщений: 134
Сказал спасибо: 15
Сказали Спасибо 30 раз(а) в 16 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Я только самую малость перечислил.
|
|
|
|
09.05.2016, 20:00
|
|
|
Прохожий
Регистрация: 06.05.2016
Адрес: г. Санкт-Петербург
Сообщений: 9
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Семисегментный индикатор и клавиатура
Godzilla82,Здравствуйте. Большое спасибо за пример. Но я хотела добиться немного другого. У Вас значения записываются в виде:
У Вас: | А я хотела:
**** | ****
1*** | ***1
12** | **12
123* | *123
1234 | 1234
Если честно, я наивно подумала что смогу научиться программировать микроконтроллеры avr с помощью Форумчан. Согласитесь что Ваш код не даст никакой информации человеку который всего несколько дней назад начала изучать мк и си так как в ней нет ни объяснения ни комментариев. Я очень ценю Ваш труд и время что вы потратили и ни в коем случаи не хочу быть не благодарной или обидеть Вас. Наверное не моё это дело изучение программирования мк. Буду читать литературу.. Спасибо всем за оказанное внимание и советы, надеюсь когда нибудь вновь вернутся в этот форум. Ещё раз поздравляю всех Великим праздником ПОБЕДЫ и желаю всех благ. с Уважением Алеся Смирнова. С-Пб.
|
|
|
|
09.05.2016, 21:00
|
|
|
Вид на жительство
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Сообщение от omercury
|
|
1. у Вас отсутствуют в схеме развязывающие диоды на сканере кнопок. В Протеусе, конечно же, ничего фатального не случится, ну разве кроме ошибок в дешифрации кнопок, а вот в реальном устройстве рискуете налететь на выгоревший порт.
|
- по-моему в схеме абсолютно ничего не будет.
|
|
|
|
09.05.2016, 21:01
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Ну, если вы поставили крест на изучении микроконтроллеров, очень жаль.
Постараюсь объяснить в двух словах.
Массив font: думаю и так понятно, что он задаёт соответствие между числом (0..10) и зажигаемыми сегментами.
* Кстати, какие сегменты загораются при коде 10?
Массив data: в этом массиве хранятся отображаемые цифры.
interrupt [TIM0_OVF]:
Это подпрограмма обработки прерываний от таймера 0. Вызывается сама при каждом переполнении таймера (примерно через 8 мс).
display_index: индекс элемента массива data, который отображается в данный момент (у нас же динамическая индикация).
display_common: вспомогательная переменная, аналогичная display_index, указывающая, какой катод индиатора нужно соединить с землей.
key_pressed(): Как и у вас, если нажата кнопка, возвращает код нажатой кнопки. Если кнопки не нажаты - возвращает код 255.
#asm("sei"): инструкция, разрешающая прерывания. она нужна, так как используется прерывание от таймера.
Что ещё непонятного?
Последний раз редактировалось Godzilla82; 09.05.2016 в 21:18.
|
|
|
|
Сказали "Спасибо" Godzilla82
|
|
|
09.05.2016, 21:02
|
|
|
Прописка
Регистрация: 17.11.2009
Сообщений: 134
Сказал спасибо: 15
Сказали Спасибо 30 раз(а) в 16 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Более того, схема абсолютно рабочая. Вопрос только в кривости программирующего.
|
|
|
|
09.05.2016, 21:11
|
|
|
Вид на жительство
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Это не ее стихия, сразу видно.
|
|
|
|
09.05.2016, 21:13
|
|
|
Вид на жительство
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Сообщение от mtit
|
|
А зачем там столько ретурнов? Один раз. После кейса.
|
- идея с ретернами мне, кстати, понравилась.
|
|
|
|
09.05.2016, 21:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,739
Сказал спасибо: 2,487
Сказали Спасибо 897 раз(а) в 584 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Сообщение от AlesyaS
|
|
Наверное не моё это дело изучение программирования мк.
|
А зря. Есть интерес-надо идти дальше. Здесь отвечают на вопросы. Особенно заданные девушками. Вас так мало. Почитать книжки,осмыслить-и вперед.Успех обеспечен. Программирование-штука интересная и захватывающая.
|
|
|
|
09.05.2016, 21:32
|
|
|
Вид на жительство
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Вот этот код:
// Выводим значение нажатой кнопки на индикатор
switch(scan_key()){
case 1: PORTD = num[1]; break;
case 2: PORTD = num[2]; break;
case 3: PORTD = num[3]; break;
case 4: PORTD = num[4]; break;
case 5: PORTD = num[5]; break;
case 6: PORTD = num[6]; break;
case 7: PORTD = num[7]; break;
case 8: PORTD = num[8]; break;
case 9: PORTD = num[9]; break;
case 11: PORTD = num[0]; break;
default:break;
}
Я бы переписал вот так:
int n = scan_key();
if(n){ //if((n›=1)&&(n‹=9))
PORTD = num[n];
}
else{
if(!n) //if(n == 0)
PORTD = num[0];
}
|
|
|
|
Сказали "Спасибо" Signalshik2
|
|
|
09.05.2016, 23:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,739
Сказал спасибо: 2,487
Сказали Спасибо 897 раз(а) в 584 сообщении(ях)
|
Re: Семисегментный индикатор и клавиатура
Язык СИ, конечно, позволяет очень краткие записи. Но разбираться в них,особенно начинающим-еще та головоломка.
Мне так понятнее.
int n = scan_key();
if(n) { PORTD = num[n]; } // if((n›=1)&&(n‹=9))
else { if(!n) PORTD = num[0]; } // if(n == 0)
И почему n == 0. Там же n=11;
Последний раз редактировалось baiderin; 09.05.2016 в 23:10.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:31.
|
|