реклама на сайте
подробности

 
 
> Отображение меню на жк, реализация на CVAVR
ps1x
сообщение Mar 28 2006, 18:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Ставлю три пива тому, кто даст мне пример (с комментариями) реализации вложенного меню для 2х строчного жк в среде CVAVR. Уже второй день бюсь ап стену, но ничего путного не выходит - то меню которое написал я, уже (недоделаное) занимает 1312 слов blink.gif . Сдается мне что это не есть гут. Но придумать ничего лучше бесконечных switch case не могу ( sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ps1x
сообщение May 11 2010, 14:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Вот окончательный полностью работающий вариант меню.
CODE
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 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 : 15.01.2010
Author : ps1x
Company : asd
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <16x2.h>
// Declare your global variables here


char kod;
char last_item;
int current_menu=0; //Переменная указывает на текущее меню
int current_poz=1; //Переменная указывает на текущий пункт меню/подменю
void goto_menu(void);
void print_menu(void);


//Структура описывает пункт меню
typedef struct _selection
{
unsigned char *mas; // Указатель на название пункта
void (*function)(void); //Указатель на функцию выполняющуюся по нажатии на enter/escape
unsigned ent_f: 4; //Флаг входа 4 бита - обычно ID меню в которое надо войти
unsigned esc_f: 4; //Флаг выхода 4 бита - обычно ID меню в которое надо вернуться
}SELECTION;

//Структура описывает меню/подменю
typedef struct _menu {
unsigned char id; //Номер меню/подменю
unsigned char num_selections; //Количество пунктов данного меню/подменю
SELECTION *m; //Указатель намассив пунктов данного меню/подменю
}MENU;

//Номера меню/подменю
enum __menu__id {
MAIN_MENU, //Главное меню
DELAY_MENU, //Меню настроек
FOCUS_MENU,
QUANTITY_MENU,
TIME_MENU //Меню отчёта
};

//Имена пунктов
unsigned char X1[]={"Задержка"};
unsigned char X2[]={"1 сек"};
unsigned char X3[]={"2 сек"};
unsigned char X4[]={"3 сек"};
unsigned char X5[]={"4 сек"};
unsigned char X6[]={"5 сек"};
unsigned char X7[]={"8 сек"};
unsigned char X8[]={"10 сек"};
unsigned char X9[]={"15 сек"};
unsigned char X10[]={"20 сек"};
unsigned char X11[]={"30 сек"};
unsigned char X12[]={"Фокусировка"};
unsigned char X13[]={"Выкл"};
unsigned char X14[]={"0,5 сек"};
unsigned char X15[]={"1 сек"};
unsigned char X16[]={"Кол. фоток"};
unsigned char X17[]={"50 шт"};
unsigned char X18[]={"100 шт"};
unsigned char X19[]={"200 шт"};
unsigned char X20[]={"300 шт"};
unsigned char X21[]={"500 шт"};
unsigned char X22[]={"800 шт"};
unsigned char X23[]={"1000 шт"};
unsigned char X24[]={"Время фотогр."};
unsigned char X25[]={"Непрерывно"};
unsigned char X26[]={"5 мин"};
unsigned char X27[]={"10 мин"};
unsigned char X28[]={"15 мин"};
unsigned char X29[]={"пол часа"};
unsigned char X30[]={"час"};
unsigned char X31[]={"два часа"};
unsigned char X32[]={"Старт съемки"};

//Заголовки функций

void func1(void){}
void func2(void){}
void func3(void){}
void func4(void){}
void func5(void){}
void func6(){}
void func7(void){}

//Массив хранищий пункты главного меню (структура SELECTION)
static SELECTION menu_[]={
{X1, goto_menu, DELAY_MENU, MAIN_MENU}, //Punkt 1
{X12, goto_menu, FOCUS_MENU, MAIN_MENU}, //Punkt 2
{X16, goto_menu, QUANTITY_MENU, MAIN_MENU}, //Punkt 3
{X24, goto_menu, TIME_MENU, MAIN_MENU}, //Punkt 4
{X32, func7, 0, 0} //Punkt 4
};

//Массив хранищий пункты меню настроек (структура SELECTION)
static SELECTION menu_m0[]={
{X2, func6, 0, 0}, //Punkt 1
{X3, func6, 0, 0}, //Punkt 2
{X4, func6, 0, 0}, //Punkt 3
{X5, func6, 0, 0}, //Punkt 2
{X6, func6, 0, 0}, //Punkt 2
{X7, func6, 0, 0}, //Punkt 2
{X8, func6, 0, 0}, //Punkt 2
{X9, func6, 0, 0}, //Punkt 2
{X10, func6, 0, 0}, //Punkt 2
{X11, func6, 0, 0} //Punkt 2
};
static SELECTION menu_m1[]={
{X13, func6, 0, 0}, //Punkt 1
{X14, func6, 0, 0}, //Punkt 2
{X15, func6, 0, 0} //Punkt 3
};
static SELECTION menu_m2[]={
{X17, func6, 0, 0}, //Punkt 1
{X18, func6, 0, 0}, //Punkt 2
{X19, func6, 0, 0}, //Punkt 3
{X20, func6, 0, 0}, //Punkt 1
{X21, func6, 0, 0}, //Punkt 2
{X22, func6, 0, 0}, //Punkt 3
{X23, func6, 0, 0} //Punkt 1
};
static SELECTION menu_m3[]={
{X25, func6, 0, 0}, //Punkt 1
{X26, func6, 0, 0}, //Punkt 2
{X27, func6, 0, 0}, //Punkt 3
{X28, func6, 0, 0}, //Punkt 1
{X29, func6, 0, 0}, //Punkt 2
{X30, func6, 0, 0}, //Punkt 3
{X31, func6, 0, 0} //Punkt 1
};

//Главный массив хранит в себе все меню/подменю
//Все меню/подменю должны описываться в таком же порядке как и в enum __menu__id ...
static MENU menu[] = {
{MAIN_MENU, 5, menu_}, //Меню 1
{DELAY_MENU, 10, menu_m0}, //Меню 2
{FOCUS_MENU, 3, menu_m1},
{QUANTITY_MENU, 7, menu_m2},
{TIME_MENU, 7, menu_m3}
};

void goto_menu(void) {
switch (kod) {
case 'e': {current_menu=menu[current_menu].m[current_poz].ent_f; last_item=current_poz; break;}; //enter
case 'b': {current_menu=menu[current_menu].m[current_poz].esc_f; break;}; //escape
}
current_poz=0;
}
void print_menu()
{
lcd_clear();
lcd_putsf("> ");
lcd_puts(menu[current_menu].m[current_poz].mas);
lcd_gotoxy(2,1);
if (current_poz == menu[current_menu].num_selections-1) {
lcd_puts(menu[current_menu].m[0].mas);
// lcd_putsf("-------------------");
}
else {
lcd_puts(menu[current_menu].m[current_poz+1].mas);
}
delay_ms(100);
kod='k';
}

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=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D 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
PORTD=0xFF;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
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=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

lcd_init();
lcd_clear();

lcd_putsf(" МИЭМ");
lcd_gotoxy(0,1);
lcd_putsf(" USB частотомер");
print_menu();

while (1)
{


if(PIND.0==0){delay_ms(150);kod='u';}
if(PIND.1==0){delay_ms(150);kod='d';}
if(PIND.2==0){delay_ms(150);kod='e';}
if(PIND.3==0){delay_ms(150);kod='b';}
switch (kod) {
case 'u': {
if (current_poz<=0){current_poz=menu[current_menu].num_selections-1;}else{current_poz--;}
print_menu();
break;
};
case 'd': {
if(current_poz>=menu[current_menu].num_selections-1){current_poz=0;}else{current_poz++;}
print_menu();
break;
};
case 'b': {
goto_menu();
current_poz=last_item;
print_menu();
break;
};
case 'e': {
menu[current_menu].m[current_poz].function();
print_menu();
break;
};
};
};

}
Go to the top of the page
 
+Quote Post
ut1wpr
сообщение May 12 2010, 09:21
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 98
Регистрация: 20-06-05
Пользователь №: 6 150



Цитата(ps1x @ May 11 2010, 17:02) *
Вот окончательный полностью работающий вариант меню.
CODE
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 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 : 15.01.2010
Author : ps1x
Company : asd
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <16x2.h>
// Declare your global variables here


char kod;
char last_item;
int current_menu=0; //Переменная указывает на текущее меню
int current_poz=1; //Переменная указывает на текущий пункт меню/подменю
void goto_menu(void);
void print_menu(void);


//Структура описывает пункт меню
typedef struct _selection
{
unsigned char *mas; // Указатель на название пункта
void (*function)(void); //Указатель на функцию выполняющуюся по нажатии на enter/escape
unsigned ent_f: 4; //Флаг входа 4 бита - обычно ID меню в которое надо войти
unsigned esc_f: 4; //Флаг выхода 4 бита - обычно ID меню в которое надо вернуться
}SELECTION;

//Структура описывает меню/подменю
typedef struct _menu {
unsigned char id; //Номер меню/подменю
unsigned char num_selections; //Количество пунктов данного меню/подменю
SELECTION *m; //Указатель намассив пунктов данного меню/подменю
}MENU;

