|
|
  |
Умный дом. |
|
|
|
Mar 26 2006, 20:30
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ps1x @ Mar 26 2006, 20:39)  1) char *disp1; disp1="Не работает"; - такой код выдает ошибку "pointers are to different memory classes"
2) а такой вроде как работает char *disp1; *disp1="Не работает"; 1. Это уже конкретные AVRовские заморочки с flash - я не в курсе, как я понимаю Вам "vet" ответил. 2.Бред, если компилятор на такое хотя-бы одно предупреждение не выдал, то хреновый компилятор, либо ему все предупреждения задавили. Ну а сделать он мог, максимум, в память по адресу на который указывает указатель disp1 (кстати в пределах данного фрагмента не инициализированный! ) запихнуть один байт 'Н'. И выдать пару варнингов: - неинициализированный указатель; - хрен знает какое преобразование строки к байту;
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 26 2006, 21:01
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
В общем правильны вариант оказался: Код char *mainm[7]={" Time"," Date"," Preferences"," Devices"," Info"," Time",">>"}; lcd_puts(mainm[cur]); - работает полностью в полном обьеме Вот недоделаное меню: Код /***************************************************** 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:office@hpinfotech.com
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?
Сообщение отредактировал ps1x - Mar 26 2006, 21:12
|
|
|
|
|
Mar 26 2006, 21:35
|
Частый гость
 
Группа: Участник
Сообщений: 169
Регистрация: 26-05-05
Пользователь №: 5 441

|
Цитата(ps1x @ Mar 27 2006, 00:01)  Как заставить ISIS показывать русские буквы? И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR? #pragma rl+ lcd_putsf("Что-то на русском"); #pragma rl-
|
|
|
|
|
Mar 27 2006, 12:35
|

Местный
  
Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254

|
Цитата(ps1x @ Mar 27 2006, 00:01)  В общем правильны вариант оказался: Код char *mainm[7]={" Time"," Date"," Preferences"," Devices"," Info"," Time",">>"}; lcd_puts(mainm[cur]); - работает полностью в полном обьеме Вот недоделаное меню: Код /***************************************************** 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:office@hpinfotech.com
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 посмотреть ???
|
|
|
|
|
Mar 27 2006, 14:10
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
ОБНАРУЖЕНЫ СЛЕДУЮЩИЕ ОШИБКИ Произошла ошибка при загрузке файла, в связи с тем, что директория 'uploads' имеет неправильные атрибуты. Если Вы получили эту ошибку, просим Вас обратиться к Администратору форума и сообщить об этой ошибке. ---вот такая лажа случилась, щас залью на хостинг... http://www.annesemonin.ru/scr.jpg -- вот адрес картинки. Добавленно: http://www.annesemonin.ru/scr1.jpg -- с русскими буквами.
Сообщение отредактировал ps1x - Mar 27 2006, 14:13
|
|
|
|
|
Mar 27 2006, 17:54
|
Участник

Группа: Свой
Сообщений: 41
Регистрация: 16-02-05
Пользователь №: 2 688

|
Цитата(ps1x @ Mar 27 2006, 00:27)  Как я понял, ИСИС с русским не дружит... ) ... Качаеш отсюда редактор симоволов LCDALPHA и отредактируеш шрифты в нем. Quick Help: сохранить .BMP, открыть LCDALPHA.DLL, загрузить сохраненную .BMP и сохранить LCDALPA.DLL. Удачи!
Сообщение отредактировал Balaganov - Mar 27 2006, 17:55
|
|
|
|
|
Mar 27 2006, 18:41
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103

|
Цитата(ps1x @ Mar 27 2006, 20:54)  Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)? з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними) ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить.
|
|
|
|
|
Mar 27 2006, 18:54
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Цитата(Laptop @ Mar 27 2006, 22:41)  Цитата(ps1x @ Mar 27 2006, 20:54)  Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)? з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними)
ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить. Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал. Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так?
|
|
|
|
|
Mar 27 2006, 19:23
|
Частый гость
 
Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103

|
Цитата(ps1x @ Mar 27 2006, 21:54)  Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал. Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так? Исходников к сожалению нет. Несколько структур создавать не обязательно, все элементы могут быть одинаковы, надо только определить для себя каким будет отображение на экране. Самый простой вариант когда отображается один уровень, с вложенностью (точнее с одновременным отображением нескольких уровней вложенности) чуть сложнее, больше работы процессору. Структура элемента следующая: предыдущий пункт следующий пункт вход в нижний уровень вложенности, если есть признак активного пункта поле возможно указателя на функцию, возвращающую значение пункта меню(On, Off, etc.) Необходимо только предусмотреть затычки для неиспользуемых полей.- Вся работа сводится к беготне по ссылкам внутри списка
|
|
|
|
|
Mar 27 2006, 21:45
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Ну, отображаться будут две строки меню (на дисплее 16*2), причем перед одной из них символ ">>" как индикатор активного пункта, вобщем можете взглянуть на скрин-шот из эмулятора http://www.annesemonin.ru/scr.jpgМаксимальная вложенность - 3, тоесть: Главное меню ----настройки ---------контраст ---------яркость ---------идентификатор ----таймер ---------проверить ---------установить и т.п. Гы, а как собственно "бегать" по элементам? (switch?)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|