Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ай, нате ешшо графическую библиотеку, по доброте душевной. ТОлько компилятор avrgcc, не обессудьте :) в 2004 году все работало :) на ура

Отправлено RED_DRAGON 21 декабря 2009, г. 15:01
В ответ на: Уважаемые, рабоим проектом CVAVR для T6963C 128*128, пробовал несколько разных портировать графика не корректна отправлено пользователем diglook 21 декабря 2009, г. 13:56

// *********************************************************** //
// //
// (c) Yevgeniy Sorokin, Russia, Yekaterinbourg, mar 2004 //
// E-mail: escorrespondence@mail.ru, Cell phone: +ччччччччччч //
// //
// AVR graphical libroary for T6963 v01 //
// AVR-GCC v3.0 compiler //
// //
// *********************************************************** //

#include <avr/pgmspace.h>

#include "t6963.h"
#include "graph.h"

//
// Функция инициализации графического режима
//

void graphInit()
{
T6963Init(LCD_GRAPH_ON);
}

//
// Функция заполнения дисплея
//

void graphFillScreen()
{
unsigned short i;

T6963WriteData(LCD_GRAPH_HOME);
T6963WriteCommand(LCD_ADR_PTR_SET);
T6963WriteCommand(0xB0);
for(i = 0; i < (LCD_GRAPH_AREA * LCD_Y_PIXELS + 8); i++)
T6963WriteData(0xFF);
T6963WriteCommand(0xB2);
}

//
// Функция очистки экрана
//

void graphClearScreen()
{
unsigned short i;

T6963WriteData(LCD_GRAPH_HOME);
T6963WriteCommand(LCD_ADR_PTR_SET);
T6963WriteCommand(0xB0);
for(i = 0;i < (LCD_GRAPH_AREA * LCD_Y_PIXELS + 8);i++)
T6963WriteData(0x00);
T6963WriteCommand(0xB2);

T6963WriteData(LCD_GRAPH_HOME);
T6963WriteCommand(LCD_ADR_PTR_SET);
T6963WriteCommand(0xB0);
for(i = 0;i < (LCD_GRAPH_AREA * LCD_Y_PIXELS + 8);i++)
T6963WriteData(0x00);
T6963WriteCommand(0xB2);
}

//
// Функция вывода пикселя....
//

void graphSetPixel(unsigned char xpos, unsigned char ypos, unsigned char color)
{
unsigned int adress;
unsigned char tmp, pixel;

if(xpos >= LCD_X_PIXELS) return;
if(ypos >= LCD_Y_PIXELS) return;

tmp = (unsigned char) xpos % 8;

switch(tmp)
{
case 0: tmp = 7; break;
case 1: tmp = 6; break;
case 2: tmp = 5; break;
case 3: tmp = 4; break;
case 4: tmp = 3; break;
case 5: tmp = 2; break;
case 6: tmp = 1; break;
case 7: tmp = 0; break;
default: break;
}
if(color == COLOR_BLACK)pixel = 0xf8 | tmp;
if(color == COLOR_WHITE)pixel = 0xf0 | tmp;

adress = (0x10 * ypos) + xpos / 0x08; // div replace by >>
T6963WriteData((char)(adress & 0xFF));
T6963WriteData((char)((adress >> 8) & 0xFF));
T6963WriteCommand(0x24);

T6963WriteCommand(pixel);
}

//
// Функция отрисовки отрезка прямой
//

void graphLine(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char color)
{
int x, y, count, xs, ys, xm, ym;

x = (int)x1;
y = (int)y1;
xs = (int)x2 - (int)x1;
ys = (int)y2 - (int)y1;
if(xs < 0)xm = -1;
else if(xs > 0)xm = 1; else xm = 0;
if(ys < 0)ym = -1;
else if(ys > 0)ym = 1; else ym = 0;
if(xs < 0)xs = -xs;
if(ys < 0)ys = -ys;
graphSetPixel((unsigned char) x, (unsigned char) y, color);
if(xs > ys) // < 45 Grad
{
count = -(xs / 2);
while(x != x2 )
{
count = count + ys;
x = x + xm;
if(count > 0)
{
y = y + ym;
count = count - xs;
}
graphSetPixel((unsigned char) x, (unsigned char) y, color);
}
}
else // >=45 Grad
{
count = -(ys / 2);
while(y != y2)
{
count = count + xs;
y = y + ym;
if(count > 0)
{
x = x + xm;
count = count - ys;
}
graphSetPixel((unsigned char) x, (unsigned char) y, color);
}
}
}

