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

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

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

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

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

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

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

 
Опции темы
Непрочитано 05.08.2005, 11:54  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию

Так не продажу и делается.
Спроси у разработчиков - все так делают.

Кнопка опрашиваеться в то время когда пин не занят своим основным делом. А таких пинов полно можно найти.
Реклама:
Gnider вне форума  
Непрочитано 05.08.2005, 12:18  
prottoss
Прописка
 
Регистрация: 17.03.2005
Сообщений: 122
Сказал спасибо: 1
Сказали Спасибо 33 раз(а) в 7 сообщении(ях)
prottoss на пути к лучшему
По умолчанию

Цитата:
to Gnider
- если устройство делаестя для себя - то можно и все на одну ногу пытатся повесить, если на продажу, - то, извини, нужно делать нормально. А по поводу высказывания что "МК для того и сделаны..." - зделаны они для того, чтоб всевозможные куски устройства не стояли в виде отдельных корпусов на плате и разработчик мог изменить логику работы устройства без добовления корпусов (как в лог-х автоматах), а просто переписав программу. Это просто новый этап развития электроники...
Согласен полностью с ObitJr.

Цитата:
to prottoss:
- по поводу опыта программирования не нужно... - тут могут некоторые и рассказать и поспорить сколько лет кто и что пишет.
Ты выложи программу, а там будем смотрить, кто чего предложит, кто может лучше напишет.
ОК! Хотел все выложить на своем сайте к понедельнику. Но выложу сырец прям в топике. Даже интересно - кто что скажет по поводу моего подчерка. Ну вот вам сырец:

/************************************************** ***************************
Файл: KeyScan.с
Creted by PROTTOSS
Mail to PROTTOSS@mail.ru
Функция сканирования клавиатуры "6 линий на 15 кнопок"
03.08.2005
************************************************** ****************************/
#include "KeyScan.h"

/************************************************** ***************************
Определения для порта клавиатуры
************************************************** ****************************/
#define KB_PORT PORTC
#define KB_DDR DDRC
#define KB_PIN PINC

#define KB_WIRES (1 ‹‹ 2)|(1 ‹‹ 3)|(1 ‹‹ 4)|(1 ‹‹ 5)|(1 ‹‹ 6)|(1 ‹‹ 7)
#define KB_NO_USE (1 ‹‹ 0)|(1 ‹‹ 1)
#define USE_WIRES 6 // количество используемых линий
#define NO_USE_WIRES 2 // количество не используемых линий
#define HI_WIRE (1 ‹‹ 7)// номер старшей (стартовой при сканировании) линии

/************************************************** ***************************
Функции
************************************************** ****************************/
char KB_Scan(void);
void KB_Port_Setup(void);

/************************************************** ***************************
Начальная установка портов
************************************************** ****************************/
void KB_Port_Setup(void)
{ KB_DDR &= ~(KB_WIRES); // Все линии клавиатуры на ввод
KB_PORT |= KB_WIRES; // Подключаем pull-up resistors
}