//Номера меню/подменю
enum __menu__id {
MAIN_MENU, //Главное меню
DELAY_MENU, //Меню настроек
FOCUS_MENU,
QUANTITY_MENU,
TIME_MENU //Меню отчёта
};

//Имена пунктов
unsigned char X1[]={"Задержка"};
unsigned char X2[]={"1 сек"};
unsigned char X3[]={"2 сек"};
unsigned char X4[]={"3 сек"};
unsigned char X5[]={"4 сек"};
unsigned char X6[]={"5 сек"};
unsigned char X7[]={"8 сек"};
unsigned char X8[]={"10 сек"};
unsigned char X9[]={"15 сек"};
unsigned char X10[]={"20 сек"};
unsigned char X11[]={"30 сек"};
unsigned char X12[]={"Фокусировка"};
unsigned char X13[]={"Выкл"};
unsigned char X14[]={"0,5 сек"};
unsigned char X15[]={"1 сек"};
unsigned char X16[]={"Кол. фоток"};
unsigned char X17[]={"50 шт"};
unsigned char X18[]={"100 шт"};
unsigned char X19[]={"200 шт"};
unsigned char X20[]={"300 шт"};
unsigned char X21[]={"500 шт"};
unsigned char X22[]={"800 шт"};
unsigned char X23[]={"1000 шт"};
unsigned char X24[]={"Время фотогр."};
unsigned char X25[]={"Непрерывно"};
unsigned char X26[]={"5 мин"};
unsigned char X27[]={"10 мин"};
unsigned char X28[]={"15 мин"};
unsigned char X29[]={"пол часа"};
unsigned char X30[]={"час"};
unsigned char X31[]={"два часа"};
unsigned char X32[]={"Старт съемки"};

//Заголовки функций

void func1(void){}
void func2(void){}
void func3(void){}
void func4(void){}
void func5(void){}
void func6(){}
void func7(void){}

//Массив хранищий пункты главного меню (структура SELECTION)
static SELECTION menu_[]={
{X1, goto_menu, DELAY_MENU, MAIN_MENU}, //Punkt 1
{X12, goto_menu, FOCUS_MENU, MAIN_MENU}, //Punkt 2
{X16, goto_menu, QUANTITY_MENU, MAIN_MENU}, //Punkt 3
{X24, goto_menu, TIME_MENU, MAIN_MENU}, //Punkt 4
{X32, func7, 0, 0} //Punkt 4
};

