C++  
Автор Сообщение

3
Сообщение C++

Добрый вечер!

Нужна помощь знатоков пг, есть робот(машинка), который имеет спереди 5 датчиков реагирующих на отражение света, задача состоит в том, чтобы при срабатывании одного из датчиков на дисплей выводилось какой датчик сработал.Я написал програмку, но на дисплей ничего не выводится Cry. Мне сказали, что мол надо писать не напрямую, а через буфер или printf, что за буфер, printf я даже не вкурсе. Буду очень благодарен, если кто-то поможет.

Вот програмка

#include <Tiny2313.h>
#asm
.equ __lcd_port=0x18
#endasm
#include <lcd.h>
#include <delay.h>
#define Dat1 PIND.0
#define Dat2 PIND.1
#define Dat3 PIND.2
#define Dat4 PIND.3
#define Dat5 PIND.4
typedef unsigned char byte;
void main(void)
{
byte command_addr;
lcd_init(16);
lcd_clear();
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTD.4=1;
while (1)
{
if (Dat1==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,0x44);
lcd_write_byte (command_addr+1,0x61);
lcd_write_byte (command_addr+2,0x74);
lcd_write_byte (command_addr+3,0x63);
lcd_write_byte (command_addr+4,0x68);
lcd_write_byte (command_addr+5,0x69);
lcd_write_byte (command_addr+6,0x6B);
lcd_write_byte (command_addr+7,0x31);
}
if (Dat2==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,0x44);
lcd_write_byte (command_addr+1,0x61);
lcd_write_byte (command_addr+2,0x74);
lcd_write_byte (command_addr+3,0x63);
lcd_write_byte (command_addr+4,0x68);
lcd_write_byte (command_addr+5,0x69);
lcd_write_byte (command_addr+6,0x6B);
lcd_write_byte (command_addr+7,0x32);
}
if (Dat3==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,0x44);
lcd_write_byte (command_addr+1,0x61);
lcd_write_byte (command_addr+2,0x74);
lcd_write_byte (command_addr+3,0x63);
lcd_write_byte (command_addr+4,0x68);
lcd_write_byte (command_addr+5,0x69);
lcd_write_byte (command_addr+6,0x6B);
lcd_write_byte (command_addr+7,0x33);
}
if (Dat4==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,0x44);
lcd_write_byte (command_addr+1,0x61);
lcd_write_byte (command_addr+2,0x74);
lcd_write_byte (command_addr+3,0x63);
lcd_write_byte (command_addr+4,0x68);
lcd_write_byte (command_addr+5,0x69);
lcd_write_byte (command_addr+6,0x6B);
lcd_write_byte (command_addr+7,0x34);
}
if (Dat5==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,0x44);
lcd_write_byte (command_addr+1,0x61);
lcd_write_byte (command_addr+2,0x74);
lcd_write_byte (command_addr+3,0x63);
lcd_write_byte (command_addr+4,0x68);
lcd_write_byte (command_addr+5,0x69);
lcd_write_byte (command_addr+6,0x6B);
lcd_write_byte (command_addr+7,0x35);
}
if (Dat1!=0&&Dat2!=0&&Dat3!=0&&Dat4!=0&&Dat5!=0)
{
lcd_clear();
}
}
}



24 дек 2012, 22:35
Профиль

0
Сообщение C++

молча минусовать - вот оно, ПГ :)

увы, но мои познания в программировании пока далеки от такого уровня...



24 дек 2012, 23:08
Профиль

0
Сообщение C++

если можно через printf до делай через него, это обычная функция вывода, в гугле найдешь её полное описание...



24 дек 2012, 23:41
Профиль

0
Сообщение C++

пытался понять правописание printf так ничего и не понял :unknw

когда написал printf ("Datchik1") на дисплее просто ничего не отображалось



24 дек 2012, 23:44
Профиль

1
Сообщение C++

http://www.cplusplus.com/reference/cstdio/printf/ вникай как правильно пользоваться :)

пример хороший там

http://www.rsdn.ru/forum/cpp/1128588.1 тут по-русски есть



24 дек 2012, 23:51
Профиль

1
Сообщение C++

printf("Vidpovidb:%f",res1); //в кавычках пишешь что хочешь вывести, %f значит тип выводимых даных, потом res1 это переменная с резульатом (после % можно задавать точность, и еще разные штуки). 



#include <stdio.h>

#define PAGES 764
#define RENT 2345.89
#define STRING "Outstanding acting"

int main(int argc, char* argv[])
{
// integer
printf("1 *%d*\n", PAGES);
printf("2 *%2d*\n", PAGES);
printf("3 *%10d*\n", PAGES);
printf("4 *%-10d*\n", PAGES);

printf("5 *%d**% d**% d**\n", 42, 42, -42);
printf("6 *%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);

// float
printf("7 *%f*\n", RENT);
printf("8 *%e*\n", RENT);
printf("9 *%4.2f*\n", RENT);
printf("10 *%3.1f*\n", RENT);
printf("11 *%10.3f*\n", RENT);
printf("12 *%10.3e*\n", RENT);
printf("13 *%+4.2e*\n", RENT);
printf("14 *%010.2f*\n", RENT);

// string
printf("15 *%2s*\n", STRING);
printf("16 *%22s*\n", STRING);
printf("17 *%22.5s*\n", STRING);
printf("18 *%-22.5s*\n", STRING);

return 0;
}


//скомпилируй и посмотри что будет, разбери каждый пример по отдельности и поймешь 100%


24 дек 2012, 23:52
Профиль



<Фомальгаут>


Сервер: Свежеватель Душ
Рейтинг поля боя: 192
2х2: 1376
0
Сообщение C++

шарю в си, но бухой в хлам

читаю и вижу закорючки

напиши потом если не разберешься



25 дек 2012, 00:00
Профиль

0
Сообщение C++

Kolibruk, спасибо за помощь, я работаю в программе CodeVisionAVR и откомпилировать то, что ты написал оно не хочет.Эта программа основывается на языке Си



25 дек 2012, 00:39
Профиль

0
Сообщение C++

я в твоем коде не вижу функций вывода на экран, я для С++ использую две функции или printf или cout, удобство cout - в том, что она "сама" "распознает" формат вывода, а в printf ты сам задаешь формат вывода, так что мне кажеться в твоей проге без разницы чем выводить это на дисплей



25 дек 2012, 02:13
Профиль



<Синестезия>


Сервер: Ревущий фьорд
0
Сообщение C++

Если C++, то попробуй что-нибудь вроде

Код:

#include <iostream>

int main(int argc, char** argv)

{

  std::cout << "Test string" << std::endl;

}

А для printf надо не забывать #include <stdio.h> подрубить.



25 дек 2012, 07:28
Профиль

0
Сообщение C++

У тебя нет ни одной функции вывода на дисплей. Ни printf, ни cout. А под буфером я думаю имелось ввиду использование либо указателей, либо некой переменной (на подобии temp) которая будет хранить временной значение. Я б начал копать в сторону временной переменной.  А если не секрет, это школа или универ и что за машинка(робот) ? Задача абстрактная или реальная?



25 дек 2012, 11:38
Профиль

0
Сообщение C++

Как можно сказать "Я написал програмку", а потом спрашивать "почему ничего не выводится"? Получается что ты ее не написал



25 дек 2012, 12:59
Профиль

0
Сообщение C++

Вывод на экран производится вот здесь

if (Dat1==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,0x44);
lcd_write_byte (command_addr+1,0x61);
lcd_write_byte (command_addr+2,0x74);
lcd_write_byte (command_addr+3,0x63);
lcd_write_byte (command_addr+4,0x68);
lcd_write_byte (command_addr+5,0x69);
lcd_write_byte (command_addr+6,0x6B);
lcd_write_byte (command_addr+7,0x31);
}

тут написано, что если на Датчик 1 поступит сигнал, то на дисплее должно высветится Датчик 1 (0x44,0x61,0x74...все эти значения взяты из знакогенератора LCD, т.е. тут написано D,a,t...)

ну или можно было написать так

if (Dat1==0)
{
command_addr=0b10000101;
lcd_write_byte (command_addr,"D");
lcd_write_byte (command_addr+1,"a");
lcd_write_byte (command_addr+2,"t");
lcd_write_byte (command_addr+3,"c");
lcd_write_byte (command_addr+4,"h");
lcd_write_byte (command_addr+5,"i");
lcd_write_byte (command_addr+6,"k");
lcd_write_byte (command_addr+7,"1");
}

т.е вывод на экран производится через команду lcd_write_byte, но чтобы оно не записывало всё в одну ячейку мы пишем lcd_write_byte (command_addr+1,(символ))

braz, университет, вот сам робот 

Мне сказали, что один тип уже с ним работал и выводил он информацию на дисплей через буфер, вот что за буфер я без понятия.Еще раз напомню, что работаю в программе CodeVisionAVR



25 дек 2012, 17:01
Профиль

1
Сообщение C++

попробуй

http://elecrom.wordpress.com/2009/07/14/codevisionavr-tip-how-to-display-formatted-numbers-on-lcd/



25 дек 2012, 17:23
Профиль
Начать новую тему Ответить на тему


Перейти:  

На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.
Рейтинг@Mail.ru