/************************************************** ***************************
Сканирование клавиатуры. Возвращает номер нажатой кнопки, или 0, если нет
нажатых кнопок, или нажато более одной кнопки
************************************************** ****************************/
char KB_Scan(void)
{ char num_wires, scanner, key, wire1, wire2;

// цикл сканирования кнопок
num_wires = USE_WIRES;
scanner = HI_WIRE;
key = 0xFF;
do
{ KB_Port_Setup();
KB_DDR |= scanner;// устанавливаем одну линию на вывод
KB_PORT &= ~scanner;// устанавливаем на этой линии "0"
num_wires--; // уменьшаем счетчик циклов и выполняем задержку для уст. состояния порта
key &= KB_PIN; // считываем состояние линий
key |= KB_NO_USE | scanner; // устанавливаем биты в неиспользуемых линиях и в линии вывода
scanner ››= 1; // формируем новый скан-код
}
while(num_wires);

// если была нажата одна кнопка, то в итоге в key получим код со сброшенными двумя битами
// проверяем количество установленных в "0" бит за сканирование
num_wires = USE_WIRES;
scanner = 0;
key = ~key; // нули превращаем в единицы, так лучше считать
key ››= NO_USE_WIRES; // сдвигаем полученный код на кол-во неиспользуемых линий
do
{ scanner += key & 0x01;
key ››= 1;
if(scanner == 0x01)
{ wire1 = num_wires; // запоминаем номер первой линии
}

if(scanner == 0x02)
{ wire2 = num_wires; // запоминаем номер второй линии
}
num_wires--;// уменьшаем счетчик циклов и выполняем задержку для уст. состояния порта
}
while(num_wires);

// если установленных бит ‹ 2 - нет нажатий
// если установленных бит › 2 - нажато более одной кнопки
if(scanner != 0x02) return 0;

//возвращаем код кнопки
return wire1 | (wire2 ‹‹ 4);
__________________
http://prottoss.com
prottoss вне форума  
Непрочитано 05.08.2005, 12:21  
prottoss
Прописка
 
Регистрация: 17.03.2005
Сообщений: 122
Сказал спасибо: 1
Сказали Спасибо 33 раз(а) в 7 сообщении(ях)
prottoss на пути к лучшему
По умолчанию

Забыл: написано для AVR на IAR C 4.10b
__________________
http://prottoss.com
prottoss вне форума  
Непрочитано 05.08.2005, 16:25  
ObitJr
Частый гость
 
Регистрация: 19.02.2005
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ObitJr на пути к лучшему
По умолчанию

т.е если (wire2 != 0) то номер кнопки › 16 ???
ObitJr вне форума  
Непрочитано 05.08.2005, 16:40  
prottoss
Прописка
 
Регистрация: 17.03.2005
Сообщений: 122
Сказал спасибо: 1
Сказали Спасибо 33 раз(а) в 7 сообщении(ях)
prottoss на пути к лучшему
По умолчанию

Сообщение от ObitJr
т.е если (wire2 != 0) то номер кнопки › 16 ???
Извиняусь за ошибку. Пояснение к функции надо читать не
/************************************************** ***************************
Сканирование клавиатуры. Возвращает НОМЕР нажатой кнопки, или 0, если нет
нажатых кнопок, или нажато более одной кнопки
************************************************** ****************************/

выделено слово НОМЕР
а надо читать

/************************************************** ***************************
Сканирование клавиатуры. Возвращает КОД нажатой кнопки, или 0, если нет
нажатых кнопок, или нажато более одной кнопки
************************************************** ****************************/
выделено слово КОД

После цикла сканирования линий мы получаем код в котором, если нажато не более одной кнопки два бита установлены в единицу (там есть инвертироания). Этот код (в переменной KEY)мы и проверяем, сдвигая в лево. При этом есть счетчик единиц всего - это SCANNER, и две переменных содержащих в итоге номер единицы (линии ввода-вывода) №1 и №2

А вообще прежде чем задавать вопросы с лету прежде лучше разобраться не много самому
__________________
http://prottoss.com
prottoss вне форума  
Непрочитано 05.08.2005, 19:37  
ObitJr
Частый гость
 
Регистрация: 19.02.2005
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ObitJr на пути к лучшему
По умолчанию

это не вопрос слету, а именно потому что было написано НОМЕР.

2й вопрос:

конфигурация нажатых кнопок (0 - это пин /- - наж. кнопка):
/---
/-
0 0 0 0 ...

итак первый do: (смотрим только на то, что после num_wires--)

считывание, |scanner (key == 10011100b)
считывание, |scanner (key == 01011100b)
считывание, |scanner (key == 00111100b)
...

и того 2 кнопки нажато и всего 2 бита сброшено, если делать |scanner
при считывании - то все будет ОК.
ObitJr вне форума  
Непрочитано 05.08.2005, 19:41  
ObitJr
Частый гость
 
Регистрация: 19.02.2005
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ObitJr на пути к лучшему
По умолчанию

конфигурация такая (пробелы слетели)
/---
/-
0 0 0 0
ObitJr вне форума  
Непрочитано 05.08.2005, 22:27  
prottoss
Прописка
 
Регистрация: 17.03.2005
Сообщений: 122
Сказал спасибо: 1
Сказали Спасибо 33 раз(а) в 7 сообщении(ях)
prottoss на пути к лучшему
По умолчанию

Честно говоря я не понял, что ты имеешь ввиду, но догадываюсь (может не верно), что про то - если в KEY, будет больше нулей, чем 2 - это явно говорит, что нажато более одной кнопки (т.е. число в SCANNER не будет равно 2), и мы возвращаем ноль - т.е.нет нажатых кнопок
__________________
http://prottoss.com
prottoss вне форума  
Непрочитано 05.08.2005, 23:18  
ObitJr
Частый гость
 
Регистрация: 19.02.2005
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ObitJr на пути к лучшему
По умолчанию

дак вот при такой комбинации кнопок (скажем кнопки между 7м и 6м, и 7м и 5м выводами нажаты) - получается всего 2 сброшенных бита, что соответствует 1 нажатой кнопке
ObitJr вне форума  
Непрочитано 05.08.2005, 23:22  
ObitJr
Частый гость
 
Регистрация: 19.02.2005
Сообщений: 26
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ObitJr на пути к лучшему
По умолчанию

когда делается "key |= KB_NO_USE | scanner;" сожет взвестись нажатая линия, если делать не

key &= KB_PIN; // считываем состояние линий
key |= KB_NO_USE | scanner;

а

key &= KB_PIN | scanner; // считываем состояние линий
key |= KB_NO_USE;

то этого не произойдет
ObitJr вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сенсорная клавиатура EVGENIY1962 Автоматика и аппаратура связи 9 11.04.2012 13:46
MIDI-клавиатура R-a-v-e-n Микроконтроллеры, АЦП, память и т.д 2 22.06.2009 19:07
Дистанционная клавиатура (RC-5 -> PS/2) swona Микроконтроллеры, АЦП, память и т.д 3 26.06.2008 11:45
AVR клавиатура crashzoom Микроконтроллеры, АЦП, память и т.д 3 20.03.2007 19:09
клавиатура EVGENIY1962 Микроконтроллеры, АЦП, память и т.д 3 17.08.2006 14:08


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


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