//Массив хранищий пункты меню настроек (структура SELECTION)
static SELECTION menu_m0[]={
{X2, func6, 0, 0}, //Punkt 1
{X3, func6, 0, 0}, //Punkt 2
{X4, func6, 0, 0}, //Punkt 3
{X5, func6, 0, 0}, //Punkt 2
{X6, func6, 0, 0}, //Punkt 2
{X7, func6, 0, 0}, //Punkt 2
{X8, func6, 0, 0}, //Punkt 2
{X9, func6, 0, 0}, //Punkt 2
{X10, func6, 0, 0}, //Punkt 2
{X11, func6, 0, 0} //Punkt 2
};
static SELECTION menu_m1[]={
{X13, func6, 0, 0}, //Punkt 1
{X14, func6, 0, 0}, //Punkt 2
{X15, func6, 0, 0} //Punkt 3
};
static SELECTION menu_m2[]={
{X17, func6, 0, 0}, //Punkt 1
{X18, func6, 0, 0}, //Punkt 2
{X19, func6, 0, 0}, //Punkt 3
{X20, func6, 0, 0}, //Punkt 1
{X21, func6, 0, 0}, //Punkt 2
{X22, func6, 0, 0}, //Punkt 3
{X23, func6, 0, 0} //Punkt 1
};
static SELECTION menu_m3[]={
{X25, func6, 0, 0}, //Punkt 1
{X26, func6, 0, 0}, //Punkt 2
{X27, func6, 0, 0}, //Punkt 3
{X28, func6, 0, 0}, //Punkt 1
{X29, func6, 0, 0}, //Punkt 2
{X30, func6, 0, 0}, //Punkt 3
{X31, func6, 0, 0} //Punkt 1
};

//Главный массив хранит в себе все меню/подменю
//Все меню/подменю должны описываться в таком же порядке как и в enum __menu__id ...
static MENU menu[] = {
{MAIN_MENU, 5, menu_}, //Меню 1
{DELAY_MENU, 10, menu_m0}, //Меню 2
{FOCUS_MENU, 3, menu_m1},
{QUANTITY_MENU, 7, menu_m2},
{TIME_MENU, 7, menu_m3}
};

void goto_menu(void) {
switch (kod) {
case 'e': {current_menu=menu[current_menu].m[current_poz].ent_f; last_item=current_poz; break;}; //enter
case 'b': {current_menu=menu[current_menu].m[current_poz].esc_f; break;}; //escape
}
current_poz=0;
}
void print_menu()
{
lcd_clear();
lcd_putsf("> ");
lcd_puts(menu[current_menu].m[current_poz].mas);
lcd_gotoxy(2,1);
if (current_poz == menu[current_menu].num_selections-1) {
lcd_puts(menu[current_menu].m[0].mas);
// lcd_putsf("-------------------");
}
else {
lcd_puts(menu[current_menu].m[current_poz+1].mas);
}
delay_ms(100);
kod='k';
}

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=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D 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
PORTD=0xFF;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
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=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

lcd_init();
lcd_clear();

lcd_putsf(" МИЭМ");
lcd_gotoxy(0,1);
lcd_putsf(" USB частотомер");
print_menu();

while (1)
{


if(PIND.0==0){delay_ms(150);kod='u';}
if(PIND.1==0){delay_ms(150);kod='d';}
if(PIND.2==0){delay_ms(150);kod='e';}
if(PIND.3==0){delay_ms(150);kod='b';}
switch (kod) {
case 'u': {
if (current_poz<=0){current_poz=menu[current_menu].num_selections-1;}else{current_poz--;}
print_menu();
break;
};
case 'd': {
if(current_poz>=menu[current_menu].num_selections-1){current_poz=0;}else{current_poz++;}
print_menu();
break;
};
case 'b': {
goto_menu();
current_poz=last_item;
print_menu();
break;
};
case 'e': {
menu[current_menu].m[current_poz].function();
print_menu();
break;
};
};
};

}

