Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 26.06.2007, 10:19  
maxNTF
Вид на жительство
 
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
maxNTF на пути к лучшему
По умолчанию подключение клавиатуры

Люди у кого есть код на Си для подключения клавиатуры 3х4.
Или подскажите, рационально ли весь алгоритм считывания нажатой кнопки обрабатывать в функции прирывания от таймера. Мне нужно постоянно сканировать клавиатуру, как это правельней сделать?
Зарания очень благодарен.
Реклама:
maxNTF вне форума  
Непрочитано 26.06.2007, 12:54  
maxNTF
Вид на жительство
 
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
maxNTF на пути к лучшему
По умолчанию

опишу траблу по подробнее.
с клавиатурой еще не разу не работал, вот че я пытаюсь сделать:
Код:
if (TMR2IF==1)
	{
		for(;;)
		{
		RD0=0;
		if(RD4==0){key=1;Keypres();break;}
		if(RD5==0){key=2;Keypres();break;}
		if(RD6==0){key=3;Keypres();break;}
		RD0=1;
		RD1=0;
		if(RD4==0){key=4;Keypres();break;}
		if(RD5==0){key=5;Keypres();break;}
		if(RD6==0){key=6;Keypres();break;}
		RD1=1;
		RD2=0;
		if(RD4==0){key=7;Keypres();break;}
		if(RD5==0){key=8;Keypres();break;}
		if(RD6==0){key=9;Keypres();break;}
		RD2=1;
		RD3=0;
		if(RD4==0){key=11;Keypres();break;}
		if(RD5==0){key=0;Keypres();break;}
		if(RD6==0){key=12;Keypres();break;}
		RD3=1;
		keyr_f=0;
		RB7=0;
		break;
		}
	TMR2IF=0;		
	}
//...
void Keypres(void)
{
char i=0;
if (keyr_f==0 && i_k‹9) {buf_pres[i_k]=key;keyr_f=1; i_k++;}
//...
RD0=1,RD1=1,RD2=1,RD3=1;
}
запускаю в PROTEUS, работает как то криво, первые(1,4,7,*)кнопки нажимаютсмя через раз(это в лучшем случае), что подскажите?
В Keypres() я заношу значение нажатой клавиши в общий буфер.
maxNTF вне форума  
Непрочитано 26.06.2007, 14:17  
fmssp
Вид на жительство
 
Регистрация: 02.09.2005
Сообщений: 332
Сказал спасибо: 0
Сказали Спасибо 20 раз(а) в 15 сообщении(ях)
fmssp на пути к лучшему
По умолчанию Re: подключение клавиатуры

Сообщение от maxNTF
Люди у кого есть код на Си для подключения клавиатуры 3х4.
Код:
///////////////////////////////////////////////////////////////////////////
////                             KBDD.C                                ////
////                  Generic keypad scan driver                       ////
////                                                                   ////
////  kbd_init()   Must be called before any other function.           ////
////                                                                   ////
////  c = kbd_getc(c)  Will return a key value if pressed or /0 if not ////
////                   This function should be called frequently so as ////
////                   not to miss a key press.                        ////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services           ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                               ////
///////////////////////////////////////////////////////////////////////////

////////////////// The following defines the keypad layout on port D

// Un-comment the following define to use port B
// #define use_portb_kbd TRUE

// Make sure the port used has pull-up resistors (or the LCD) on
// the column pins


#if defined(__PCH__)
#if defined use_portb_kbd
   #byte kbd = 0xF81                   // This puts the entire structure
#else
   #byte kbd = 0xF83                   // This puts the entire structure
#endif
#else
#if defined use_portb_kbd
   #byte kbd = 6                  // on to port B (at address 6)
#else
   #byte kbd = 8                 // on to port D (at address 8)
#endif
#endif

#if defined use_portb_kbd
   #define set_tris_kbd(x) set_tris_b(x)
#else
   #define set_tris_kbd(x) set_tris_d(x)
#endif



//Keypad connection:   (for example column 0 is B2)
//                Bx:

#ifdef blue_keypad  ///////////////////////////////////// For the blue keypad
#define COL0 (1 ‹‹ 2)
#define COL1 (1 ‹‹ 3)
#define COL2 (1 ‹‹ 6)

#define ROW0 (1 ‹‹ 4)
#define ROW1 (1 ‹‹ 7)
#define ROW2 (1 ‹‹ 1)
#define ROW3 (1 ‹‹ 5)

#else ////////////////////////////////////////////////// For the black keypad
#define COL0 (1 ‹‹ 5)
#define COL1 (1 ‹‹ 6)
#define COL2 (1 ‹‹ 7)

#define ROW0 (1 ‹‹ 1)
#define ROW1 (1 ‹‹ 2)
#define ROW2 (1 ‹‹ 3)
#define ROW3 (1 ‹‹ 4)

#endif

#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)
#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2)

// Keypad layout:
char const KEYS[4][3] = {{'1','2','3'},
                         {'4','5','6'},
                         {'7','8','9'},
                         {'*','0','#'}};

#define KBD_DEBOUNCE_FACTOR 33    // Set this number to apx n/333 where
                                  // n is the number of times you expect
                                  // to call kbd_getc each second


void kbd_init() {
}

char kbd_getc( ) {
   static BYTE kbd_call_count;
   static short int kbd_down;
   static char last_key;
   static BYTE col;

   BYTE kchar;
   BYTE row;

   kchar='\0';
   if(++kbd_call_count›KBD_DEBOUNCE_FACTOR) {
       switch (col) {
         case 0   : set_tris_kbd(ALL_PINS&~COL0);
                    kbd=~COL0&ALL_PINS;
                    break;
         case 1   : set_tris_kbd(ALL_PINS&~COL1);
                    kbd=~COL1&ALL_PINS;
                    break;
         case 2   : set_tris_kbd(ALL_PINS&~COL2);
                    kbd=~COL2&ALL_PINS;
                    break;
       }

       if(kbd_down) {
         if((kbd & (ALL_ROWS))==(ALL_ROWS)) {
           kbd_down=FALSE;
           kchar=last_key;
           last_key='\0';
         }
       } else {
          if((kbd & (ALL_ROWS))!=(ALL_ROWS)) {
             if((kbd & ROW0)==0)
               row=0;
             else if((kbd & ROW1)==0)
               row=1;
             else if((kbd & ROW2)==0)
               row=2;
             else if((kbd & ROW3)==0)
               row=3;
             last_key =KEYS[row][col];
             kbd_down = TRUE;
          } else {
             ++col;
             if(col==3)
               col=0;
          }
       }
      kbd_call_count=0;
   }
  set_tris_kbd(ALL_PINS);
  return(kchar);
}
fmssp вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение PS/2 клавиатуры к микроконтроллеру hostel6psu Коллекция глюков 1 21.05.2009 05:24
Подключение ЖК дисплея (от телефона) и клавиатуры deeman30rus Ремонт оргтехники 0 02.04.2009 13:41
обработка клавиатуры? maxNTF Микроконтроллеры, АЦП, память и т.д 18 26.10.2007 23:44
Использование клавиатуры PC anton_avr Микроконтроллеры, АЦП, память и т.д 2 04.05.2007 18:46
Подключение стандартной клавиатуры к PIC(у) Eddik Микроконтроллеры, АЦП, память и т.д 8 18.04.2007 20:18


Часовой пояс GMT +4, время: 18:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot