⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 epson.c

📁 keil lpc2138 epson6610 lcd source
💻 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 + -