реклама на сайте
подробности

 
 
> Подскажите начинающему, Keil
Djumper
сообщение Oct 9 2010, 18:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 9-10-10
Пользователь №: 60 027



Очень заинтересовался программированием микроконтроллеров.
Сейчас изучаю Keil и язык C.
Имеется железка на микроконтроллере ADuC842.
Начал с малого. Решил написать программу, которая просто заставляет загореться два светодиода из четырёх. Написал. Получилось, работает.
Сейчас решил написать программу, суть которой заключается в том, что надо нажать на кнопку и светодиод загорится, если ещё раз нажать на кнопку, то светодиод тухнет. Бился целый день, но не получается.

Согласно схеме: на светодиод надо подать 0, чтобы он загорелся, на кнопку надо тоже подать 0, чтобы она сработала и заставила загореться светодиод.
Порты прописывал следующим образом: sbit P1_1=0x11 (например светодиод) и P2_1=0x22 (например кнопка). Адреса портов 0x00 условные, т.е. по спецификации я знаю правильный адрес, это для примера привел.

Подскажите, расскажите, объясните. Выслушаю всех, очень хочу научиться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Dec 18 2010, 09:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Djumper @ Dec 18 2010, 14:21) *
Подскажите и я вам буду очень благодарен sm.gif
PS: кстати, прочтите мои комментарии к моей программе, правильно ли я понимаю как работает программа?

Поскольку из Ваших коментариев трудно понять, что же вы хотели сделать, то написанное ниже - мои фантазии на эту тему...

Код
char a[3]; //переменная "а" будет содержать 3 символа? или состоит из матрицы с 3 столбцами?
Массив с именем а состоит из трёх элементов, каждый из которых - символ. Imho, сюда Вы ходели поместить некие символы, соответствующие нажатым клавишам.

Код
char b[3]={'1','6','8'}; //это вроде как значение кода, но он не работает или это что-то другое? переменная, то для чего?
Наверное, этот массив, с которым нужно бы сравнить массив а после нажатия трёх клавиш.

Код
inception: P0=0; P1=0;//inception я придумал название, это же переменная?
Это - не переменная, это - метка. Как лучше оформлять бесконецный цикл - см. мой предыдущий пост: тогда сразу видно, что этот цикл - бесконечный.

Код
while(k!=3) //почему "k" не равно 3??? когда будет больше нажатий то обнулиться?
Imho, не равно 3, потому, что Вы ожидаете нажатие трёх кнопок. Значение переменной k изменяется в цикле (операторы k++), обнулять эту переменную нужно самому (автоматически это не делается).

