Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.09.2011, 21:24
|
|
Прописка
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Сообщение от vlad145
|
// Нарисовать прямоугольник с началом по х=10:у=14 с размером по х=32:у=16 цветом BLUE
void fill_area( char x1, char x2, char y1, char y2,int color)
{
int i;
char w,h;
lcd_reg(0x05);lcd_dat(0x0030);
lcd_reg(0x16);lcd_dat8(y2,y1);
lcd_reg(0x17);lcd_dat8(x2,x1);
lcd_reg(0x21);lcd_dat8(x1,y1);
lcd_reg(0x22);lcd_write8(0x76);
//Пишем точку
w=x2-x1+1;h=y2-y1+1;
for (i=0;i‹w*h;i++)
{
lcd_write(color);
};
}
При использовании первого, 0 или 1 без разницы, квадрат чистый. При использовании второго, заполнение на полностью. Причем, если квадрат маленький, примерно 15х15, то нормально. Если размер больше, то только часть. Где может быть ошибка в коде?
|
Судя по всему у вас i - 8-битное целое, поэтому i = w * h не может превышать 255... Попробуйте объявить его 16-битным.
|
|
|
|
02.09.2011, 21:48
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Курган
Сообщений: 161
Сказал спасибо: 31
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Я ещё не совсем разобрался с данным кодом, адаптировал из WINAVR в CVAVR. Вот все процедуры. Удалось переделать(может и не совсем правильно) почти все, кроме этих двух.
|
|
|
|
02.09.2011, 22:54
|
|
Прописка
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
попробуй в fill_area объявление переменной i:
int i;
заменить на:
uint16_t i;
|
|
|
|
02.09.2011, 23:02
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Курган
Сообщений: 161
Сказал спасибо: 31
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Сообщение от dadigor
|
попробуй в fill_area объявление переменной i:
int i;
заменить на:
uint16_t i;
|
Сразу выдаёт ошибки:
Error: .... undefined symbol 'uint16_t'
Error: .... must declare first in block
|
|
|
|
02.09.2011, 23:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Сообщение от dadigor
|
попробуй в fill_area объявление переменной i:
int i;
заменить на:
uint16_t i;
|
В CVAVR uint16_t i вроде не катит а vlad145 под него надо
|
|
|
|
02.09.2011, 23:14
|
|
Прописка
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
хм, ступил я... вообще-то int обычно и так 16-битное число. Возможно произведение w*h у тебя приводится к char. Тогда попробуй объявить w и h 16-битными целыми:
int w, h;
или сделать вот так:
// Нарисовать прямоугольник с началом по х=10:у=14 с размером по х=32:у=16 цветом BLUE
void fill_area( char x1, char x2, char y1, char y2,int color)
{
int i, v;
lcd_reg(0x05);lcd_dat(0x0030);
lcd_reg(0x16);lcd_dat8(y2,y1);
lcd_reg(0x17);lcd_dat8(x2,x1);
lcd_reg(0x21);lcd_dat8(x1,y1);
lcd_reg(0x22);lcd_write8(0x76);
//Пишем точку
v = (x2-x1+1) * (y2-y1+1);
for (i = 0; i ‹ v; i++)
{
lcd_write(color);
};
}
Последний раз редактировалось dadigor; 02.09.2011 в 23:45.
|
|
|
Сказали "Спасибо" dadigor
|
|
|
03.09.2011, 05:47
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Курган
Сообщений: 161
Сказал спасибо: 31
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Сообщение от dadigor
|
хм, ступил я... вообще-то int обычно и так 16-битное число. Возможно произведение w*h у тебя приводится к char. Тогда попробуй объявить w и h 16-битными целыми:
int w, h;
или сделать вот так:
// Нарисовать прямоугольник с началом по х=10:у=14 с размером по х=32:у=16 цветом BLUE
void fill_area( char x1, char x2, char y1, char y2,int color)
{
int i, v;
lcd_reg(0x05);lcd_dat(0x0030);
lcd_reg(0x16);lcd_dat8(y2,y1);
lcd_reg(0x17);lcd_dat8(x2,x1);
lcd_reg(0x21);lcd_dat8(x1,y1);
lcd_reg(0x22);lcd_write8(0x76);
//Пишем точку
v = (x2-x1+1) * (y2-y1+1);
for (i = 0; i ‹ v; i++)
{
lcd_write(color);
};
}
|
Проект компилируется но результат тот же. В предупреждениях пишет следующее:
Warning: .... overflow is possible in 8 bit addition, casting to 'int' may be required
Warning: .... overflow is possible in 8 bit multiplication, casting to 'int' may be required
|
|
|
|
03.09.2011, 06:54
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Курган
Сообщений: 161
Сказал спасибо: 31
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Странно как то. Просмотрел кучу разных проектов под данные дисплеи и такое впечатление, что в 16bit под них пишу в чем угодно, только не в CVAVR.
|
|
|
|
04.09.2011, 10:28
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Курган
Сообщений: 161
Сказал спасибо: 31
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
Что, никто не писал в CVAVR для отображения 16 битного цвета?
|
|
|
|
04.09.2011, 23:35
|
|
Прописка
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
|
Re: Дисплеи от сотовых (схемы подключения, код, datasheet)
overflow is possible in 8 bit addition, overflow is possible in 8 bit multiplication
Я бы попробовал еще char x1, char x2, char y1, char y2 заменить на int x1 и т.п....
|
|
|
Сказали "Спасибо" dadigor
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:23.
|
|