Спойлер
char r, g, b;CS_LCD_RESET;
b=*pBitmap++;
g=*pBitmap++;
r=*pBitmap++;
nlcd_SendByte(DATA_LCD_MODE, r);
nlcd_SendByte(DATA_LCD_MODE, b);
nlcd_SendByte(DATA_LCD_MODE, g);
CS_LCD_SET;
ну вообще я пишу и на ARM. самый ненадежный элемент в радиоэлектронике - это пайка. выбираться такой режим должен по идее командой, как в STE2007. или он определяет что колличество синхро-импульсов в посылке не четное и автоматом переключает режим.HHIMERA писал(а): Тип интерфейса, как правило, выбирается пинами конфигурации на кристалле и больше никак... Учитывая его размеры ................
АВР для графики сама по себе "тормознуто-унылое создание", а для 9-битного SPI - вообще УГ...![]()
И всё это только ради экономии... одной ноги АВР???![]()
Покажите, где такое написано... ))))drakon писал(а): выбираться такой режим должен по идее командой, как в STE2007. или он определяет что колличество синхро-импульсов в посылке не четное и автоматом переключает режим.
Ну так что бы помочь, нужно больше информации. Например, о формате картинки. А так гадание на кофейной гуще получается.nikityan писал(а):Помогите пожалуйста)
Код: Выделить всё
void nlcd_Bitmap(unsigned char start_x, unsigned char start_y, const char __flash *pBitmap)
{
int i;
unsigned char h_size, v_size;
h_size=*pBitmap++;
v_size=*pBitmap;
pBitmap+=4;
nlcd_SendByte(CMD_LCD_MODE,0xDA);
// Указать размеры рисунка в соответствии с этими пределами
nlcd_SendByte(CMD_LCD_MODE,PASET); // Команда адреса страницы RAM
nlcd_SendByte(DATA_LCD_MODE,start_x); // Старт
nlcd_SendByte(DATA_LCD_MODE,start_x+h_size-1); // Конец
nlcd_SendByte(CMD_LCD_MODE,CASET); // Команда адреса колонки RAM
nlcd_SendByte(DATA_LCD_MODE,start_y); // Старт
nlcd_SendByte(DATA_LCD_MODE,start_y+v_size-1); // Конец
nlcd_SendByte(CMD_LCD_MODE,RAMWR); // Пишем в RAM
i=h_size*v_size;
i+=i>>1;
while (i--)
{
CS_LCD_RESET;
nlcd_SendByte(DATA_LCD_MODE, *pBitmap++);
CS_LCD_SET;
}
nlcd_SendByte(CMD_LCD_MODE,NOP);
}Код: Выделить всё
nlcd_Bitmap (0, 0, 132 , 132, bitmap_data);Код: Выделить всё
nlcd_Bitmap (0, 0, bitmap_data);
Код: Выделить всё
void lcd_putchar(byte x, byte y, byte ch, int16 txt_color)
{
byte data_ch, mask;
lcd_cmd(0x05, 0x0030); //Entry mode: hor++
lcd_set_window(x, y, x + 5 - 1, y + 8 - 1);
if ( (ch >= 0x20) && (ch <= 0x7F) )
{
ch -= 32;
}
else if ( ch >= 0xC0 )
{
ch -= 96;
}
else
{
ch = 95;
}
for(byte i = 0; i < 5; i++)
{
data_ch = pgm_read_byte(&(smallFont[ch][i]));
mask = 0x01;
for(byte j = 0; j < 8; j++)
{
if(data_ch & mask)
{
lcd_pixel(x + i, y + j, txt_color);
}
mask <<= 1;
}
}
return;
}Вот, разбирайся.Stalkerk750 писал(а):Всем привет!
Помогите мне, пожалуйста, с кодом вывода символа на LCD LPH88.
Функция работает только не так как нужно. При выводе текста все нормально, а если выводить, например цифры в цикле то последующее число налаживается на первое и получается каша. Что мне сделать, чтобы каждое число выводилось отдельно?
Код: Выделить всё
if(data_ch & mask)
{
lcd_pixel(x + i, y + j, txt_color);
}
else
{
lcd_cursor(x + i + 1, y + j);
}
Спасибо за пример, только он мне к сожалению не помог.(Ну так... вместо вывода пикселя фона инкрементируйте позицию пикселя...
Как-то так...
Код: Выделить всё
else
{
lcd_pixel(x + i, y + j, bg_color);
}Код: Выделить всё
else
{
lcd_pixel(x + i, y + j, bg_color);
}