Код
if (P1_0==0) {k++; while(P1_0==0) a[k]='1'; //указали строку, нажата 1 клавиша, добавили к "k" единичку, далее пока клавиша нажата, то что? переменная "а" равна 1 кодовому символу?
Вы, вероятно путаете символ '1' со значением 1... Поскольку в начале переменная k равнялась нулю (и то, потому, что эта переменная - глобальная; хорошо бы явно присваивать ей начальное значение), то увеличивать её значение нужно было бы после a[k]='1' (индексы массивом начинаются с нуля, т.е. первый элемент массива а[0]). Оператор while спользуется, по-видимому, для ожидания отпускания кнопки. Всё это следовало бы записать, наверное так:
Код
if (P1_0==0)
{
  a[k]='1'; k++;        // или так: a[k++]='1';
  P0_3=1; P0_2=0; P0_1=0; P0_0=0;
  while(P1_0==0);
}


Код
//тут охота чтобы после третьей нажатой клавиши загорались все 4 светодиода и продолжали гореть пока не нажму на любую другую клавишу
Здесь, наверное, нужно сравнить Ваши массивы a и b, и, если они совпадают, то зажечь четвертый светодиод. Здесь же, наверное, нужно ещё и обнулить переменную k, раз Вы переходите на начало Вашего бесконечного цикла...

P.S. Кнопки имеют нехорошее свойство, которое называют "дребезг контактов". Ваша программа от него не защищена! И, возможно (даже - вероятнее всего), будет улавливать нажатие одной кнопки как множественное нажатие на одну и ту же кнопку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Djumper   Подскажите начинающему   Oct 9 2010, 18:09
- - rezident   Не нужно подавать на пин, к которому подключена кн...   Oct 9 2010, 19:02
|- - Djumper   Цитата(rezident @ Oct 10 2010, 02:02) Не ...   Oct 10 2010, 07:07
- - rezident   Периферию вашего контроллера я не знаю, а изучать ...   Oct 10 2010, 08:01
|- - Djumper   rezident спасибо, а что такое P3?   Oct 10 2010, 10:48
|- - rezident   Цитата(Djumper @ Oct 10 2010, 16:48) rezi...   Oct 10 2010, 11:05
|- - Djumper   Цитата(rezident @ Oct 10 2010, 18:05) Пор...   Oct 10 2010, 11:12
- - rezident   Ну дык замените в дефайнах номера битов и далее по...   Oct 10 2010, 11:52
- - Djumper   Дребезг и т.д. это слишком сложно для меня, на ско...   Oct 12 2010, 15:00
|- - rezident   Цитата(Djumper @ Oct 12 2010, 21:00) Но н...   Oct 12 2010, 16:09
- - firstvald   Вы фактически реализуете счетный триггер, но при ...   Oct 12 2010, 16:35
|- - Djumper   Цитата(firstvald @ Oct 12 2010, 23:35) Вы...   Oct 12 2010, 16:54
- - firstvald   Давайте еще проще: void main (void) { P1=0xff;//и...   Oct 12 2010, 17:18
|- - Djumper   Цитата(firstvald @ Oct 13 2010, 00:18) Да...   Oct 12 2010, 17:40
- - firstvald   Нет. Я специально написал безо всяких битовых опер...   Oct 12 2010, 17:51
|- - Djumper   Цитата(firstvald @ Oct 13 2010, 00:51) Не...   Oct 12 2010, 18:34
- - Djumper   С кнопкой с горем пополам разобрался Хочу собрат...   Nov 17 2010, 14:03
- - XVR   ЦитатаОдно не понятно, как мне подключить это устр...   Nov 18 2010, 11:12
|- - Djumper   Цитата(XVR @ Nov 18 2010, 18:12) Программ...   Nov 18 2010, 17:35
- - XVR   ЦитатаРадуюсь. Так? Так Или с вариантами - многие ...   Nov 18 2010, 18:14
- - Djumper   Как подключить библиотеку delay.h в Keil 3? Пишет ...   Nov 19 2010, 13:20
- - Djumper   Возможно эта библиотека называется как-то по друго...   Nov 21 2010, 14:48
- - Djumper   Кое как со скрипам научился делать что-то вроде за...   Nov 24 2010, 17:39
|- - Палыч   Цитата(Djumper @ Nov 24 2010, 20:39) sfr ...   Nov 25 2010, 06:29
||- - Djumper   Цитата(Палыч @ Nov 25 2010, 13:29) Код#in...   Nov 29 2010, 11:42
|- - Палыч   Цитата(Djumper @ Nov 24 2010, 20:39) P0_2...   Nov 25 2010, 08:12
|- - Палыч   Цитата(Djumper @ Nov 24 2010, 20:39) for ...   Nov 25 2010, 13:07
- - Djumper   Сам написал программу! Всё же приятно самому с...   Dec 16 2010, 15:04
|- - Палыч   Цитата(Djumper @ Dec 16 2010, 21:04) Высл...   Dec 17 2010, 13:46
|- - Djumper   Цитата(Палыч @ Dec 17 2010, 22:46) P.S. М...   Dec 18 2010, 08:21
- - Djumper   Кодsfr P0=0x80; sfr P1=0x90; sbit P0_0=0x80; //1 с...   Dec 18 2010, 15:16
- - Палыч   Цитата(Djumper @ Dec 18 2010, 21:16) for ...   Dec 19 2010, 04:22
- - Djumper   Учту дребезг в будущем. На данный момент сделаю т...   Dec 19 2010, 12:35
- - Палыч   Цитата(Djumper @ Dec 19 2010, 18:35) На д...   Dec 20 2010, 07:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016