А по поводу кодировки я и говорю посмотри через itoa(). Я б сам посмотрел, но у меня всё слетело, я терабайт инфы форматнул (точнее полностью похоронил), так что CV у меня нету. И на CV не пишу. А в WinAVR из интереса посмотрю
LCD
-
sun
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Ср окт 07, 2009 10:07:02
- Откуда: Минск
- Контактная информация:
Если следющее значение будет не 0х00, то цикл пойдёт дельше, что приведёт к зависанию.
А по поводу кодировки я и говорю посмотри через itoa(). Я б сам посмотрел, но у меня всё слетело, я терабайт инфы форматнул (точнее полностью похоронил), так что CV у меня нету. И на CV не пишу. А в WinAVR из интереса посмотрю
.
А по поводу кодировки я и говорю посмотри через itoa(). Я б сам посмотрел, но у меня всё слетело, я терабайт инфы форматнул (точнее полностью похоронил), так что CV у меня нету. И на CV не пишу. А в WinAVR из интереса посмотрю
Хорошо, напишу, спасибо
Может atoi() или atol()? Они обе нуль выводят.
А по поводу кодировки я и говорю посмотри через itoa().
Может atoi() или atol()? Они обе нуль выводят.
Код: Выделить всё
char szInput []="Д";
long int li;
li = atol (szInput);
itoa(li,buffer);
lcd_PutStr(buffer);-
sun
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Ср окт 07, 2009 10:07:02
- Откуда: Минск
- Контактная информация:
atoi() - ASCII to Int
itoa() - Int to ASCII
Вот описание из stdlib (WinAvr):
/**
\brief Convert an integer to a string.
The function itoa() converts the integer value from \c val into an
ASCII representation that will be stored under \c s. The caller
is responsible for providing sufficient storage in \c s.
\note The minimal size of the buffer \c s depends on the choice of
radix. For example, if the radix is 2 (binary), you need to supply a buffer
with a minimal length of 8 * sizeof (int) + 1 characters, i.e. one
character for each bit plus one for the string terminator. Using a larger
radix will require a smaller minimal buffer size.
\warning If the buffer is too small, you risk a buffer overflow.
Conversion is done using the \c radix as base, which may be a
number between 2 (binary conversion) and up to 36. If \c radix
is greater than 10, the next digit after \c '9' will be the letter
\c 'a'.
If radix is 10 and val is negative, a minus sign will be prepended.
The itoa() function returns the pointer passed as \c s.
*/
extern char *itoa(int __val, char *__s, int __radix);
-----
тоесть твой код должен быть вроде этого:
itoa() - Int to ASCII
Вот описание из stdlib (WinAvr):
/**
\brief Convert an integer to a string.
The function itoa() converts the integer value from \c val into an
ASCII representation that will be stored under \c s. The caller
is responsible for providing sufficient storage in \c s.
\note The minimal size of the buffer \c s depends on the choice of
radix. For example, if the radix is 2 (binary), you need to supply a buffer
with a minimal length of 8 * sizeof (int) + 1 characters, i.e. one
character for each bit plus one for the string terminator. Using a larger
radix will require a smaller minimal buffer size.
\warning If the buffer is too small, you risk a buffer overflow.
Conversion is done using the \c radix as base, which may be a
number between 2 (binary conversion) and up to 36. If \c radix
is greater than 10, the next digit after \c '9' will be the letter
\c 'a'.
If radix is 10 and val is negative, a minus sign will be prepended.
The itoa() function returns the pointer passed as \c s.
*/
extern char *itoa(int __val, char *__s, int __radix);
-----
тоесть твой код должен быть вроде этого:
Код: Выделить всё
char Input []="Д";
char buffer[9];
atoi(Input, buffer, 10);
lcd_PutStr(buffer);
sun писал(а):atoi() - ASCII to Int
itoa() - Int to ASCII
тоесть твой код должен быть вроде этого:Код: Выделить всё
char Input []="Д";
char buffer[9];
atoi(Input, buffer, 10);
lcd_PutStr(buffer);
atoi ( const char * str );
Она строку преобразует в число и сохраняет его в int переменной.
Вызывается таким образом:
Код: Выделить всё
i = atoi (Input);Потом это число нужно опять в строку загнать, пишем:
Код: Выделить всё
itoa(i, buffer);Затем выводим эту строку на дисплей:
Код: Выделить всё
lcd_PutStr(buffer);На дисплее 0 и при atol(), и при atoi().
BCluster, 2.04.4a
Этот код не будет работать, itoa в качестве источника не воспринимает символьную переменную, только целочисленную.
Можно вот так попробовать:
UPD
Попробовал ещё так:
В обоих случаях выводит -10 на дисплей. Выходит, что atoi() не может получить код символа
Можно вот так попробовать:
Код: Выделить всё
char szInput []="Д";
int li;
int le;
li = atoi (szInput);
le=li-10;
itoa(le,buffer);
lcd_PutStr(buffer);
UPD
Попробовал ещё так:
Код: Выделить всё
li = atoi ("Д");
le=li-10;
itoa(le,buffer);
lcd_PutStr(buffer);В обоих случаях выводит -10 на дисплей. Выходит, что atoi() не может получить код символа
-
sun
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Ср окт 07, 2009 10:07:02
- Откуда: Минск
- Контактная информация:
Вот заливаю, с русским. У меня пошло нормально.
для CV теперь функции lcd_PutChar и lcd_PutInverseChar придётся чуть переделать на прямую работу с массивом.
Сорри, нету фотика, а телефон снимает криво, так что буквы не разобрать - выкладывать это не буду.
Вот этот кусок кода отработал на ура (+ полностью щрифт выводил на экран):
для CV теперь функции lcd_PutChar и lcd_PutInverseChar придётся чуть переделать на прямую работу с массивом.
Сорри, нету фотика, а телефон снимает криво, так что буквы не разобрать - выкладывать это не буду.
Вот этот кусок кода отработал на ура (+ полностью щрифт выводил на экран):
Код: Выделить всё
char buffer[20];
sprintf(buffer, "Uпитания:%d.%03uV ", (EVcc / 1000), (EVcc - ((EVcc / 1000) * 1000)));
lcd_GoToXY(0, 2);
lcd_PutStr(buffer);
sprintf(buffer, "Uаккумулятора:%d.%03uV ", (AVcc / 1000), (AVcc - ((AVcc / 1000) * 1000)));
lcd_GoToXY(0, 3);
lcd_PutStr(buffer);
if (EVcc != AVcc)
{
sprintf(buffer, "Ток заряда:%dma ", Ia);
lcd_GoToXY(0, 4);
lcd_PutStr(buffer);
}
else
{
lcd_GoToXY(0, 4);
for (char i = 0; i < 19; i++)
buffer[i] = 0x20;
buffer[19] = (char)0x00;
lcd_PutStr(buffer);
}
if (((AVcc < 3950) && (!(PORTB & 0x02))) || ((AVcc < 4200) && (PORTB & 0x02)))
{
lcd_GoToXY(0, 5);
if (EVcc != AVcc)
sprintf(buffer, "Заряд...");
else sprintf(buffer, "Собственное питание");
lcd_PutStr(buffer);
PORTB |= 0x02;
}
else
{
lcd_GoToXY(0, 5);
for (char i = 0; i < 19; i++)
buffer[i] = 0x20;
buffer[19] = (char)0x00;
lcd_PutStr(buffer);
PORTB &= ~0x02;
}Re: LCD
Здравствуйте! Есть дисплей от Siemens C75.У кого есть распиновка этого дисплея? А и ещё:как подключить этот дисплей вместо WH1601 и возможно ли такое подключение? Заранее спасибо.
Re: LCD
Понятно
.
Спасибо SubDia
Будем искать WH1601.
Спасибо SubDia
Будем искать WH1601.
-
Racer[RUS]
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Пт апр 15, 2011 21:18:24
- Откуда: Тула
Re: LCD
Здравствуйте! Дисплей siemens a52. Либа написана c использованием информации с этого ресурса http://hobby.zigbee.ru/ra/ind/SiemensC55. Имеется следующая проблема: тестовая прога на меге16 выводит на экран надпись - экран пустой, инициализация как на указанном сайте. Если после команд инициализации прописать еще одну команду: вкл. дисплея с расширенным набором команда( 0x21 ), то дисплей становится "черным", надпись выводится "белая" (пиксели погашены), затем "черные" пиксели медленно "растворяются" и дисплей становится "белым". При расширенном наборе команд команды из стандартного набора, а именно установка адреса по х и у, являются другими командами, одна из них установка контрастности по моему. Я тогда в инициализации, подумав, что дело может быть в контрастности, согласно дш на контроллер в дисплее, сделал максимальную контрастность - дисплей "белый". В чем может быть проблема? Испорченный дисплей? Дисплей новый в рамке с кнопками. При необходимости могу выложить код инициализации на си.
