📄 epson.c
字号:
#include "EPSON.h"
#include "Fontlar.h"
#include "board.h"
#define fArial8 1
#define fArial11 0
#define SCREEN_WIDTH 132
#define SCREEN_HEIGHT 132
#define SCREEN_LEFT 1
#define SCREEN_TOP 1
#define SCREEN_RIGHT (SCREEN_WIDTH - 2)
#define SCREEN_BOTTOM (SCREEN_HEIGHT -2)
#define ICON_SIZE 64
#define BLACK RGB(0x00, 0x00, 0x00) // f黵 8 Bit Farben R,G,B 3,3,2 Bits
#define WHITE RGB(0xFF, 0xFF, 0xFF) // f黵 16 Bit Farben R,G,B 5,6,5 Bits
#define RED RGB(0xFF, 0x00, 0x00)
#define GREEN RGB(0x00, 0xFF, 0x00)
#define BLUE RGB(0x00, 0x00, 0xFF)
#define YELLOW RGB(0xFF, 0xFF, 0x00)
#define MAGENTA RGB(0xFF, 0x00, 0xFF)
#define CYAN RGB(0x00, 0xFF, 0xFF)
#define GRAY RGB(0x80, 0x80, 0x40)
#define SILVER RGB(0xA0, 0xA0, 0x80)
#define GOLD RGB(0xA0, 0xA0, 0x40)
#define RGB(r,g,b) ((r & 0xE0) | ((g & 0xE0) >> 3) | (b >> 6))
#define NONE RGB(0x00, 0x20, 0x00)
#define SCREEN_COLOR WHITE // sollte ge鋘dert werden f黵 andere Hintergrundfarbe
#define COLOR_TABLE_BITS 2 // 2^2 = 4 Farben in Farbtabelle, wichtig f黵 Fonts
#define FONT_HEADER_SIZE 7 // Header gr鲞e eines Fonts
// Epson S1D15G10 Controller Commands
#define LCD_CMD_NOP_EPS 0x25
#define LCD_CMD_PWRCTRL_EPS 0x20
#define LCD_CMD_BSTRON_EPS 0xD1
#define LCD_CMD_DISCTL_EPS 0xCA
#define LCD_CMD_COMSCN_EPS 0xBB
#define LCD_CMD_SLEEPIN_EPS 0x95
#define LCD_CMD_SLEEPOUT_EPS 0x94
#define LCD_CMD_DISNOR_EPS 0xA6
#define LCD_CMD_INVON_EPS 0xA7
#define LCD_CMD_VOLCTR_EPS 0x81
#define LCD_CMD_DISPON_EPS 0xAF
#define LCD_CMD_DISPOFF_EPS 0xAE
#define LCD_CMD_CASET_EPS 0x15
#define LCD_CMD_PASET_EPS 0x75
#define LCD_CMD_RAMWR_EPS 0x5C
#define LCD_CMD_RGBSET8_EPS 0xCE
#define LCD_CMD_DATCTL_EPS 0xBC
#define MEM_VW_EPS 2
#define PTLIN 0xa8
unsigned char fonts1;
struct _font{
unsigned char width;
unsigned char height;
}font;
unsigned long ie;
unsigned long color;
unsigned char xCoord=0;
unsigned char yCoord=0;
unsigned char fontOffset=0;
unsigned char bitcount;
#define DEFAULT_CONTRAST_EPS 35
unsigned char x;
unsigned char y;
unsigned char *data1;
unsigned char bitspixel;
unsigned char bitsmask;
unsigned int bits;
unsigned char bitscount;
unsigned char padding;
unsigned long index;
unsigned char pixelcount;
unsigned int pixelcolor;
unsigned char clipinvalid;
unsigned char clipY;
unsigned char stopY;
unsigned char stopX;
unsigned char x3;
unsigned char y3;
unsigned int aa;
unsigned int bb;
unsigned long er, cr1, ir;
unsigned int ys,ye,xs,xe;
unsigned char fill;
unsigned char bitcount;
typedef struct {
unsigned char X;
unsigned char Y;
} glcdPoint_t;
typedef struct {
unsigned char X1;
unsigned char Y1;
unsigned char X2;
unsigned char Y2;
} glcdRect_t;
typedef struct {
unsigned char AutoLineFeed:1, // Fontroutine nutzt einen impliziten Zeilenumbruch innerhalb von glcd_Window
FixedFont:1; // Fontroutine soll Font mit fester Zeichenbreite darstellen, ansonsten proportional
} glcdFlags_t;
unsigned int glcd_Colors[1 << COLOR_TABLE_BITS]; // Farbtabelle, Colors[0] = Hintergrund = F黮lfarbe, Color[1] = Vordergrund = Linienfarbe
unsigned char glcd_MemCtrl_EPS;
glcdFlags_t glcd_Flags;
glcdRect_t glcd_Clip; // Clipping Koordinaten, alles was ausserhalb ist wird nicht dargestellt
glcdPoint_t glcd_Cursor; // aktuelle Position f黵 Schriften
glcdRect_t glcd_Window; // aktuelles Fenster f黵 Textausgaben
unsigned char glcd_FontFirstChar; // erstes Zeichen im Font
unsigned char glcd_FontLastChar; // letztes Zeichen im Font
unsigned char glcd_FontBitsPixel; // Farbtiefe des Fonts
// User definierte Readcallback f黵 die Fontdaten
// die eigentlichen Fontdaten beginnen hier, abh鋘gig von der Readcallback
#define glcdBkColor glcd_Colors[0]
#define glcdFgColor glcd_Colors[1]
#define glcdFrColor glcd_Colors[2]
#define glcdShColor glcd_Colors[3]
#define glcdSetColor(index, color) {glcd_Colors[index] = color;}
#define glcdSetBkColor(color) {glcdSetColor(0, color);}
#define glcdSetFgColor(color) {glcdSetColor(1, color);}
#define glcdSetFrColor(color) {glcdSetColor(2, color);}
#define glcdSetShColor(color) {glcdSetColor(3, color);}
#define glcdSetColors(fgColor, bkColor) {glcdSetFgColor(fgColor); glcdSetBkColor(bkColor);}
#define glcdSetRect(r,x1,y1,x2,y2) {r.X1 = x1; r.Y1 = y1; r.X2 = x2; r.Y2 = y2;}
#define glcdSwapCoord(x, y) {unsigned char t = x; x = y; y = t;}
#define glcdCheckCoord(x, y) {if (x > y) {glcdSwapCoord(x, y)}}
void glcdPutPixel(unsigned int color)
{
spi_data(color);
}
void glcdSetOrientation(char x) {
spi_command(LCD_CMD_DATCTL_EPS);
spi_data(0x01);
spi_data(0x00);
spi_data(x);
}
void glcdSetAddr1(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)
{
spi_command(LCD_CMD_CASET_EPS);
spi_data(x1);
spi_data(x2);
spi_command(LCD_CMD_PASET_EPS);
spi_data(y1);
spi_data(y2);
xCoord=x1;
yCoord=y1;
}
void gclcd_gotoxy(unsigned char x, unsigned char y)
{
glcdSetAddr1(x, y, 131, 131);
}
void glcdSetAddr(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)
{
spi_command(LCD_CMD_CASET_EPS);
spi_data(x1);
spi_data(x2);
spi_command(LCD_CMD_PASET_EPS);
spi_data(y1);
spi_data(y2);
spi_command(LCD_CMD_RAMWR_EPS);
}
void glcdDoFillRect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, const unsigned int color)
{
unsigned char x, y;
if ((x1 > glcd_Clip.X2) | (x2 < glcd_Clip.X1) | (y1 > glcd_Clip.Y2) | (y2 < glcd_Clip.Y1)) {return;}
if (x1 < glcd_Clip.X1) {x1 = glcd_Clip.X1;}
if (y1 < glcd_Clip.Y1) {y1 = glcd_Clip.Y1;}
if (x2 > glcd_Clip.X2) {x2 = glcd_Clip.X2;}
if (y2 > glcd_Clip.Y2) {y2 = glcd_Clip.Y2;}
if ((x1 <= x2) & (y1 <= y2))
{
glcdSetAddr(x1, y1, x2, y2);
for (y = y1; y <= y2; y++)
{
for (x = x1; x <= x2; x++)
{
glcdPutPixel(color);
}
}
}
}
void glcdFillRect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, const unsigned int color)
{
glcdCheckCoord(x1, x2);
glcdCheckCoord(y1, y2);
glcdDoFillRect(x1, y1, x2, y2, color);
}
/*
void glcdSetPixel(unsigned char x, unsigned char y, const unsigned int color)
{
if ((x >= glcd_Clip.X1) & (x <= glcd_Clip.X2) & (y >= glcd_Clip.Y1) & (y <= glcd_Clip.Y2))
{
glcdSetAddr(x, y, SCREEN_WIDTH -1, SCREEN_HEIGHT -1);
glcdPutPixel(color);
}
}
*/
void glcdNewLine(void)
{
if(yCoord+font.height < 128)
gclcd_gotoxy(fontOffset, yCoord+font.height);
else
gclcd_gotoxy(fontOffset, 0);
}
void gclcd_font(unsigned char fonts)
{ //font.width = Times_New_Roma14[0];
// font.height = Times_New_Roma14[1];
if(fonts==fArial8){
font.width = Arial8[0];
font.height = Arial8[1];
fonts1=1;
}
else{
font.width = Arial11[0];
font.height = Arial11[1];
fonts1=0;
}
}
int gclcd_putc(unsigned int c)
{
unsigned int index;
unsigned char i, j, w, data1, skipped=1;
unsigned char startY;
startY=yCoord;
spi_command(LCD_CMD_DATCTL_EPS);
spi_data(0x04);
spi_data(0x00);
spi_data(0x01);
if(c == '\n') glcdNewLine();
//if(c == '\f') gclcd_cls();
if(c < 32) return 0;
c -= 32;
index = c*(font.width)*(font.height/8)+2;//+font.width;
for(w=0; w<font.width; w++)
{
for(i=0; i<font.height/8; i++)
{
if(fonts1==1){
data1 = Arial8[index++];
}
else{
data1 = Arial11[index++];
} // tipo de letra usado
for(j=0; j<8; j++)
{
if(data1 & 0x01)
{
if(skipped)
{
gclcd_gotoxy(xCoord, yCoord);
spi_command(LCD_CMD_RAMWR_EPS);
skipped=0;
}
glcdPutPixel(color);
yCoord++;
}
else
{
skipped=1;
gclcd_gotoxy(xCoord, ++yCoord);
}
data1 >>= 1;
}
}
gclcd_gotoxy(++xCoord, startY);
}
spi_command(LCD_CMD_DATCTL_EPS);
spi_data(0x00);
spi_data(0x00);
spi_data(0x01);
if ((130 - xCoord)< font.width)
{ glcdNewLine();}
return 0;
}
unsigned int glcdPutStr(const unsigned char *addr, char newColor)
{
unsigned char c;
unsigned int i = 0;
unsigned char *addr_ptr;
color = newColor;
addr_ptr = (unsigned char *)addr;
c = *addr_ptr++;
while (c)
{
i += gclcd_putc(c);
}
return(i);
}
void glcdDisplayON(void)
{
spi_command(LCD_CMD_DISPON_EPS);
}
void glcdDisplayOFF(void)
{
spi_command(LCD_CMD_DISPOFF_EPS);
}
void glcdContrast(unsigned char value)
{
spi_command(LCD_CMD_VOLCTR_EPS);
spi_data(value);
spi_data(0x03);
}
void glcdDisplayInit(void)
{
spi_init();
delay_ms(10);
IODIR0 |= LCD_SCK;
IODIR0 |= LCD_DI;
IOSET0 |= LCD_SCK;
IOCLR0 |= LCD_DI;
// reset display
IODIR0 |= LCD_RESET;
IOCLR0 |= LCD_RESET;
delay_ms(1);
IOSET0 |= LCD_RESET;
delay_ms(20);
spi_command(LCD_CMD_DISCTL_EPS);
spi_data(0x0C);
spi_data(0x20);
spi_data(0x11);
spi_data(0x01);
spi_command(LCD_CMD_COMSCN_EPS);
spi_data(0x01);
spi_command(LCD_CMD_BSTRON_EPS);
spi_command(LCD_CMD_SLEEPOUT_EPS);
delay_ms(5);
glcdContrast(DEFAULT_CONTRAST_EPS);
delay_ms(10);
spi_command(LCD_CMD_PWRCTRL_EPS);
spi_data(0x0F);
spi_command(LCD_CMD_INVON_EPS);
spi_command(LCD_CMD_DATCTL_EPS);
spi_data(0x00); // Normal display
spi_data(0x00); // RGB arrangement <RGBRGB...RGB>
spi_data(0x01); // Select TYPE B for 16 gray scaling <0x02 = TYPE A (4096 color)>
spi_command(LCD_CMD_RGBSET8_EPS);
spi_data(0);
spi_data(2);
spi_data(4);
spi_data(6);
spi_data(8);
spi_data(10);
spi_data(12);
spi_data(15);
spi_data(0);
spi_data(2);
spi_data(4);
spi_data(6);
spi_data(8);
spi_data(10);
spi_data(12);
spi_data(15);
spi_data(0);
spi_data(4);
spi_data(9);
spi_data(15);
glcdSetRect(glcd_Clip, SCREEN_LEFT, SCREEN_TOP, SCREEN_RIGHT, SCREEN_BOTTOM);
glcdSetRect(glcd_Window, SCREEN_LEFT, SCREEN_TOP, SCREEN_RIGHT, SCREEN_BOTTOM);
delay_ms(25);
}
void deg_yaz(unsigned int deger){
unsigned char d4, d3, d2, d1, q;
unsigned int d0;
d0 = deger & 0xF;
d1 = (deger>>4) & 0xF;
d2 = (deger>>8) & 0xF;
d3 = (deger>>12) & 0xF;
d4 = (deger>>16) & 0xF;
d0 = 6*(d4 + d3 + d2 + d1) + d0;
q = d0 / 10;
d0 = d0 % 10;
d1 = q + 3*d4 + 9*d3 + 5*d2 + d1;
q = d1 / 10;
d1 = d1 % 10;
d2 = q + 5*d4 + 2*d2;
q = d2 / 10;
d2 = d2 % 10;
d3 = q + 5*d4 + 4*d3;
q = d3 / 10;
d3 = d3 % 10;
d4 = q + 6*d4 ;
q = d4 / 10;
d4 = d4 % 10;
if(d4!=0){
gclcd_putc(d4+0x30);
}
if(d4!=0|d3!=0){
gclcd_putc(d3+0x30);
}
if(d4!=0|d3!=0|d2!=0 ){
gclcd_putc(d2+0x30);
}
if(d4!=0|d3!=0|d2!=0|d1!=0){
gclcd_putc(d1+0x30);
}
gclcd_putc(d0+0x30);
}
/*
deg_yaz(unsigned long int deger)
{
unsigned long int result;
unsigned char bcd;
unsigned char g;
result = fast_binary_to_bcd( deger );
for(g=8; g>0;g--)
{
bcd = ((result >> ((g-1)*4))) & 0x0f;
gclcd_putc(bcd+0x30);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -