Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

AI_Disable, я конечно извиняюсь, но это точно ? ведь переменная х инкремениркется только когда кнопка mode НАЖАТА
Tell Me The Truth
Реклама
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение AI_Disable »

FreshMan писал(а):AI_Disable, я конечно извиняюсь, но это точно ?

А что вас смущает? Если первая часть выражения с лог. И ложна, то вторая часть уже не исполняется и не проверяется.
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

не могу понять как в вашем варианте будет инкременироваться х ?
Tell Me The Truth
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение AI_Disable »

Там же в условии ++x
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

СПАСИБО, буду пробовать :))
Tell Me The Truth
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

AI_Disable, а можно ли более лаконично записать следующие строки ?

Код: Выделить всё

if(!mode){delay_ms(5);++var;whli(!mode){};delay_ms(5);};
if(var>==5)var=0;

сдесь я ставлю перед собой задачу: при каждом нажатии на кнопку mode переменная var должна инкреминироваться на 1.
Tell Me The Truth
Реклама
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение AI_Disable »

Можно, конечно, всё засунуть в один if но не стоит оно того, в данном случаи: сильно ухудшит читаемость кода.
Только задержки объедение в одну, нет смысла её тут разделять.
И когда пишите пустой цикл фигурные скобки ставить не обязательно, также как и точку с запятой после фигурных скобок:
if(!mode){++var;while(!mode);delay_ms(10);}
if(var>=5)var=0;
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

AI_Disable писал(а):Можно, конечно, всё засунуть в один if

а увеличится ли при этом скорось выполнения программы ?
по поводку задержки: я ее поставил в начале и в конце из тех соображений, что дребезг контактов происходит при нажатии и отпускании кнопки.
Tell Me The Truth
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение AI_Disable »

FreshMan писал(а):а увеличится ли при этом скорось выполнения программы ?

Нет, скорость точно не увеличится.
den81
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт мар 15, 2012 13:37:26

Re: Вопросы по С/С++ (СИ)

Сообщение den81 »

здравствуйте!
помогите понять почему не компилирует?
указывает на ошибку линии INT MAIN VOID
спосибо!

Код: Выделить всё

#define <16F873A.h>
#use delay(clock=8M)
int main(void)
{unsigned int a=0;
 PORTA = 0xFF: TRISA=0x00;
 OPTION_REG=0x7F; PORTB=0xFF; TRISB=0xFF;
 PORTC=0x00; TRISC=0x00;
 while (1)
 { while (PORTB.F4 !=0) a++;
   delay_ms(30);
   if (Button(6POTRB,4,1,0))
   { PORTC=0xFF; delay_ms(400);
     swich(a 4 6 + 1)
     {
     case1: PORTC=0xF7; break;
     case2: PORTC=0xE8; break;
     case3: PORTC=0xE3; break;
     case4: PORTC=0xAA; break;
     case5: PORTC=0xA2; break;
     case6: PORTC=0x88;
     }
   }
 }
Последний раз редактировалось Аlex Пт апр 27, 2012 07:41:07, всего редактировалось 1 раз.
Причина: ---
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Вопросы по С/С++ (СИ)

Сообщение uldemir »

Скобки не парные. (фигурные)
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
den81
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт мар 15, 2012 13:37:26

Re: Вопросы по С/С++ (СИ)

Сообщение den81 »

помогите напиать прогу
для серводвигателя?
буду благодарен за любую помощь!
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

den81 писал(а):здравствуйте!
помогите понять почему не компилирует?
указывает на ошибку линии INT MAIN VOID
спосибо!

Код: Выделить всё

int main(void)
{

skip....
skip....
skip....


return(0);
}

Функция main объявлена как возвращающая значение типа int.
В вашей программе возврат значения функции отсутствует.
Добавьте оператор возрата значения в самой последней строчке перед закрытием тела функции main и ошибка должна пропасть.
Анализ скобок не производил. Это уже ваши проблемы и относится к неаккуратности а не к непониманию... :)
С уважением,
Виктор.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

Это точно не из-за этого.Там же ошибка, а не предупреждение.Скобки реально не хватает.
Я стараюсь подписывать в коментах какая фигурная скобка что закрывает, тогда не запутаешься.
В поисках истины человек развивается.
den81
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт мар 15, 2012 13:37:26

Re: Вопросы по С/С++ (СИ)

Сообщение den81 »

всем спасибо!
den81
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт мар 15, 2012 13:37:26

Re: Вопросы по С/С++ (СИ)

Сообщение den81 »

подскажите что необходимо написать в начале кода для PIC16F84 и PIC16F83А
есть вот такой код для серводвигателя:

unsigned short MotorA_Speed = 127; // Ширина импульса ШИМ по умолчанию 50%
unsigned short MotorB_Speed = 127; // для обоих двигателей

// Переменные для работы с двигателями
unsigned short MotorA_Status = 0; // 0 - Выключен, 1 - Вперед, 2 - Назад
unsigned short MotorB_Status = 0;

unsigned short MotorA_CurrentSpeed = 255;
unsigned short MotorB_CurrentSpeed = 255;

unsigned short MotorInitStatus = 0; // Статус функции инициализации

const unsigned long PWMFreq = 5000;// Частота ШИМ

// Подключение моторов:
// *** Motor A *****
// RD0 ====> 1A
// RD1 ====> 1B
// RC2 ====> 1E (PWM1)

// *** Motor B *****
// RB1 ====> 2A
// RB2 ====> 2B
// RC1 ====> 2E (PWM2)

// Инициализация модулей ШИМ и двигателей
void MotorInit (void){
if (MotorInitStatus == 0) { // Это первый вызов функции?
MotorInitStatus = 1; // Установка состояния
ANSELH.F0 = 0; // RB1 - цифровой вход/выход
ANSELH.F2 = 0; // RB2 - цифровой вход/выход
TRISB.RB1 = 0; // Motor B 2A
TRISB.RB2 = 0; // Motor B 2B
TRISD.RD0 = 0; // Motor A 1A
TRISD.RD1 = 0; // Motor A 1B
PWM1_Init(PWMFreq); // Инициализация модулей ШИМ
PWM2_Init(PWMFreq);
}
}

спасибо !!
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Вопросы по С/С++ (СИ)

Сообщение БАТАРЕЙКУС »

Доброе время суток коты
подскажите как можно очистить массив одной командой а то мне приходится писать так :dont_know:

Код: Выделить всё

   LSD_Buffer[0] = 0x20 ;          //
   LSD_Buffer[1] = 0x20 ;          //
- - - - - - - - - - - - - - - - - - - - - - -
   LSD_Buffer[15] = 0x20 ;          //

а это неудобно
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Используйте цикл.

Можно заюзать memset().

Код: Выделить всё

memset(LSD_Buffer, 0x20, sizeof(LSD_Buffer));
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Вопросы по С/С++ (СИ)

Сообщение Gudd-Head »


ЛСД... Лол :) Обычно пишут LCD. И если это ЖКИ со встроенным контроллером, то у его обычно есть встроенная команда очистки экрана.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Вопросы по С/С++ (СИ)

Сообщение БАТАРЕЙКУС »

LSD_Buffer это просто буфер для данных. и надо очистить их попроще.
не так как в примере.
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Ответить

Вернуться в «Разные вопросы по МК»