roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 10:19

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Клавиатура 4x3 матричная KeyPad
СообщениеДобавлено: 30 май 2007, 01:06 
Не в сети

Зарегистрирован: 30 май 2007, 00:41
Сообщения: 3
Откуда: Russia
Доброе время суток!
Помогите решить такую задачу! Требуется реализовать на микроконтроллере Atmel матричную клавиатуру (например 4x3, то есть 12 кнопок). Идея абсолютно ясна  ( http://radiokot.ru/start/mcu_fpga/avr/16/ ). Но дело в том что это нужно написать это на Си (CodeVisionAVR) что для меня пока (я только учусь) представляет большую трудность!  Данная тема довольно распространенная, поэтому если у вас есть исходный код или советы как это реализовать на Си - то помогите пожалуйста! Пример из CodeVisionAVR не понял, похоже чего-то там не хватает.  Очень надо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2007, 01:09 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
[off]Щас придет дядя "123" и все расскажет и покажет :wink: [/off]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2007, 01:51 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
[off]Точнее пошлет[/off]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2007, 03:24 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Я пошлю раньше: на сайте Атмел в разделе АВР есть аппноут про матричную клавиатуру.  :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2007, 09:18 
Код:
unsigned char keys [];
unsigned short key;
unsigned char i=0;
unsigned char k=0;
void scan_key (void)
{
PORTA = 0xFF;
PORTA &=~BIT(2);
DelayMs(1);
      if (!(PINA & (1 << PA1)))
        {
          while(!(PINA & (1 << PA1)))
          {
          ;;
          }
          keys[i]=1;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA6)))
        {
          while(!(PINA & (1 << PA6)))
          {
          ;;
          }
          keys[i]=4;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA5)))
        {
          while(!(PINA & (1 << PA5)))
          {
          ;;
          }
          keys[i]=7;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA3)))
        {
          while(!(PINA & (1 << PA3)))
          {
          ;;
          }
          k=i;
          ClrDisp();
          for (i=0;i<k;i++)
              {
              keys[k]=0x00;
             }
               i=0;
               k=0;
         }
PORTA = 0xFF;
PORTA &=~BIT(0);
DelayMs(1);
      if (!(PINA & (1 << PA1)))
        {
          while(!(PINA & (1 << PA1)))
          {
          ;;
          }
          keys[i]=2;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA6)))
        {
          while(!(PINA & (1 << PA6)))
          {
          ;;
          }
          keys[i]=5;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA5)))
        {
          while(!(PINA & (1 << PA5)))
          {
          ;;
          }
          keys[i]=8;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA3)))
        {
          while(!(PINA & (1 << PA3)))
          {
          ;;
          }
          keys[i]=0;
          ShowSym(keys[i]+48);
          i++;
         }
PORTA = 0xFF;
PORTA &=~BIT(4);
DelayMs(1);
      if (!(PINA & (1 << PA1)))
        {
          while(!(PINA & (1 << PA1)))
          {
          ;;
          }
          keys[i]=3;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA6)))
        {
          while(!(PINA & (1 << PA6)))
          {
          ;;
          }
          keys[i]=6;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA5)))
        {
          while(!(PINA & (1 << PA5)))
          {
          ;;
          }
          keys[i]=9;
          ShowSym(keys[i]+48);
          i++;
         }
      else if (!(PINA & (1 << PA3)))
        {
          while(!(PINA & (1 << PA3)))
          {
          ;;
          }
          k=i;
          key =
               (keys [k-4]*10000)+
               (keys [k-3]*1000)+
               (keys [k-2]*100)+
               (keys [k-1]*10)+
               (keys [k]*1);
          ShowDigit(key);
          for (i=0;i<k;i++)
              {
              keys[k]=0x00;
             }
         i=0;
         k=0;
         }
         return;
}


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2007, 22:28 
Не в сети

Зарегистрирован: 30 май 2007, 00:41
Сообщения: 3
Откуда: Russia
-= Александр =- писал(а):
Я пошлю раньше: на сайте Атмел в разделе АВР есть аппноут про матричную клавиатуру.  :wink:


Это случайно не "C51 Keyboard Code Examples"? А то что-то другого не нашёл!

$ilent - тебе огромное человеческое спасибо!!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2007, 03:02 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Аппноут: http://www.atmel.com/dyn/resources/prod ... oc2532.pdf
И код: http://www.atmel.com/dyn/resources/prod ... AVR243.zip


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Матричная клавиатура 4x3
СообщениеДобавлено: 01 июн 2007, 12:00 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
RolaxD писал(а):
Требуется реализовать на микроконтроллере Atmel матричную клавиатуру (например 4x3, то есть 12 кнопок). Идея абсолютно ясна  ( http://radiokot.ru/start/mcu_fpga/avr/16/ ). Но дело в том что это нужно написать это на Си (CodeVisionAVR) что для меня пока (я только учусь) представляет большую трудность!


для тех кому трудно и легко в CVAVR есть ПРИМЕРЫ !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2007, 17:49 
Не в сети

Зарегистрирован: 26 фев 2006, 15:21
Сообщения: 400
Откуда: Омск
4x4
Код:
unsigned char str,col;
     key=0;
     PORTA=0x0F;
     DDRA=0xF0;
     #asm("nop");
     #asm("nop");
     str=PINA;
     #asm("nop");
     #asm("nop");
     if(str!=0x0F)
       {
       PORTA=0xF0;
       DDRA=0x0F;
       #asm("nop");
       #asm("nop");
       col=PINA;
       #asm("nop");
       #asm("nop");
       while(PINA==col)
       buzzer_on;
       
       buzzer_off;
       key=(~str)&(~col);
       }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2007, 22:12 
Не в сети

Зарегистрирован: 30 май 2007, 00:41
Сообщения: 3
Откуда: Russia
-= Александр =- писал(а):


Огромное спасибо! Нашёл даже на русском http://www.gaw.ru/html.cgi/txt/app/micr ... AVR243.htm

-= avr123.nm.ru =- писал(а):
для тех кому трудно и легко в CVAVR есть ПРИМЕРЫ !



А этим примером я что-то не разобрался! :cry:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 июн 2007, 14:22 
Не в сети

Зарегистрирован: 03 фев 2007, 20:24
Сообщения: 79
Откуда: Омск
Bravo - глянул код и не вьехал, там еще чегото надо или это всё?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 июн 2007, 14:40 
Не в сети

Зарегистрирован: 03 фев 2007, 20:24
Сообщения: 79
Откуда: Омск
Ха дела - уже понял. Респект!!!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO