User Tag List

Показано с 1 по 10 из 282

Тема: Универсальный контроллер PS/2 клавиатуры для компьютеров с матричными клавиатурами.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #14

    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    931
    Спасибо Благодарностей отдано 
    243
    Спасибо Благодарностей получено 
    167
    Поблагодарили
    81 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Набросал сегодня на скорую руку прошивку для УКНЦ.

    Скрытый текст

    Код:
    //UKNZ
    #include <PS2KeyRaw.h>
    #define AX0 4
    #define AX1 5
    #define AX2 6
    #define AX3 7
    #define AY0 8
    #define AY1 9
    #define AY2 10
    #define RSTMT 14
    #define CSMT  15
    #define DATMT 16
    #define STBMT 17
    #define DATAPIN 2
    #define IRQPIN  3
    #define LAT 0
    #define EXT 1
    #define RUS 2
    
    volatile boolean d = HIGH;
    volatile uint8_t lang = LAT;
    volatile uint8_t e = lang;
    uint8_t table[3][132] = {{127,116,127,8,5,3,4,127,127,11,100,117,7,17,0,127,
    127,65,64,127,33,50,19,127,127,127,106,68,53,52,20,127,
    127,35,72,42,22,6,21,127,127,70,90,34,71,55,23,127,
    127,39,57,105,40,51,24,127,127,127,69,18,36,9,10,127,
    127,74,37,54,56,121,122,127,127,88,118,41,2,38,67,127,
    127,127,58,127,25,120,127,127,66,49,102,26,127,89,127,127,
    127,127,127,127,127,127,85,127,127,82,127,83,80,127,127,127,
    81,97,98,99,115,96,1,127,127,84,114,16,84,112,127,127,
    127,127,127,101},
    {127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
    127,49,127,127,33,127,127,127,127,127,127,127,127,127,127,127,
    127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
    127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
    127,127,127,127,127,127,127,127,127,127,119,127,127,127,127,127,
    127,127,127,127,127,127,127,127,127,127,113,127,127,127,127,127,
    127,127,127,127,127,127,127,127,127,127,127,73,127,127,127,127,
    127,127,87,127,86,103,127,127,127,127,127,127,127,127,127,127,
    127,127,127,127},
    {127,116,127,8,5,3,4,127,127,127,100,117,7,17,127,127,
    127,65,64,127,33,18,19,127,127,127,50,51,34,35,20,127,
    127,68,67,52,36,6,21,127,127,70,69,53,22,37,23,127,
    127,71,54,55,38,39,24,127,127,127,72,56,40,9,10,127,
    127,57,41,25,26,121,122,127,127,58,119,42,90,106,67,127,
    127,127,89,127,105,120,127,127,66,49,102,104,127,127,127,127,
    127,127,127,127,127,127,85,127,127,82,127,83,80,127,127,127,
    81,97,98,99,115,96,1,127,127,127,114,16,84,112,127,127,
    127,127,127,101}};
    PS2KeyRaw keyboard;
    void setup() {
      //Инициализация портов
      pinMode(AX0, OUTPUT);   //AX0
      pinMode(AX1, OUTPUT);   //AX1
      pinMode(AX2, OUTPUT);   //AX2
      pinMode(AX3, OUTPUT);   //AX3
      pinMode(AY0, OUTPUT);   //AY0
      pinMode(AY1, OUTPUT);   //AY1
      pinMode(AY2, OUTPUT);   //AY2
      pinMode(RSTMT, OUTPUT); //RES
      pinMode(CSMT, OUTPUT);  //CS
      pinMode(DATMT, OUTPUT); //DAT
      pinMode(STBMT, OUTPUT); //STB
      //Инициализация клавиатуры
      keyboard.begin( DATAPIN, IRQPIN );
      //Инициализация MT8816
      SetAddr(0);
      digitalWrite(RSTMT, LOW);
      digitalWrite(CSMT, LOW);
      digitalWrite(DATMT, LOW);
      digitalWrite(STBMT, LOW);
      InitMt();
    }
    //Сброс MT
    void InitMt() {
      digitalWrite(STBMT, HIGH); //инициализация
      digitalWrite(CSMT, HIGH); //выбор чипа
      digitalWrite(RSTMT, HIGH);
      digitalWrite(RSTMT, LOW);  //сброс
      digitalWrite(CSMT, LOW);
      digitalWrite(STBMT, LOW);
    }
    //Установка адреса MT
    void SetAddr(uint8_t addr) {
      digitalWrite(AX0,bitRead(addr,0));
      digitalWrite(AX1,bitRead(addr,1));
      digitalWrite(AX2,bitRead(addr,2));
      digitalWrite(AX3,bitRead(addr,3));
      digitalWrite(AY0,bitRead(addr,4));
      digitalWrite(AY1,bitRead(addr,5));
      digitalWrite(AY2,bitRead(addr,6));
    }
    //Установка ключа MT
    void SetKey(boolean data){
       digitalWrite(CSMT, HIGH); //выбор чипа
       digitalWrite(STBMT, HIGH); //строб on
       digitalWrite(DATMT, data); //данные
       digitalWrite(STBMT, LOW); //строб off    
       digitalWrite(CSMT, LOW);   
    }
    void loop()
    {
      if( keyboard.available() ){
        int c = keyboard.read(); //чтение кода
        switch (c) {
          case 0xE1:              //Если считался префикс 0xE1 сброс MK
            InitMt();
            break;
          case 0xE0:              //Если считался префикс 0xE0
            e = EXT;              //тогда код будет из table[1]
            break;
          case 0xF0:              //Если считался префикс 0xF0 (отпускание клавиши)
            d = LOW;              //тогда готовимся записывать "0" в MT
            break;
          case 0x78:              //Если считался код 0x78 [F11]
            lang = RUS;           //переключаемся на русскую раскладку
            e = lang;
            d = HIGH;             //помним о 0xF0 при отпускании [F11],
            break;                //фактически раскладка переключается дважды.
          case 0x07:              //Если считался код 0x07 [F12]
            lang = LAT;           //переключаемся на латинскую раскладку
            e = lang;
            d = HIGH;             //помним о 0xF0 при отпускании [F12]
            break;
          default:  
            SetAddr(table[e][c]); //получаем адрес ключа из текущей таблицы
            SetKey(d);            //переключаем ключ в состояние d
            d = HIGH;             //если было отжатие ключа, принудительно переводим в нажатие
            e = lang;             //если был код из table[1], возвращаем на текущую раскладку
        }
      }
    }
    [свернуть]


    Переключение раскладок: F11-русская F12-латинская.
    Кое-что еще требует доработки, кое-какие клавиши, наверное, стоит переназначить. Клавиши ПОМ УСТ ИСП СБРОС соответствуют F6 F7 F8 F9, чтобы было удобнее в Турбо Бейсике. Клавиша СТОП пока не реализована, ее надо отдельно делать.
    Последний раз редактировалось Xrust; 02.03.2024 в 11:04.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 34
    Последнее: 24.11.2022, 16:05
  2. Ответов: 40
    Последнее: 27.06.2021, 15:41
  3. Ответов: 146
    Последнее: 31.05.2020, 19:00
  4. Ответов: 29
    Последнее: 24.03.2019, 18:11

Ваши права

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