Вопросы по С/С++ (СИ)
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Все спасибо! Буду пробовать ))
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
-
XyLigan_xD
- Родился
- Сообщения: 9
- Зарегистрирован: Вт мар 20, 2012 19:02:25
Re: Вопросы по С/С++ (СИ)
Народ,срочно нужна помощь.Имеется программа для МК,написанная на языке С.Но к ней нужна блок-схема,и комментарии к каждой строчке.
Нужна помощь сегодня,т.к в понедельник утром уже надо сдавать..
Очень надеюсь на помощь. Пишите в ЛС,кто сможет помочь.Программа не большая,и действий она делает мало.
В ЛС подробно опишу и со схемой,что делает программа
Нужна помощь сегодня,т.к в понедельник утром уже надо сдавать..
Очень надеюсь на помощь. Пишите в ЛС,кто сможет помочь.Программа не большая,и действий она делает мало.
В ЛС подробно опишу и со схемой,что делает программа
- Вложения
-
- Код.txt
- (881 байт) 168 скачиваний
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Специально для лентяев, в качестве исключения, прогулявших сессию.
Без всяких схем понятно, что что то вы там намутили...
Можно проще ваш ентот код сделать:
Например вот так:
Без всяких схем понятно, что что то вы там намутили...
Можно проще ваш ентот код сделать:
Код: Выделить всё
PORTB = 0b11111111; //все ноги порта B высокий уровень - выход.(выключены СД?)
PORTD = 0b11111111;} //все ноги порта подтяжка на плюс включена.
if ((PIND & 0b00000001) != _states[0]) { //Когда кнопка(выключатель),подключенная(ный) к 0 ноге не нажата(не включен)
//и не равен нулевой ячейке массива _states то
if (_states[0]) _light = !_light; // если нулевая ячейка массива _states не ноль( что за чушь?)
_states[0] = PIND & 0b00000001;} //при не нажатом выключателе присваиваем состояние
//ноги ненажатого выключалеля( что за чушь?)
if ((PIND & 0b00000010) != _states[1]) { //Когда кнопка(выключатель),подключенная(ный) к 1 ноге не нажата(не включен)
//и не равен первой ячейке массива _states то
if (_states[1] && ++_mode == 5) _mode = 1;//если ячейка массива (тут у меня мозг взрывается)
_states[1] = PIND & 0b00000010;//тут присваиваем значение если кнопка(выключатель),подключенная(ный) к 1 ноге не нажата(не включен)
//и не равен первой ячейке массива _states
}//конец если кнопка(выключатель),подключенная(ный) к 1 ноге не нажата(не включен)
}
Например вот так:
Код: Выделить всё
select = (PIND & 0b00000011);
switch (select) {//точка выбора действий зависит от select
case 1: if (_states[0]) _light = !_light; // тут сами сообразите
_states[0] = PIND ^ 0b00000001;} //
case 2:
case 3:
case 4:
В поисках истины человек развивается.
-
____Eugene____
- Открыл глаза
- Сообщения: 47
- Зарегистрирован: Вт авг 31, 2010 18:26:35
Re: Вопросы по С/С++ (СИ)
как можно обратиться к переменной или массиву определенного в другом файле ?
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: Вопросы по С/С++ (СИ)
____Eugene____ писал(а):как можно обратиться к переменной или массиву определенного в другом файле ?
элементарно - объявите ее (переменную) точно так же, как во внешнем файле, только перед объявлением добавьте слово extern
пример:
extern int i;
extern char c[9999];
Все будет только лучше, в крайнем случае - хуже.
Re: Вопросы по С/С++ (СИ)
Добрый вечер... Решил переходить с WinAVR на CVAVR. Оказалось здесь много что не состыковывается. Косяков много было, но в результате переработок убрал многие, но одна ошибка всё же осталась.
Ругается на выделенную строку
Error: C:\Users\isx\Desktop\Ôëåêñ\Íîâàÿ ïàïêà\167.c(28): function argument #1 of type 'flash unsigned char' is incompatible with required parameter of type 'flash unsigned char *'
Подскажите что нужно подправить, у меня ато варианты кончились...
#include <mega8.h>
if (tim == 10) {code = butte / 16 + 1;
lcd_init( 16 );
lcd_clear( );
lcd_gotoxy( 0,0 );
lcd_putsf( unsigned char code );
lcd_gotoxy( 0,1 );
lcd_putsf( "ЛОШАРА" );
while( 1 ){ };
}
Ругается на выделенную строку
Error: C:\Users\isx\Desktop\Ôëåêñ\Íîâàÿ ïàïêà\167.c(28): function argument #1 of type 'flash unsigned char' is incompatible with required parameter of type 'flash unsigned char *'
Подскажите что нужно подправить, у меня ато варианты кончились...
Re: Вопросы по С/С++ (СИ)
А чем первый провинился? Вроде, к стандарту ближе. Или прельстили визарды? Так за это эффективностью платим, вроде бы...isx писал(а):Решил переходить с WinAVR на CVAVR.
С уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
Не смог подходящую библиотеку найти,... Да и опыт не помешает..
Re: Вопросы по С/С++ (СИ)
С проблемой разобрался.. Надо было включить библиотеку <stdio.h> . Странно, но нигде об этом не упомяналось 

Re: Вопросы по С/С++ (СИ)
Имеется вот код:
Здесь предполагалось менять поочереди у четырёх пинов направление работы порта (нужно было сделать чтоб поочерёдно на них высокий появлялся). Но протеус показывает высокий уровень только у самого первого. В чём может быть причина?
void main( void )
{
DDRB = 0b11111111;
for(;;)
{
for (butte=1;butte<=8;butte*2) {
PORTB = butte;
}
}
}
Здесь предполагалось менять поочереди у четырёх пинов направление работы порта (нужно было сделать чтоб поочерёдно на них высокий появлялся). Но протеус показывает высокий уровень только у самого первого. В чём может быть причина?
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
butte *= 2Re: Вопросы по С/С++ (СИ)
Это почему так

Понятия не имею почему, но работает
Спасибо огромное..)
Понятия не имею почему, но работает
Последний раз редактировалось isx Ср май 23, 2012 09:35:44, всего редактировалось 1 раз.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Вопросы по С/С++ (СИ)
Потому что так записывается
Код: Выделить всё
butte = butte*2[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Вопросы по С/С++ (СИ)
butte * 2 // Значение переменной butte удвоить (сместить влево на один разряд). А дальше? Чему присвоить результат действия? Куда впихнуть?
См. предыдущий пост. Там правильно. И учи матчасть.
Ну и в свете "смещения битов" лучше для понимания сути записать так:
Код: Выделить всё
for( i = 1; i <= 8; i <<= 1 ) // your code hereС уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
доброго времени суток
обясните пожалуйста чем отличаются эти две записи
так работает
а так нет
вроде одно и тоже
обясните пожалуйста чем отличаются эти две записи
Код: Выделить всё
key=key|0x10;так работает
а так нет
Код: Выделить всё
key|=(1<<5);вроде одно и тоже
Я НЕ суслик, Я БАРСУК
Re: Вопросы по С/С++ (СИ)
потому что 0x10 это 1<<4
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: Вопросы по С/С++ (СИ)
Барсук, 0x10 = 16, (1<<5) = 32
или я ошибаюсь?
ЗЫ
упс.. опередили.
или я ошибаюсь?
ЗЫ
упс.. опередили.
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Re: Вопросы по С/С++ (СИ)
Спасибо
блин иза такой простой ошибки целый день убил
позор на мою седую голову
с уважением барсук
блин иза такой простой ошибки целый день убил
позор на мою седую голову
с уважением барсук
Я НЕ суслик, Я БАРСУК
Re: Вопросы по С/С++ (СИ)
Добрый вечер)... Помогите с алгоритмом для меню.
Имеется клавиатура 4х4 подключённая к атмеге8. Информация о нажатой клавише считывается с помощью кода
Значения butt и butte изменяются от 1 до 4, соответственно код 16-ой клавиши равен 44.
Так вот, нужно сделать меню, чтобы при нажатии на клавишу с кодом "44" появлялось новое меню с возможностью ввода числа с той же клавиатуры и одновременно всё это выводилось на ЖК дисплей (на дисплей выводится информация через char lcdA[] )
После повторного нажатия на клавишу с кодом "44" это число должно сохраниться в к-нибудь переменной не как символ, а как число.
Писать код я не прошу, интересуют только следующие моменты:
1)Как сделать меню, чтобы была иерархия, и последующие нажатие на клавишу не сбивало предыдущий выбор?
Что то типо того:
2) Как при вводе числа (на самом деле данные будут не числовые, а символьные) прибавлять последующий символ слева от предыдущего?
3) Как преобразовать символьную строку в числовое значение и возможно ли в СИ такое?
Раньше в бейсике писал, проблем не возникало, а в СИ я ещё не очень разбираюсь
Имеется клавиатура 4х4 подключённая к атмеге8. Информация о нажатой клавише считывается с помощью кода
Код: Выделить всё
if ((PINB&butt) == 0x00){
key = butt*10+butte; Значения butt и butte изменяются от 1 до 4, соответственно код 16-ой клавиши равен 44.
Так вот, нужно сделать меню, чтобы при нажатии на клавишу с кодом "44" появлялось новое меню с возможностью ввода числа с той же клавиатуры и одновременно всё это выводилось на ЖК дисплей (на дисплей выводится информация через char lcdA[] )
После повторного нажатия на клавишу с кодом "44" это число должно сохраниться в к-нибудь переменной не как символ, а как число.
Писать код я не прошу, интересуют только следующие моменты:
1)Как сделать меню, чтобы была иерархия, и последующие нажатие на клавишу не сбивало предыдущий выбор?
Что то типо того:
Код: Выделить всё
-Установить Ширину - "ввод числа"
- Настройка -Установить Высоту - "ввод числа"
-Установить Длину - "ввод числа"
Меню
-Установить значение "а" - "ввод числа"
- Ввод -Установить значение "b" - "ввод числа"
-Установить значение "c" - "ввод числа"
2) Как при вводе числа (на самом деле данные будут не числовые, а символьные) прибавлять последующий символ слева от предыдущего?
3) Как преобразовать символьную строку в числовое значение и возможно ли в СИ такое?
Раньше в бейсике писал, проблем не возникало, а в СИ я ещё не очень разбираюсь
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
так в чем проблема то?алгоритм есть получается.начинайте переводить,что неясно задавайте вопросы.
есть предложение использовать switch в вашем приложении 4х4 это 4+4 бита можно в одной переменной поместить результат нажатия клавиш.
можно и как код клавиши сохранять.
если как у вас,то
примерно так можно.правда только что придумал.сделайте текст алгоритма,можно ваш код оформить.
есть предложение использовать switch в вашем приложении 4х4 это 4+4 бита можно в одной переменной поместить результат нажатия клавиш.
можно и как код клавиши сохранять.
если как у вас,то
Код: Выделить всё
unsigned char buttons(unsigned char button){
switch (button){
case 44:{//тут нужно сделать сохранение видимого введенного числа;
menu (punkt++);break}//тут меню это функция вызова строк меню по номеру punkt
case 11://обрабатываем нажатие 1
{chislo[punkt][numb_chislo++]=0x31;//тут добавляем к строке нажатую кнопку
menu (punkt);//обновляем экран
}
default :break.
}//end of switch
примерно так можно.правда только что придумал.сделайте текст алгоритма,можно ваш код оформить.
В поисках истины человек развивается.