vet 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба flash char *disp1; disp1="Не работает"; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба 1) char *disp1; disp1="Не работает"; - такой код выдает ошибку "pointers are to different memory classes" 2) а такой вроде как работает char *disp1; *disp1="Не работает"; 1. Это уже конкретные AVRовские заморочки с flash - я не в курсе, как я понимаю Вам "vet" ответил. 2.Бред, если компилятор на такое хотя-бы одно предупреждение не выдал, то хреновый компилятор, либо ему все предупреждения задавили. Ну а сделать он мог, максимум, в память по адресу на который указывает указатель disp1 (кстати в пределах данного фрагмента не инициализированный! ) запихнуть один байт 'Н'. И выдать пару варнингов: - неинициализированный указатель; - хрен знает какое преобразование строки к байту; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 (изменено) · Жалоба В общем правильны вариант оказался: char *mainm[7]={" Time"," Date"," Preferences"," Devices"," Info"," Time",">>"}; lcd_puts(mainm[cur]); - работает полностью в полном обьеме :cheers: Вот недоделаное меню: /***************************************************** This program was produced by the CodeWizardAVR V1.24.5 Standard Automatic Program Generator © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:[email protected] Project : Version : Date : 26.03.2006 Author : ps1x Company : ccc Comments: Chip type : ATmega8 Program type : Application Clock frequency : 1,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #asm .equ __lcd_port=0x18;PORTB #endasm #include <mega8.h> #include <stdio.h> #include <STRING.h> #include <lcd.h> #include <delay.h> unsigned char kod,m;//kod- код нажатой кнопки, м - флаг в каком меню находимся char *mainm[7]={" Time"," Date"," Preferences"," Devices"," Info"," Time",">>"};//пункты главного меню int cur,temp;//сur-текущий пункт меню, temp - температура (на будущее) unsigned int hour,min,sec;//переменные для показа часов (на будущее) void showmm(int cur) //функция показа главного меню, в зависимости от значения активного пункта { lcd_clear(); lcd_gotoxy(0,0); lcd_puts(mainm[cur]);//выводим текущ. пункт меню lcd_gotoxy(0,0); lcd_puts(mainm[6]);//выводим символ ">>" для обозначения активного пункта. lcd_gotoxy(0,1); lcd_puts(mainm[cur+1]);//следующий пункт } interrupt [TIM0_OVF] void timer0_ovf_isr(void) { switch (kod) { //в зависимости от нажатой кнопки case 'u'://если кнопка вверх if (cur==0){cur=5;}//ограничене для закольцовывания меню )) cur--;//уменьшение указателя switch (m) {//если активно главное меню case 'm': showmm(cur);//отображение гл. мен. break; } break; case 'd'://кнопка вниз if (cur==4){cur=-1;}//ограничение cur++; showmm(cur); break; case 's'://нажатие кнопки селект switch(cur){ case 3: lcd_clear(); lcd_putsf("Выполняем этот пункт!");//если активен пункт 3 то выполняем этот код }; break; case 'c': break; case 'z': break; }; kod='z'; } // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00; DDRD=0xFF; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 3,906 kHz TCCR0=0x04; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 3,906 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x04; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") lcd_init(16); while (1) //опрашиваем клавиатуру { if (PIND.0==1) {kod='u';delay_ms(250);} if (PIND.1==1) {kod='d';delay_ms(250);} if (PIND.2==1) {kod='s';delay_ms(250);} if (PIND.3==1) {kod='c';delay_ms(250);} }; } как вам такая реализация??? p.s. КОД НЕЗАКОНЧЕН! Как заставить ISIS показывать русские буквы? И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR? Изменено 26 марта, 2006 пользователем ps1x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bezobraznic 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба Как заставить ISIS показывать русские буквы? И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR? #pragma rl+ lcd_putsf("Что-то на русском"); #pragma rl- Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба Как я понял, ИСИС с русским не дружит... ) Тем не менее остаются вопросы: Как общаться Мегам между собой - rs232 насколько я почерпнул из интернета - самый простой метод. Например: мастер-пульт посылает каждому пульту-слейву по байту вида хххxzzzz - где xxxx-идентификатор устройства(слейва) zzzz- комманда например 00011010 - посылает первому слейву запрос на наличие у слейва информации для кого нибудь другого устройства, и слушает.... потом ему приходит: 00000010 - типа хочу что-то послать второму слейву мастер ему говорит - 00010001 - готов к приему (говорит первому слейву), слушает... слейв отвечает 00010010, 10110110 - типа передай второму слейву (00010010), что я его люблю (10110110). Мастер кричит в эфир 00101111 - второй слейв, слушай сюда! Второй отвечает - 00000001 - слушаю! Мастер говорит - 00100010, 10110110. Вот такая история... Кто нибудь осуществлял подобного ттипа задачки? Поделитесь опытом, пожалуйста! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TamTam 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба В общем правильны вариант оказался: char *mainm[7]={" Time"," Date"," Preferences"," Devices"," Info"," Time",">>"}; lcd_puts(mainm[cur]); - работает полностью в полном обьеме :cheers: Вот недоделаное меню: /***************************************************** This program was produced by the CodeWizardAVR V1.24.5 Standard Automatic Program Generator © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:[email protected] Project : Version : Date : 26.03.2006 Author : ps1x Company : ccc Comments: Chip type : ATmega8 Program type : Application Clock frequency : 1,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #asm .equ __lcd_port=0x18;PORTB #endasm #include <mega8.h> #include <stdio.h> #include <STRING.h> #include <lcd.h> #include <delay.h> unsigned char kod,m;//kod- код нажатой кнопки, м - флаг в каком меню находимся char *mainm[7]={" Time"," Date"," Preferences"," Devices"," Info"," Time",">>"};//пункты главного меню int cur,temp;//сur-текущий пункт меню, temp - температура (на будущее) unsigned int hour,min,sec;//переменные для показа часов (на будущее) void showmm(int cur) //функция показа главного меню, в зависимости от значения активного пункта { lcd_clear(); lcd_gotoxy(0,0); lcd_puts(mainm[cur]);//выводим текущ. пункт меню lcd_gotoxy(0,0); lcd_puts(mainm[6]);//выводим символ ">>" для обозначения активного пункта. lcd_gotoxy(0,1); lcd_puts(mainm[cur+1]);//следующий пункт } interrupt [TIM0_OVF] void timer0_ovf_isr(void) { switch (kod) { //в зависимости от нажатой кнопки case 'u'://если кнопка вверх if (cur==0){cur=5;}//ограничене для закольцовывания меню )) cur--;//уменьшение указателя switch (m) {//если активно главное меню case 'm': showmm(cur);//отображение гл. мен. break; } break; case 'd'://кнопка вниз if (cur==4){cur=-1;}//ограничение cur++; showmm(cur); break; case 's'://нажатие кнопки селект switch(cur){ case 3: lcd_clear(); lcd_putsf("Выполняем этот пункт!");//если активен пункт 3 то выполняем этот код }; break; case 'c': break; case 'z': break; }; kod='z'; } // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00; DDRD=0xFF; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 3,906 kHz TCCR0=0x04; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 3,906 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x04; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") lcd_init(16); while (1) //опрашиваем клавиатуру { if (PIND.0==1) {kod='u';delay_ms(250);} if (PIND.1==1) {kod='d';delay_ms(250);} if (PIND.2==1) {kod='s';delay_ms(250);} if (PIND.3==1) {kod='c';delay_ms(250);} }; } как вам такая реализация??? p.s. КОД НЕЗАКОНЧЕН! Как заставить ISIS показывать русские буквы? И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR? А можно на скриншот ISIS посмотреть ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 27 марта, 2006 Опубликовано 27 марта, 2006 (изменено) · Жалоба ОБНАРУЖЕНЫ СЛЕДУЮЩИЕ ОШИБКИ Произошла ошибка при загрузке файла, в связи с тем, что директория 'uploads' имеет неправильные атрибуты. Если Вы получили эту ошибку, просим Вас обратиться к Администратору форума и сообщить об этой ошибке. ---вот такая лажа случилась, щас залью на хостинг... http://www.annesemonin.ru/scr.jpg -- вот адрес картинки. Добавленно: http://www.annesemonin.ru/scr1.jpg -- с русскими буквами. Изменено 27 марта, 2006 пользователем ps1x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Balaganov 0 27 марта, 2006 Опубликовано 27 марта, 2006 (изменено) · Жалоба Как я понял, ИСИС с русским не дружит... ) ... Качаеш отсюда редактор симоволов LCDALPHA и отредактируеш шрифты в нем. Quick Help: сохранить .BMP, открыть LCDALPHA.DLL, загрузить сохраненную .BMP и сохранить LCDALPA.DLL. Удачи! Изменено 27 марта, 2006 пользователем Balaganov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)? з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_artem_ 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Для начала вот это достаточно будет .: http://rapidshare.de/files/16570538/gui.rar.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Cпасибо! ценная информация! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laptop 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)? з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними) ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)? з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними) ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить. Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал. Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laptop 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал. Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так? Исходников к сожалению нет. Несколько структур создавать не обязательно, все элементы могут быть одинаковы, надо только определить для себя каким будет отображение на экране. Самый простой вариант когда отображается один уровень, с вложенностью (точнее с одновременным отображением нескольких уровней вложенности) чуть сложнее, больше работы процессору. Структура элемента следующая: предыдущий пункт следующий пункт вход в нижний уровень вложенности, если есть признак активного пункта поле возможно указателя на функцию, возвращающую значение пункта меню(On, Off, etc.) Необходимо только предусмотреть затычки для неиспользуемых полей.- Вся работа сводится к беготне по ссылкам внутри списка:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Ну, отображаться будут две строки меню (на дисплее 16*2), причем перед одной из них символ ">>" как индикатор активного пункта, вобщем можете взглянуть на скрин-шот из эмулятора http://www.annesemonin.ru/scr.jpg Максимальная вложенность - 3, тоесть: Главное меню ----настройки ---------контраст ---------яркость ---------идентификатор ----таймер ---------проверить ---------установить и т.п. Гы, а как собственно "бегать" по элементам? (switch?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться