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

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

На Сях:

Отправлено СТАС 23 апреля 2008 г. 12:46
В ответ на: Добрые люди! киньте какую нибудь ссылку на проект атмеги и графического инд...{+} отправлено <font color=gray>RKS</font> 23 апреля 2008 г. 10:50


dg16080lib.c:

#include <mega163.h>
#include <delay.h>
#include "DG16080lib.h"

char PixelsBerByte;
int LineWidth,Lines;

static const char FontLookup [155][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x7F, 0x1C, 0x00, 0x49, 0x08 }, // ir //>
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x00, 0x06, 0x09, 0x09, 0x06 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
//Русские
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x31 }, // Б
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x7F, 0x01, 0x01, 0x01, 0x03 }, // Г
{ 0x60, 0x3E, 0x21, 0x21, 0x7F }, // Д
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x63, 0x14, 0x7F, 0x14, 0x63 }, // Ж
{ 0x22, 0x49, 0x49, 0x49, 0x36 }, // З
{ 0x7F, 0x10, 0x08, 0x04, 0x7F }, // И
{ 0x7F, 0x10, 0x09, 0x04, 0x7F }, // И
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x7C, 0x02, 0x01, 0x01, 0x7F }, // Л
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x7F, 0x01, 0x01, 0x01, 0x7F }, // П
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x07, 0x48, 0x48, 0x48, 0x3F }, // У
{ 0x1C, 0x22, 0x7F, 0x22, 0x1C }, // Ф
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x3F, 0x20, 0x20, 0x3F, 0x60 }, // Ц
{ 0x07, 0x08, 0x08, 0x08, 0x7F }, // Ч
{ 0x7F, 0x40, 0x7F, 0x40, 0x7F }, // Ш
{ 0x3F, 0x20, 0x3F, 0x20, 0x7F }, // Щ
{ 0x01, 0x7F, 0x48, 0x48, 0x30 }, // Ъ
{ 0x7F, 0x48, 0x48, 0x30, 0x7F }, // Ы
{ 0x7F, 0x48, 0x48, 0x48, 0x30 }, // Ь
{ 0x22, 0x49, 0x49, 0x49, 0x3E }, // Э
{ 0x7F, 0x08, 0x3E, 0x41, 0x3E }, // Ю
{ 0x46, 0x29, 0x19, 0x09, 0x7F }, // Я
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x78, 0x54, 0x54, 0x54, 0x20 }, // b
{ 0x7C, 0x54, 0x54, 0x54, 0x28 }, // в
{ 0x7C, 0x04, 0x04, 0x04, 0x00 }, // г
{ 0x60, 0x38, 0x24, 0x38, 0x60 }, // д
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x6C, 0x10, 0x7C, 0x10, 0x6C }, // ж
{ 0x28, 0x44, 0x54, 0x54, 0x28 }, // з
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // и
{ 0x3C, 0x40, 0x42, 0x20, 0x7C }, // й
{ 0x7C, 0x10, 0x10, 0x28, 0x44 }, // к
{ 0x60, 0x10, 0x08, 0x04, 0x7C }, // л
{ 0x7C, 0x08, 0x10, 0x08, 0x7C }, // м
{ 0x7C, 0x10, 0x10, 0x10, 0x7C }, // н
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x04, 0x04, 0x04, 0x7C }, // п
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x04, 0x04, 0x7C, 0x04, 0x04 }, // т
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x18, 0x24, 0x7C, 0x24, 0x18 }, // ф
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x3C, 0x20, 0x20, 0x3C, 0x60 }, // ц
{ 0x0C, 0x10, 0x10, 0x10, 0x7C }, // ч
{ 0x7C, 0x40, 0x7C, 0x40, 0x7C }, // ш
{ 0x3C, 0x20, 0x3C, 0x20, 0x7C }, // щ
{ 0x04, 0x7C, 0x48, 0x48, 0x30 }, // ъ
{ 0x7C, 0x48, 0x30, 0x00, 0x7C }, // ы
{ 0x7C, 0x48, 0x48, 0x48, 0x30 }, // ь
{ 0x28, 0x44, 0x54, 0x54, 0x38 }, // э
{ 0x7C, 0x10, 0x38, 0x44, 0x38 }, // ю
{ 0x58, 0x24, 0x24, 0x24, 0x7C } // я
};

void WriteByte(char cmd,char Byte)
{
DDRLcd=0x00;
PORTLcd=0;
SetRW; SetRS;
#asm("nop"); #asm("nop");
SetE;
#asm("nop"); #asm("nop"); #asm("nop");
while(PINLcd&0x80); //Проверим BUSY
DDRLcd=0xFF;
if(cmd) SetRS; else ClrRS;
ClrRW;
#asm("nop"); #asm("nop");
SetE;
PORTLcd=Byte;
#asm("nop"); #asm("nop"); #asm("nop");
ClrE;
SetRW;
#asm("nop");
}
void WriteCommand(char cmd,char Byte)
{
WriteByte(1,cmd);
WriteByte(0,Byte);
}
void InitLcd(char bytes,char lines)
{
WriteCommand(MODE,0x22); //включение дисплюя в графический режим
WriteCommand(PIXPERBYTE,7); //количество пикселёфф на байт
WriteCommand(BYTESPERLINE,bytes-1); //байт по горизонтали
WriteCommand(LINESCOUNT,lines); // строк
WriteCommand(DISPSTARTL,0); //мл. байт display start
WriteCommand(DISPSTARTH,0); //ст. байт display start
WriteCommand(CURSORL,0); //мл. байт курсора
WriteCommand(CURSORH,0); //ст. байт курсора
PixelsBerByte=8; LineWidth=bytes*8U; Lines=lines;
}
void ClrScr(void)
{
char i,j;
for(i=0;i<20;i++)
for(j=0;j<80;j++)
WriteCommand(WRITEBYTE,0);
}
void PutPixel(char x,char y,char color)
{
unsigned int cursor;
if(x>=LineWidth) return;
if(y>=Lines) return;
cursor=y*LineWidth/8+x/8;
WriteCommand(CURSORL,(char)cursor); //мл. байт курсора
WriteCommand(CURSORH,(char)(cursor>>8)); //ст. байт курсора
if(color) WriteCommand(SETBIT,x%8); else WriteCommand(CLRBIT,x%8);
}
void Line ( int x1, int y1, int x2, int y2, char LcdPixelMode)
{
int dx, dy, stepx, stepy, fraction;
// x1--;
// x2--;
// y1--;
// y2--;
dy = y2 - y1;
dx = x2 - x1;

if ( dy < 0 )
{
dy = -dy;
stepy = -1;
}
else
{
stepy = 1;
}

if ( dx < 0 )
{
dx = -dx;
stepx = -1;
}
else
{
stepx = 1;
}

dx <<= 1;
dy <<= 1;

PutPixel( x1, y1, LcdPixelMode );

if ( dx > dy )
{
fraction = dy - (dx >> 1);
while ( x1 != x2 )
{
if ( fraction >= 0 )
{
y1 += stepy;
fraction -= dx;
}
x1 += stepx;
fraction += dy;
PutPixel( x1, y1, LcdPixelMode );
}
}
else
{
fraction = dx - (dy >> 1);
while ( y1 != y2 )
{
if ( fraction >= 0 )
{
x1 += stepx;
fraction -= dy;
}
y1 += stepy;
fraction += dx;
PutPixel( x1, y1, LcdPixelMode );
}
}

}
void PutChr ( char ch,char X, char Y, char LcdFont )
{
char i,j, c,Mask;
char b1, b2;
int tmpIdx;

if ( (ch < 0x20) || (ch > 0x7b) )
{
// Convert to a printable character.
ch -= 69;
}

if((LcdFont == 1)||(LcdFont==2))
{
Mask=1;
for ( j = 0; j < 8; j++ )
{
for ( i = 0; i < 5; i++ )
{
if(FontLookup[ch - 32][i]&Mask) PutPixel(X+i,Y+j,LcdFont==1); else PutPixel(X+i,Y+j,LcdFont==2);
}
PutPixel(X+i,Y+j,LcdFont==2);
Mask<<=1;
}
}
if((LcdFont == 3)||(LcdFont == 4))
{
Mask=1;
for ( j = 0; j < 8; j++ )
{
for ( i = 0; i < 5; i++ )
{
if(FontLookup[ch - 32][i]&Mask)
{
PutPixel(X+(i<<1),Y+(j<<1),LcdFont==3); PutPixel(X+(i<<1)+1,Y+(j<<1),LcdFont==3);
PutPixel(X+(i<<1),Y+(j<<1)+1,LcdFont==3); PutPixel(X+(i<<1)+1,Y+(j<<1)+1,LcdFont==3);
}
else
{
PutPixel(X+(i<<1),Y+(j<<1),LcdFont==4); PutPixel(X+(i<<1)+1,Y+(j<<1),LcdFont==4);
PutPixel(X+(i<<1),Y+(j<<1)+1,LcdFont==4); PutPixel(X+(i<<1)+1,Y+(j<<1)+1,LcdFont==4);
}
}
PutPixel(X+(i<<1),Y+(j<<1),LcdFont==4); PutPixel(X+(i<<1)+1,Y+(j<<1),LcdFont==4);
PutPixel(X+(i<<1),Y+(j<<1)+1,LcdFont==4); PutPixel(X+(i<<1)+1,Y+(j<<1)+1,LcdFont==4);
Mask<<=1;
}
}
}
flash char FontWidth[]={0,6,6,12,12};
void LcdStr ( char *str,char X, char Y,char LcdFont )
{
char i;
for(i=0;str[i];i++)
{
PutChr(str[i],X,Y,LcdFont);
X+=FontWidth[LcdFont];
}
}
void LcdStrFlash ( char flash *str,char X, char Y,char LcdFont )
{
char i;
for(i=0;str[i];i++)
{
PutChr(str[i],X,Y,LcdFont);
X+=FontWidth[LcdFont];
}
}


DG16080lib.h:

#define DDRLcd DDRC
#define PORTLcd PORTC
#define PINLcd PINC
#define SetRS PORTA|=(1<<7)
#define ClrRS PORTA&=~(1<<7)
#define SetRW PORTA|=(1<<6)
#define ClrRW PORTA&=~(1<<6)
#define SetE PORTA|=(1<<5)
#define ClrE PORTA&=~(1<<5)

#define MODE 0x00 //включение дисплюя в графический режим
#define PIXPERBYTE 0x01
#define BYTESPERLINE 0x02
#define LINESCOUNT 0x03
#define DISPSTARTL 0x08
#define DISPSTARTH 0x09
#define CURSORL 0x0A
#define CURSORH 0x0B
#define CLRBIT 0x0E
#define SETBIT 0x0F
#define WRITEBYTE 0x0C


void WriteByte(char cmd,char Byte);
void WriteCommand(char cmd,char Byte);
void InitLcd(char bytes,char lines);
void ClrScr(void);
void PutPixel(char x,char y,char color);
void Line ( int x1, int y1, int x2, int y2, char LcdPixelMode);
void PutChr ( char ch,char X, char Y, char LcdFont );
void LcdStr ( char *dataPtr,char X, char Y,char LcdFont );
void LcdStrFlash ( char flash *str,char X, char Y,char LcdFont );



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

Ответы


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

Сообщение:

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

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

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

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