Перейти к содержанию
    

1)

char *disp1;

disp1="Не работает";

- такой код выдает ошибку "pointers are to different memory classes"

 

2)

а такой вроде как работает

char *disp1;

*disp1="Не работает";

1. Это уже конкретные AVRовские заморочки с flash - я не в курсе, как я понимаю Вам "vet" ответил.

 

2.Бред, если компилятор на такое хотя-бы одно предупреждение не выдал, то хреновый компилятор,

либо ему все предупреждения задавили.

Ну а сделать он мог, максимум, в память по адресу на который указывает указатель disp1 (кстати в пределах данного фрагмента не инициализированный! ) запихнуть один байт 'Н'. И выдать пару варнингов:

- неинициализированный указатель;

- хрен знает какое преобразование строки к байту;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем правильны вариант оказался:

        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?

Изменено пользователем ps1x

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как заставить ISIS показывать русские буквы?

И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR?

 

#pragma rl+

lcd_putsf("Что-то на русском");

#pragma rl-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понял, ИСИС с русским не дружит... )

Тем не менее остаются вопросы:

Как общаться Мегам между собой - rs232 насколько я почерпнул из интернета - самый простой метод.

Например:

мастер-пульт посылает каждому пульту-слейву по байту вида

хххxzzzz - где xxxx-идентификатор устройства(слейва) zzzz- комманда

например

00011010 - посылает первому слейву запрос на наличие у слейва информации для кого нибудь другого устройства, и слушает....

потом ему приходит:

00000010 - типа хочу что-то послать второму слейву

мастер ему говорит - 00010001 - готов к приему (говорит первому слейву), слушает...

слейв отвечает 00010010, 10110110 - типа передай второму слейву (00010010), что я его люблю (10110110).

Мастер кричит в эфир 00101111 - второй слейв, слушай сюда!

Второй отвечает - 00000001 - слушаю!

Мастер говорит - 00100010, 10110110.

Вот такая история...

Кто нибудь осуществлял подобного ттипа задачки? Поделитесь опытом, пожалуйста!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем правильны вариант оказался:

        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 посмотреть ???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ОБНАРУЖЕНЫ СЛЕДУЮЩИЕ ОШИБКИ

Произошла ошибка при загрузке файла, в связи с тем, что директория 'uploads' имеет неправильные атрибуты. Если Вы получили эту ошибку, просим Вас обратиться к Администратору форума и сообщить об этой ошибке.

 

---вот такая лажа случилась, щас залью на хостинг...

 

http://www.annesemonin.ru/scr.jpg -- вот адрес картинки.

 

Добавленно:

http://www.annesemonin.ru/scr1.jpg -- с русскими буквами.

Изменено пользователем ps1x

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понял, ИСИС с русским не дружит... )

...

Качаеш отсюда редактор симоволов LCDALPHA и отредактируеш шрифты в нем.

Quick Help: сохранить .BMP, открыть LCDALPHA.DLL, загрузить сохраненную .BMP и сохранить LCDALPA.DLL.

 

Удачи!

Изменено пользователем Balaganov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)?

з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала вот это достаточно будет .:

 

http://rapidshare.de/files/16570538/gui.rar.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)?

з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними)

ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)?

з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними)

ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить.

Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал.

Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал.

Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так?

Исходников к сожалению нет. Несколько структур создавать не обязательно, все элементы могут быть одинаковы, надо только определить для себя каким будет отображение на экране.

Самый простой вариант когда отображается один уровень, с вложенностью (точнее с одновременным отображением нескольких уровней вложенности) чуть сложнее, больше работы процессору.

 

Структура элемента следующая:

предыдущий пункт

следующий пункт

вход в нижний уровень вложенности, если есть

признак активного пункта

поле возможно указателя на функцию, возвращающую значение пункта меню(On, Off, etc.)

 

Необходимо только предусмотреть затычки для неиспользуемых полей.-

Вся работа сводится к беготне по ссылкам внутри списка:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, отображаться будут две строки меню (на дисплее 16*2), причем перед одной из них символ ">>" как индикатор активного пункта, вобщем можете взглянуть на скрин-шот из эмулятора

http://www.annesemonin.ru/scr.jpg

Максимальная вложенность - 3, тоесть:

 

Главное меню

----настройки

---------контраст

---------яркость

---------идентификатор

----таймер

---------проверить

---------установить

 

и т.п.

 

Гы, а как собственно "бегать" по элементам? (switch?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...