//
// Функция отрисовки примоугольника
// !!! переделать с быстрыми вариантами верт и гор линий!!!

void graphRectangle(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char color)
{
graphLine(x1, y1, x2, y1, color);
graphLine(x2, y1, x2, y2, color);
graphLine(x2, y2, x1, y2, color);
graphLine(x1, y2, x1, y1, color);
}

//
// Функция отрисовки незаполненого треугольника
//

void graphEmptyTriangle(unsigned char x1, unsigned char y1, unsigned char x2,unsigned char y2,unsigned char x3, unsigned char y3, unsigned char color)
{
graphLine(x1, y1, x2, y2, color);
graphLine(x2, y2, x3, y3, color);
graphLine(x3, y3, x1, y1, color);
}

//
// Функция отрисовки треугольника
//

void graphTriangle(unsigned char x1, unsigned char y1, unsigned char x2,unsigned char y2,unsigned char x3, unsigned char y3, unsigned char color)
{
}

//
// Функция отрисовки окружности
//


void graphCircle(unsigned char Xc, unsigned char Yc,
unsigned char rad, unsigned char color)
{
int x,y,d;

d = 3 - (rad << 1);
x = 0;
y = rad;

while(x <= y)
{
graphSetPixel(Xc + x, Yc + y, color);
graphSetPixel(Xc + x, Yc - y, color);
graphSetPixel(Xc - x, Yc + y, color);
graphSetPixel(Xc - x, Yc - y, color);
graphSetPixel(Xc + y, Yc + x, color);
graphSetPixel(Xc + y, Yc - x, color);
graphSetPixel(Xc - y, Yc + x, color);
graphSetPixel(Xc - y, Yc - x, color);

if(d < 0)d = d + (x << 2) + 6;
else
{
d = d + ((x - y) << 2) + 10;
y--;
}
x++;
}

}

//
// Функция отрисовки Эллипса
//

void graphEllipse(unsigned char x, unsigned char y, unsigned char xradius, unsigned char yradius)
{
}

//
// Функция отрисовки Закрашеного Прямоугольника
//

void graphBox(unsigned char xpos, unsigned char ypos, unsigned char width,
unsigned char height, unsigned char color)
{
unsigned char x = xpos, y = ypos, x1 = x + width, y1 = y + height;
unsigned char i = y;

while(i < y1)
{
graphLine(x,i,x1,i,color);
i++;
}
}

//
// Функция вывода битовой карты на экран
//

void graphLoadBitmap(unsigned char *bitmap,unsigned char xpos,unsigned char ypos,unsigned char width,unsigned char height)
{
unsigned char i, j, k, yp, xp;
unsigned char by,mask;
unsigned char *ptr;

ptr = (unsigned char *)bitmap;

yp = ypos;

for(i = 0;i < height;i++)
{
xp = xpos;
for(j = 0; j < (width / 8); j++)
{
by = (unsigned char *)PRG_RDB(ptr);
mask = 0x80;
for(k = 0;k < 8;k++)
{
if(by&mask)graphSetPixel(xp,yp,COLOR_BLACK);

// De-comment next string for full bitmap processing mode
else graphSetPixel(xp,yp,COLOR_WHITE);
xp++;
mask >>= 1;
}
ptr++;
}
yp++;
}
}

//
// Функция вывода символа на экран
//

void graphWriteChar(TFont *font,unsigned char symbol,unsigned char xpos,unsigned char ypos)
{
unsigned char i, j, k, yp, xp;
unsigned char by,mask;
unsigned char *ptr;

ptr = (unsigned char *)font->CharSet + symbol * font->CharSetOffset ;

yp = ypos;

for(i = 0;i < font->Height;i++)
{

xp = xpos;
for(j = 0; j < (font->Width / 8); j++)
{
by = (unsigned char *)PRG_RDB(ptr);
mask = 0x80;
for(k = 0;k < 8;k++)
{
if(by&mask)graphSetPixel(xp,yp,font->Color);
else
{
if(font->Color)graphSetPixel(xp,yp,COLOR_WHITE);
else graphSetPixel(xp,yp,COLOR_BLACK);
}
xp++;
mask >>= 1;
}
ptr++;
}
yp++;
}
}

//
// Функция вывода строки с заданной позиции, заданным фонтом
//

void graphPuts(TFont *font, unsigned char *str, unsigned char xpos,unsigned char ypos)
{
unsigned char x = xpos, y = ypos;

while(PRG_RDB(str) != 0xFF)
{
graphWriteChar(font,PRG_RDB(str++),x,y);
x += font->Width;
};
}


Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сложите 2 и 3:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru