Приветствую всех. Пришёл я к вам с проблемой-необходимо реализовать меню 3-степеней вложенности на дисплее 16х2 . Пишу в CVAVR, контроллер мега16. Нет ли у кого хорошо комментированного исходника с малым использованием памяти?
зы: управление с четырёх кнопок
Вам надо как-то обозначать положение курсора.Например мигающее знакоместо,подчёркивание или оба вместе.Чего-то я в стандартной библиотеке LCD CVAVR не нашёл этих команд.Надо писать самому.А там далее всё как по маслу-устанавливаете курсор в нужное вам место командой lcd_gotoxy(column,line);
Кнопочками инкрементируете нужное вам положение столбца или строки,далее жмёте кнопу "выбор" и проверяете,типа
if(column(или line)==столько-то)goto туда-то;
Свои меню помечайте промежуточной переменной,например "char meny",одному присвоете "1",другому-"2".
Так и будете ходить по ним:
if((meny==3)&(column==1)){
lcd_clear();
sprintf(buf,"%U",time);
lcd_gotoxy(0,0);
lcd_puts(buf);
meny=4; //это будет четвертое меню
}
if((!PIND.0)&(meny==4)){//нажимаем кнопку и ковыряем в данном меню
и т.д.
У меня получилось то,что в архиве.
Извините,код в C дать не могу,да и не готово ещё.
PS: Не могли бы вы мне, неопытному, разъяснить по возможности как к этому коду http://www.telesys.ru/wwwboards/mcontro ... 9256.shtml прикрутить отображение меню и действия? Т.е. как это использовать в программе? А то по описанию автора выдаёт ошибок тучу....
Всем привет!
Сейчас у меня такая проблема.
Помогите понять проблему, которая возникла при написании малюсенького кусочка программы, написанного на Code Vision 2.03.9.
Пауза, которая указана в программе (delay_ms(1000)), в Proteus'e в два раза меньше. Прерывание - так само! Использовал CodeWizardAVR.
Я бы может быть еще думал над этим вопросом, но уже ничего не понимаю. Дело в том, что перед этим была написана нормальная по сложности программа с тем же контроллером; с тем же интервалом прерывания; с тем же предделителем; с той же величиной TCNT0=0xF0 - в общем со всеми теми же параметрами. И там было все отлично. Что произошло? Помогите найти ошибку!
Задал этот же вопрос на казусе. Пока тишина.
Заранее благодарен.
P.S. В архиве - проект на CVAVR и схема в Proteus'e.
Не работает!
Дело в том, что в этом случае пин РВ6 (это 9 нога контроллера) видимо перенастраивается на вход (т.к. в таком случае используется внешний кварц, а это - нога входа кварцевания). Это видно в Proteus'e. Там четыпе восьмерки с точкой чередуются не пустым экраном, а прочерками (как раз за этот сегмент отвечает РВ6).
По крайней мере, у меня именно так. Какие еще предложения?
Ну и у меня заработало на любой установке в этом поле кроме дефолта. Любой источник. И секунду считал правильно.
Правда у меня цвавр 1.25.9 и проект я заново скомпилировал.
Не подскажет ли кто, как в CvAVR реализовать переменные, сохраняющие свое значение при сбросе?
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.
В WinAVR есть конструкция
она работает (я проверял), но очень не хочется переписывать весь работающий проект на другой компилятор ради одного только WDT.
Как я предполагаю, CVavr лепит переменные в регистры, а они обнуляются. Надо атрибут типа анти-register.
Контроллер ATMega8 @16MHz. Можно использовать TC2 в асинхронном режиме, но ноги кварца заняты .
Спасибо.
Вероятно, нужно прицепить свой стартап, в котором переписать процедуру инициализации глобальных переменных, так, чтобы эта инициализация зависела от того, что послужило причиной сброса.
Смотри в хелпе статью "Using an External Startup File" а в тамошнем коде участок от ";GLOBAL VARIABLES INITIALIZATION " до "__GLOBAL_INI_END"
hd44780 писал(а):Не подскажет ли кто, как в CvAVR реализовать переменные, сохраняющие свое значение при сбросе?
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.