Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.08.2011, 17:20
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: как реализовать меню в Термодатчике
Сообщение от Nixon83
|
как-то так! И хоть кол чеши не могу организовать меню!
|
По коду выше вроде в меню должно входить.Проверь(при входе на индикаторы выдай чего-нибудь для проверки).
|
|
|
|
09.08.2011, 17:27
|
|
Частый гость
Регистрация: 07.08.2009
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Как реализовать меню в термодатчике
Где по коду выше, в опросе семисегментника?
|
|
|
|
09.08.2011, 22:05
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Как реализовать меню в термодатчике
Сообщение от Nixon83
|
Где по коду выше, в опросе семисегментника?
|
Например здесь:
Код:
|
void main() {
PORTB=0;
DDRB=0x0f;
PORTD=0;
DDRD=0xff;
PORTC=0;
DDRC=0x10;
TCCR0=0;
TCNT0=0xfd;
TIMSK=1;
#asm("sei");
led_buff[0]=dig_table[11];
led_buff[1]=dig_table[11];
led_buff[2]=dig_table[11];
led_buff[3]=dig_table[11];
delay_ms(200);
TCCR0=2;
ds_init();
while (ds_ok==0);
epp_read();
while (1) {
if (menu_tmr==0) ds_calc();
if (menu_tmr==15) {
ds_read();
temp_test();
}
if (BTN_PLUS==0&&btn0==0&&btn1==0) {
btn0=1;
temp_inc();
btn_timeout=30;
}
if (BTN_PLUS==0&&btn0!=0&&btn_timeout‹20) {
btn_timeout=20;
temp_inc();
}
if (BTN_PLUS!=0&&btn0!=0) {
btn0=0;
btn_timeout=20;
}
if (BTN_MINUS==0&&btn0==0&&btn1==0) {
btn1=1;
temp_dec();
btn_timeout=30;
}
if (BTN_MINUS==0&&btn1!=0&&btn_timeout‹20) {
btn_timeout=20;
temp_dec();
}
if (BTN_MINUS!=0&&btn1!=0) {
btn1=0;
btn_timeout=20;
}
if (BTN_SET==0&&btn2!=0&&btn_timeout‹20) {
btn_timeout=20;
set_params(); //переход на установку параметров
}
if (BTN_SET!=0&&btn2!=0) {
btn2=0;
btn_timeout=20;
}
if (btn_timeout›0) {
led_temp(alarm_temp);
btn_timeout--;
if (btn_timeout==0) epp_write();
}else{
led_temp(temp);
}
delay_ms(50);
menu_tmr++;
if (menu_tmr›19) menu_tmr=0;
}
} |
Последний раз редактировалось heady69; 09.08.2011 в 22:09.
|
|
|
|
09.08.2011, 22:47
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Как реализовать меню в термодатчике
Опрос кнопок лучше все-таки в прер.сделать. Можно сделать например так:
#define sc_del 100 //кол-во прер.
uchar8 scan_delay; //счетчик прер.для скан.кноп.
uchar8 key_code; //код клавиши==0,нет нажатия
interrupt [TIM0_OVF] void tmr0_ovf() {
if(! --scan_delay){ //пора сканировать?
scan_delay=sc_del;
if (BTN_PLUS==0 && btn0!=0 && key_code==0) key_code=1; //нажат +
сохраняем код клавиши "1" (если обработан предыдущий)
btn0=BTN_PLUS;
......дальше по аналогии для других кнопок..................
}
#ifdef LED_CATODE
PORTB=0x0f;
PORTD=~led_buff[led_dig];
PORTB=(~(1‹‹led_dig))&0x0f;
#else
PORTB=0;
PORTD=led_buff[led_dig];
PORTB=1‹‹led_dig;
#endif
led_dig++;
if (led_dig›3) led_dig=0;
}
В оcновной программе получаем код клавиши и сбрасываем в 0 для разрешения дальнейшей обработки.И в программе set не придется опять огород городить с опросом кнопок.
Последний раз редактировалось heady69; 10.08.2011 в 00:47.
|
|
|
|
10.08.2011, 11:31
|
|
Частый гость
Регистрация: 07.08.2009
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Как реализовать меню в термодатчике
heady69! спасибо, буду пробовать!!!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:27.
|
|