CodeVision AVR в вопросах и ответах
Меню
Приветствую всех. Пришёл я к вам с проблемой-необходимо реализовать меню 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 дать не могу,да и не готово ещё.
Кнопочками инкрементируете нужное вам положение столбца или строки,далее жмёте кнопу "выбор" и проверяете,типа
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 дать не могу,да и не готово ещё.
- Вложения
-
- Prot_7.5.rar
- (23.53 КБ) 262 скачивания
Спасибо!!!!
PS: Не могли бы вы мне, неопытному, разъяснить по возможности как к этому коду http://www.telesys.ru/wwwboards/mcontrol/646/messages/39256.shtml прикрутить отображение меню и действия? Т.е. как это использовать в программе? А то по описанию автора выдаёт ошибок тучу....
PS: Не могли бы вы мне, неопытному, разъяснить по возможности как к этому коду http://www.telesys.ru/wwwboards/mcontrol/646/messages/39256.shtml прикрутить отображение меню и действия? Т.е. как это использовать в программе? А то по описанию автора выдаёт ошибок тучу....
Всем привет!
Сейчас у меня такая проблема.
Помогите понять проблему, которая возникла при написании малюсенького кусочка программы, написанного на Code Vision 2.03.9.
Пауза, которая указана в программе (delay_ms(1000)), в Proteus'e в два раза меньше. Прерывание - так само! Использовал CodeWizardAVR.
Я бы может быть еще думал над этим вопросом, но уже ничего не понимаю. Дело в том, что перед этим была написана нормальная по сложности программа с тем же контроллером; с тем же интервалом прерывания; с тем же предделителем; с той же величиной TCNT0=0xF0 - в общем со всеми теми же параметрами. И там было все отлично. Что произошло? Помогите найти ошибку!
Задал этот же вопрос на казусе. Пока тишина.
Заранее благодарен.
P.S. В архиве - проект на CVAVR и схема в Proteus'e.
Сейчас у меня такая проблема.
Помогите понять проблему, которая возникла при написании малюсенького кусочка программы, написанного на Code Vision 2.03.9.
Пауза, которая указана в программе (delay_ms(1000)), в Proteus'e в два раза меньше. Прерывание - так само! Использовал CodeWizardAVR.
Я бы может быть еще думал над этим вопросом, но уже ничего не понимаю. Дело в том, что перед этим была написана нормальная по сложности программа с тем же контроллером; с тем же интервалом прерывания; с тем же предделителем; с той же величиной TCNT0=0xF0 - в общем со всеми теми же параметрами. И там было все отлично. Что произошло? Помогите найти ошибку!
Задал этот же вопрос на казусе. Пока тишина.
Заранее благодарен.
P.S. В архиве - проект на CVAVR и схема в Proteus'e.
- Вложения
-
- test.rar
- (38.19 КБ) 226 скачиваний
- kupriyanov
- Открыл глаза
- Сообщения: 47
- Зарегистрирован: Пн мар 30, 2009 15:55:13
- Откуда: г. Комсомольск на Амуре
- Контактная информация:
Не работает!
Дело в том, что в этом случае пин РВ6 (это 9 нога контроллера) видимо перенастраивается на вход (т.к. в таком случае используется внешний кварц, а это - нога входа кварцевания). Это видно в Proteus'e. Там четыпе восьмерки с точкой чередуются не пустым экраном, а прочерками (как раз за этот сегмент отвечает РВ6).
По крайней мере, у меня именно так. Какие еще предложения?
Дело в том, что в этом случае пин РВ6 (это 9 нога контроллера) видимо перенастраивается на вход (т.к. в таком случае используется внешний кварц, а это - нога входа кварцевания). Это видно в Proteus'e. Там четыпе восьмерки с точкой чередуются не пустым экраном, а прочерками (как раз за этот сегмент отвечает РВ6).
По крайней мере, у меня именно так. Какие еще предложения?
- kupriyanov
- Открыл глаза
- Сообщения: 47
- Зарегистрирован: Пн мар 30, 2009 15:55:13
- Откуда: г. Комсомольск на Амуре
- Контактная информация:
- hd44780
- Встал на лапы
- Сообщения: 132
- Зарегистрирован: Вт июл 14, 2009 09:27:37
- Откуда: Донецк, Украина
Не подскажет ли кто, как в CvAVR реализовать переменные, сохраняющие свое значение при сбросе?
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.
В WinAVR есть конструкция
она работает (я проверял), но очень не хочется переписывать весь работающий проект на другой компилятор ради одного только WDT.
Как я предполагаю, CVavr лепит переменные в регистры, а они обнуляются. Надо атрибут типа анти-register.
Контроллер ATMega8 @16MHz. Можно использовать TC2 в асинхронном режиме, но ноги кварца заняты
.
Спасибо.
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.
В WinAVR есть конструкция
Код: Выделить всё
u08 wdtpresc __attribute__ ((section (".noinit")));
она работает (я проверял), но очень не хочется переписывать весь работающий проект на другой компилятор ради одного только WDT.
Как я предполагаю, CVavr лепит переменные в регистры, а они обнуляются. Надо атрибут типа анти-register.
Контроллер ATMega8 @16MHz. Можно использовать TC2 в асинхронном режиме, но ноги кварца заняты
Спасибо.
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Вероятно, нужно прицепить свой стартап, в котором переписать процедуру инициализации глобальных переменных, так, чтобы эта инициализация зависела от того, что послужило причиной сброса.
Смотри в хелпе статью "Using an External Startup File" а в тамошнем коде участок от ";GLOBAL VARIABLES INITIALIZATION " до "__GLOBAL_INI_END"
Смотри в хелпе статью "Using an External Startup File" а в тамошнем коде участок от ";GLOBAL VARIABLES INITIALIZATION " до "__GLOBAL_INI_END"
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
- hd44780
- Встал на лапы
- Сообщения: 132
- Зарегистрирован: Вт июл 14, 2009 09:27:37
- Откуда: Донецк, Украина
Yellow Tiger писал(а):P.S. (на всякий случай спрошу) Надеюсь, переменные не все сохраняются, а только нужные?
Регистровые все сохраняются
Очистку SRAM я пока не убирал.
Иначе никак - я ж не знаю, в какой регистр/ адрес памяти какую переменную компилятор засунет.... Или я чего-то не понял?
