Доброго времени суток! Я начинающий в програмировании.У меня к Вам вопросик. Хочу сделать термодатчик на Atmega8, семисегментник и 3 кнопки "+", "-", "set". в проге "+" и "-" работают хочу реализовать в ход в меню кнопкой set установка верхнего и нижнего порога и при ее же нажатии выход с установки на считывание температуры. Подскажите как реализоать такое меню.
Заранее спасибо!
Пишу на C
как реализовать меню в Термодатчике
- Реклама
Re: как реализовать меню в Термодатчике
Ищите по запросу "Конечный автомат".
На "электроника для всех" есть.
На "электроника для всех" есть.
Не умеешь - не берись, но не взявшись не научишься...
Re: как реализовать меню в Термодатчике
Спасибо посмотрю!
- s_black
- Мучитель микросхем
- Сообщения: 411
- Зарегистрирован: Вс авг 10, 2008 19:35:49
- Откуда: Евпатория
- Контактная информация:
Re: как реализовать меню в Термодатчике
Вот один из вариантов http://www.embed.com.ua/raznoe/upravlen ... revatelem/Nixon83 писал(а):Доброго времени суток! Я начинающий в програмировании.У меня к Вам вопросик. Хочу сделать термодатчик на Atmega8, семисегментник и 3 кнопки "+", "-", "set". в проге "+" и "-" работают хочу реализовать в ход в меню кнопкой set установка верхнего и нижнего порога и при ее же нажатии выход с установки на считывание температуры. Подскажите как реализоать такое меню.
Заранее спасибо!
Пишу на C
- zhu4er
- Вымогатель припоя
- Сообщения: 544
- Зарегистрирован: Пт июн 04, 2010 17:40:13
- Откуда: Непокорный город-герой Севастополь
Re: как реализовать меню в Термодатчике
Вот тут глянь: http://mklab.net.ua/razrab004.html код только доработать надо!Nixon83 писал(а):Доброго времени суток! Я начинающий в програмировании.У меня к Вам вопросик. Хочу сделать термодатчик на Atmega8, семисегментник и 3 кнопки "+", "-", "set". в проге "+" и "-" работают хочу реализовать в ход в меню кнопкой set установка верхнего и нижнего порога и при ее же нажатии выход с установки на считывание температуры. Подскажите как реализоать такое меню.
Заранее спасибо!
Пишу на C
Даже у стен есть уши...
- Реклама
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: как реализовать меню в Термодатчике
вот как-то так я попробовал решить Вашу задачу...
Под руками был открытый проект с хайтеком, то я на нем.
Для меги чуть отличается, но не особо - си, он и в африке си, только черный...
Проект прилагаю - на 877 пике. Комментов много, думаю, разберетесь.
Под руками был открытый проект с хайтеком, то я на нем.
Для меги чуть отличается, но не особо - си, он и в африке си, только черный...
Проект прилагаю - на 877 пике. Комментов много, думаю, разберетесь.
Код: Выделить всё
#define kSet RB7
#define kPlus RB6
#define kMinus RB5
static char cFree;// переменная, используемая для выхода
//
static char cLow; // переменные, значения которых меняем в меню
static char cHi;
//
#define FREEMAX 3 // количество щелчков на сет для выхода из меню
// прототипы функций, используемых в меню
void Inc(void);
void Dec(void);
void Free(void);
//---------------------------------------
// структура меню
typedef struct menu // ярлык структуры
{
const char *txt; // текст текущего положения меню
struct menu *Set;// указатель на структуру меню при нажатии кнопки сет
struct menu *Inc;// указатель на структуру меню при нажатии кнопки увеличить
struct menu *Dec;//// указатель на структуру меню при нажатии кнопки уменьшить
void (*Func)(void); // функция, которая выполняется в текущем положении меню
}menu;// определение структуры как типа
/*--------------------------------------------------------------------------------------------
№ стр ! текст ! кнопка сет ! кнопка увеличить ! кнопка уменьшить ! функция
-----------------------------------------------------------------------------------------------
0 Set Low Temp &Menu[3] &Menu[1] &Menu[2] Free
1 Increment Low Temp &Menu[3] &Menu[1] &Menu[2] Inc
2 Decrement Low Temp &Menu[3] &Menu[1] &Menu[2] Dec
3 Set Hi Temp &Menu[0] &Menu[4] &Menu[5] Free
4 Increment Hi Temp &Menu[3] &Menu[4] &Menu[5] Inc
5 Decrement Hi Temp &Menu[3] &Menu[4] &Menu[5] Dec
-----------------------------------------------------------------------------------------------*/
// переносим в полный массив структур
menu Menu[6]={\
{" Set Low Temp",&Menu[3],&Menu[1],&Menu[2],Free},
{" Inc Low Temp",&Menu[3],&Menu[1],&Menu[2],Inc},
{" Dec Low Temp",&Menu[3],&Menu[1],&Menu[2],Dec},
{" Set Hi Temp",&Menu[0],&Menu[4],&Menu[5],Free},
{" Inc Hi Temp",&Menu[3],&Menu[4],&Menu[5],Inc},
{" Dec Hi Temp",&Menu[3],&Menu[4],&Menu[5],Dec}};
struct menu *pMenu = 0; // Указатель на активное меню
void fnTextOut(menu *pMenu);// функция вывода текста на экран
void main()
{
lcd_init();
lcd_puts("-----Work-----");
cFree=0;
// прочитать из еепром значения сHi cLow
cLow=20;
cHi=40;
//
for(;;) // Главный цикл
{
//--------------------------------------------------
if(!kSet) // Кнопка "сет"
{
// Вход в меню
if (pMenu == 0)
{
pMenu=&Menu[0];
}
// мы уже в меню
else
{
if(pMenu->Set != 0)
{
pMenu=pMenu->Set;
}
}
fnTextOut(pMenu);// выводим надпись
pMenu->Func();// выполняем функцию активного меню
//--------------------------------------------------
while(!kSet);// ждем отпускания кнопки
}
//--------------------------------------------
if(!kPlus) // Кнопка "Plus"
{
if(pMenu != 0)
{
pMenu=pMenu->Inc;
fnTextOut(pMenu);// выводим надпись
pMenu->Func();// выполняем функцию активного меню
//--------------------------------------------------
while(!kPlus);// ждем отпускания кнопки
}
}
//-----------------------------------------
if(!kMinus) // Кнопка "Minus"
{
if(pMenu != 0)
{
pMenu=pMenu->Dec;
fnTextOut(pMenu);// выводим надпись
pMenu->Func();// выполняем функцию активного меню
//--------------------------------------------------
while(!kMinus);// ждем отпускания кнопки
}
}
DelayMs(80);
}// конец фор
}// конец мейн
//-------------------------------------------------------------------
void Inc(void)
{
if(pMenu == &Menu[1])
{
cLow++;
fnCharToStr(cLow);
}
if(pMenu == &Menu[4])
{
cHi++;
fnCharToStr(cHi);
}
lcd_goto(0x44);
lcd_putsram( str);
}
//-------------------------
void Dec(void)
{
if(pMenu == &Menu[2])
{
cLow--;
fnCharToStr(cLow);
}
if(pMenu == &Menu[5])
{
cHi--;
fnCharToStr(cHi);
}
lcd_goto(0x44);
lcd_putsram( str);
}
//-----------------------------
void Free(void)
{
cFree++;
if( cFree == FREEMAX)
{
// записать в еепром новые значения сHi cLow
cFree=0;
pMenu=0;
lcd_clear();
lcd_goto(0);
lcd_puts("-----Work-----");
}
}
//---------------------------------------
void fnTextOut(menu *pMenu)
{
lcd_clear();
lcd_goto(0);
lcd_puts(pMenu->txt);
if( pMenu == &Menu[0])
{
fnCharToStr(cLow);
lcd_goto(0x44);
lcd_putsram( str);
}
if( pMenu == &Menu[3])
{
fnCharToStr(cHi);
lcd_goto(0x44);
lcd_putsram( str);
}
}
//---------------------------------------
void fnCharToStr(unsigned char c)
{
unsigned char i,atemp;//
unsigned char val,temp;//
val=c;//
for (i=0; i<digit; i++)//
{
temp=step[i];
atemp=0;//
while(val >= temp)//
{
atemp++;//
val-=temp;//
}
str[i]=atemp+0x30;
}
str[digit]=0;// формируем завершающий нуль
}
//------------------------------------------
- Вложения
-
- lcd_test.zip
- (82.06 КБ) 166 скачиваний
Re: как реализовать меню в Термодатчике
Спасибо огромное всем, что откликнулись! Буду разбираться.


