Всех приветствую!
Дисплейчик в общем-то запустился, однако есть некоторые проблемки, с которыми прошу помочь знающих:
1) Спер функцию отрисовки символов, но есть одно "но" - выводится повернутым под 90 градусов, пробовал поменять начальные и конечные точки используемой области (area), менять "координаты", однако на экране получаю в итоге лебелерду.
2) Может есть у кого идеи, или готовый шрифт большего размера? (не хочется отрисовывать каждый символ с нуля, наверняка уже кто-то делал, или, может, вариант с масштабированием готовых шрифтов?).
Буду благодарен за помощь!
Код: Выделить всё
void write_byte(unsigned char c,unsigned char com)//0-command 1-data
{ unsigned char i;
CS_pin = 0;
if(com==0)
DC_pin = 0;
else
DC_pin = 1;
SCK_pin = 1;
for(i=0;i<8;i++)
{
if(((c>>(7-i))&1) == 1){
MOSI_pin = 1;}
else {
MOSI_pin = 0;}
SCK_pin = 0;
delay_us(1);
SCK_pin = 1;
}
CS_pin = 1;
}
void Reset()
{
RESET_pin = 0;
delay_ms(10);
RESET_pin = 1;
delay_ms(150);
}
void TFTInit()
{ unsigned int i=0;
DDRB.2 = 1;
DDRD.4 = 1;
DDRD.5 = 1;
DDRD.6 = 1;
DDRD.7 = 1;
RESET_pin = 1;
CS_pin = 1;
DC_pin = 1;
SCK_pin = 1;
MOSI_pin = 1;
Reset();
write_byte(0x01,0);
delay_ms(150);
write_byte(0x11,0);
delay_ms(100);
write_byte(0x3A,0);
write_byte(0x05,1);
write_byte(0x36,0);
write_byte(0x14,1);
write_byte(0x21,0);
write_byte(0x13,0);
write_byte(0x29,0);
}
void WriteTwoByte(unsigned char LCD_DataH,unsigned char LCD_DataL)
{
write_byte(LCD_DataH,1);
write_byte(LCD_DataL,1);
}
void OutColor(unsigned int color)
{
WriteTwoByte((color>>8),((color<<8)>>8));
}
void TFTSingleColor(unsigned int color)
{
unsigned char i,j;
for (i=0;i<WIDTH;i++)
for (j=0;j<HEIGH;j++)
OutColor(color);
}
void Area(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1)
{
write_byte(0x2a,0);
write_byte(0,1);
write_byte(y0,1);
write_byte(0,1);
write_byte(y1,1);
write_byte(0x2b,0);
write_byte(0,1);
write_byte(x0,1);
write_byte(0,1);
write_byte(x1,1);
write_byte(0x2c,0);
}
void DrawPixel(unsigned char x0, unsigned char y0, unsigned int color)
{
Area((WIDTH-x0),y0,(WIDTH-x0),y0);
OutColor(color);
}
void WriteChar8x11(unsigned char x0, unsigned char y0, unsigned char s, unsigned int color)
{
unsigned char x,y,c;
Area((19-y0)*8, x0*11, (19-y0)*8+7, x0*11+10); // Area((19-x0)*8, y0*11, (19-x0)*8+7, y0*11+10);
for(y=0;y<8;y++){
for(x=0;x<11;x++)
{
if(s>=192)
c=65;
else
c=0;
if((Font_8x11[s-32-c][y]&(1<<x))!=0)
OutColor(color);
else
OutColor(BLACK);
}
}
}
void WriteString8x11(unsigned char x0,unsigned char y0,unsigned char *s,unsigned int color)
{
int i,x,y,xx,c;
xx=19-x0;
for(i = 0;s[i]!='\0';i++)
{
Area(xx*8, y0*11, xx*8+7, y0*11+10);//откуда тут взялись константы - тоже не понятно, как их высчитывать..
for(y=0;y<8;y++)
for(x=0;x<11;x++)
{
if(s[i]>=192)
c=65;
else
c=0;
if((Font_8x11[s[i]-32-c][x]&(1<<y))!=0)
OutColor(color);
else
OutColor(BLACK);
}
if(xx==0)
{
xx=19;
y0++;
}
else
xx--;
if(y0>10)
y0=0;
}
}