А теперь то же самое, но для четырёх языков, русский, украинский, польский и английский. smile.gif
Во! А мне приходилось наворачивать.... В принципе, ничего особенного, просто добавляются ещё вложения.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ps1x   Отображение меню на жк   Mar 28 2006, 18:49
- - vet   Не зацикливайтесь на вложенности. Пункт меню - сам...   Mar 28 2006, 19:08
- - rezident   Попробуйте так. Отделите интерпретатор меню и соб...   Mar 28 2006, 19:38
- - e-moe   Я реализовал так: Код//Структура описывает пункт ...   Mar 28 2006, 19:57
- - ps1x   Спасибо за ответы, сейчас буду разбираться...   Mar 28 2006, 20:50
- - ps1x   Код/**********************************************...   Mar 28 2006, 21:18
- - defunct   Когда копируете текст с русскоязычными коментариям...   Mar 28 2006, 21:28
|- - ps1x   Цитата(defunct @ Mar 29 2006, 01:28) Когд...   Mar 28 2006, 21:33
- - defunct   по конкретному коду - у Вас лишняя запятая.   Mar 28 2006, 21:52
- - ps1x   Большое спасибо! С меня 2 пива для e-moe и одн...   Mar 28 2006, 22:10
- - ps1x   Цитата(current_poz<=0)?current_poz=menu[current...   Mar 28 2006, 23:41
- - WHALE   И я пива хочу А если серьезно,открой в хелпе Code...   Mar 29 2006, 04:33
- - ps1x   Да нет, с функциям лсд я разобрался, но вот как от...   Mar 29 2006, 09:49
- - e-moe   Выше написано: Кодstatic SELECTION menu_m0[...   Mar 29 2006, 10:11
- - ps1x   Да, но вот как обратиться к структуре, чтоб отобра...   Mar 29 2006, 10:18
|- - demiurg1978   Как-то так: menu.h: CODE//=======================...   Dec 5 2014, 19:30
- - e-moe   Кодmenu[current_menu].m[current_poz...   Mar 29 2006, 10:34
- - vet   ps1x Совет: не пожалейте времени, прочитайте какой...   Mar 29 2006, 12:10
- - ps1x   спасибо за совет, но я уже так и делаю, только уче...   Mar 29 2006, 12:26
- - ps1x   Код/**********************************************...   Mar 29 2006, 14:08
- - e-moe   может стоит без приведении к int попробовать? Кодi...   Mar 29 2006, 15:25
- - ps1x   Цитатаможет стоит без приведении к int попробовать...   Mar 29 2006, 15:52
- - ps1x   Неужели никто на этом форуме не знает язык С??? Эт...   Mar 29 2006, 20:29
- - prottoss   Делал меню под заказ. Правда для графических диспл...   Mar 30 2006, 10:47
- - e-moe   Нашёл я проблему по которой невозможно быйти из по...   Mar 31 2006, 16:00
- - ps1x   Все получилось, хотя сначала делал вариант с пункт...   Mar 31 2006, 23:36
- - LSerg   Спасибо, сделал себе меню таким же образом. Легко ...   Jan 21 2010, 04:59
- - ARV   я тоже делал меню, правда на WinAVR. любая вложенн...   Jan 22 2010, 09:00
|- - Qwertty   Цитата(ARV @ Jan 22 2010, 12:00) я тоже д...   Jan 22 2010, 10:03
|- - ARV   Цитата(Qwertty @ Jan 22 2010, 13:03) Есть...   Jan 22 2010, 11:20
|- - Qwertty   Цитата(ARV @ Jan 22 2010, 14:20) рекурсию...   Jan 22 2010, 12:12
- - ARV   для собственно TUI опрос кнопок без разницы но ск...   Jan 22 2010, 13:19
- - vvkka   да согласен код слишком запутаный, как то реолизов...   Jan 24 2010, 08:41
|- - ARV   Цитата(vvkka @ Jan 24 2010, 11:41) да сог...   Jan 25 2010, 09:16
- - reload   Недавно переделал Micro-Menu под dsPIC (MPLAB C30 ...   May 10 2010, 12:45
||- - TimurArs   Цитата(ut1wpr @ May 12 2010, 10:21) А теп...   Mar 30 2018, 21:47
|- - Loshara   Цитата(ps1x @ May 11 2010, 17:02) Вот око...   Dec 24 2012, 07:55
- - ChaiSER   Здравствуйте! Понравилась данная реализация ме...   Feb 14 2011, 12:18
- - Saadov   Цитата1. Вывод текстовой информации на ЖКИ и выход...   Feb 15 2011, 16:57
- - ChaiSER   Цитата(Saadov @ Feb 15 2011, 19:57) В кей...   Feb 15 2011, 18:11
- - Saadov   Все названные функции для примера Кодvvod_chisla...   Feb 19 2011, 22:30
- - EmDMAl   Разобрался с меню. Но при размещении большого коли...   Nov 10 2014, 11:40
- - binarick   Здравствуйте уважаемые Хочу воскресить темку т.к. ...   Mar 16 2015, 09:58


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 05:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01523 секунд с 7
ELECTRONIX ©2004-2016