4 extern const uint8_t BasicSmallFont[];
43 My595=
new hc595(2,4,7,2);
46 LocalFont.memory_pointer=0;
49 LocalFont.font_type=0 ;
53 Touchpin(A1,A3,A0,8,9);
66 My595->Send595Pin(data,0);
69 #ifdef SS_USEDIRECTPORT 70 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 72 register uint8_t port=PORTE;
74 if(bitRead(data,0)) port |= B0000001;
75 else port &= ~ B0000001;
76 if(bitRead(data,1)) port |= B0000010;
77 else port &= ~ B0000010;
78 if(bitRead(data,2)) port |= B0010000;
79 else port &= ~ B0010000;
80 if(bitRead(data,3)) port |= B0100000;
81 else port &= ~ B0100000;
82 if(bitRead(data,5)) port |= B0001000;
83 else port &= ~ B0001000;
86 if(bitRead(data,6)) port |= B0001000;
87 else port &= ~ B0001000;
88 if(bitRead(data,7)) port |= B0010000;
89 else port &= ~ B0010000;
92 if(bitRead(data,4)) PORTG |= B0100000;
93 else PORTG &= ~ B0100000;
121 My595->Send595Pin(data,0);
125 My595->Send595Pin(dataL,0);
128 #ifdef SS_USEDIRECTPORT 129 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 130 uint8_t data=dataL>>8;
131 register uint8_t port=PORTE;
133 if(bitRead(data,0)) port |= B0000001;
134 else port &= ~ B0000001;
135 if(bitRead(data,1)) port |= B0000010;
136 else port &= ~ B0000010;
137 if(bitRead(data,2)) port |= B0010000;
138 else port &= ~ B0010000;
139 if(bitRead(data,3)) port |= B0100000;
140 else port &= ~ B0100000;
141 if(bitRead(data,5)) port |= B0001000;
142 else port &= ~ B0001000;
145 if(bitRead(data,6)) port |= B0001000;
146 else port &= ~ B0001000;
147 if(bitRead(data,7)) port |= B0010000;
148 else port &= ~ B0010000;
150 if(bitRead(data,4)) PORTG |= B0100000;
151 else PORTG &= ~ B0100000;
155 if(bitRead(data,0)) port |= B0000001;
156 else port &= ~ B0000001;
157 if(bitRead(data,1)) port |= B0000010;
158 else port &= ~ B0000010;
159 if(bitRead(data,2)) port |= B0010000;
160 else port &= ~ B0010000;
161 if(bitRead(data,3)) port |= B0100000;
162 else port &= ~ B0100000;
163 if(bitRead(data,5)) port |= B0001000;
164 else port &= ~ B0001000;
167 if(bitRead(data,6)) port |= B0001000;
168 else port &= ~ B0001000;
169 if(bitRead(data,7)) port |= B0010000;
170 else port &= ~ B0010000;
172 if(bitRead(data,4)) PORTG |= B0100000;
173 else PORTG &= ~ B0100000;
231 void Ss_TFT::
SetXY(
unsigned int x1,
unsigned int y1,
unsigned int x2,
unsigned int y2)
400 for(i=0;i<(ey-sy+1);i++)
402 for (j=0;j<(ex-sx+1);j++)
431 ForeColor=((r>>3)<<11)+((g>>2)<<5)+(b>>3);
440 BackColor=((r>>3)<<11)+((g>>2)<<5)+(b>>3);
460 if (ln<0) {ln = -ln;x -= ln;}
476 if (ln<0) {ln = -ln;y -= ln;}
525 unsigned short dx,xstep,dy,ystep;
526 unsigned short col = x1, row = y1;
528 if(x2>x1) {dx=x2-x1;xstep=1;}
529 else {dx=x1-x2;xstep=-1;}
530 if(y2>y1) {dy=y2-y1;ystep=1;}
531 else {dy=y1-y2;ystep=-1;}
540 if (row == y2)
return;
557 if (col == x2)
return;
621 if (y )
FPixel(cx - x, cy - y);
623 if (y )
FPixel(cx + x, cy - y);
633 for(
int y1=-raggio; y1<=0; y1++)
634 for(
int x1=-raggio; x1<=0; x1++)
635 if(x1*x1+y1*y1 <= raggio*raggio)
650 uint8_t i,j,ch,seg,bsp,cmax,spx,spy;
651 unsigned short offset;
653 if(LocalFont.font_type!=2)
return;
654 seg=LocalFont.x_size;
655 bsp=LocalFont.y_size;
659 if(val<LocalFont.c_min+1) val=LocalFont.c_min;
660 if(val>LocalFont.c_max+1) val=LocalFont.c_min;
661 offset=4*(val-LocalFont.c_min);
668 LocalFont.font_x_space=4*spx+7+8*seg;
669 LocalFont.font_y_space=4*spy+7+8*seg;
674 uint8_t b1=pgm_read_byte(LocalFont.memory_pointer+offset);
675 uint8_t b2=pgm_read_byte(LocalFont.memory_pointer+offset+1);
676 uint8_t b3=pgm_read_byte(LocalFont.memory_pointer+offset+2);
677 uint8_t b4=pgm_read_byte(LocalFont.memory_pointer+offset+3);
681 unsigned short VU=1+2*seg;
682 unsigned short HU=1+2*seg;
684 unsigned short HSU=1+spx;
685 unsigned short VSU=1+spy;
687 unsigned short VSegment=2*VSU+3*seg+1;
688 unsigned short HSegment=2*HSU+3*seg+1;
691 unsigned short x1,x2,x3,y1,y2,y3,y4,y5,x4,x5;
713 for(step=0;step<seg;step++)
718 LineVS(x1-step,y1+step+bsp,VSegment-step*2);
719 if(step) LineVS(x1+step,y1+step+bsp,VSegment-step*2);
724 LineVS(x1-step,y2+step+bsp,VSegment-step*2);
725 if(step) LineVS(x1+step,y2+step+bsp,VSegment-step*2);
729 LineVS(x2-step,y1+step+bsp,VSegment-step*2);
730 if(step) LineVS(x2+step,y1+step+bsp,VSegment-step*2);
735 LineVS(x2-step,y2+step+bsp,VSegment-step*2);
736 if(step) LineVS(x2+step,y2+step+bsp,VSegment-step*2);
741 LineVS(x3-step,y1+step+bsp,VSegment-step*2);
742 if(step) LineVS(x3+step,y1+step+bsp,VSegment-step*2);
747 LineVS(x3-step,y2+step+bsp,VSegment-step*2);
748 if(step) LineVS(x3+step,y2+step+bsp,VSegment-step*2);
753 LineHS(x1+step+bsp,y1-step,HSegment-step*2);
754 if(step) LineHS(x1+step+bsp,y1+step,HSegment-step*2);
759 LineHS(x2+step+bsp,y1-step,HSegment-step*2);
760 if(step) LineHS(x2+step+bsp,y1+step,HSegment-step*2);
767 LineHS(x1+step+bsp,y2-step,HSegment-step*2);
768 if(step) LineHS(x1+step+bsp,y2+step,HSegment-step*2);
773 LineHS(x2+step+bsp,y2-step,HSegment-step*2);
774 if(step) LineHS(x2+step+bsp,y2+step,HSegment-step*2);
779 LineHS(x1+step+bsp,y3-step,HSegment-step*2);
780 if(step) LineHS(x1+step+bsp,y3+step,HSegment-step*2);
785 LineHS(x2+step+bsp,y3-step,HSegment-step*2);
786 if(step) LineHS(x2+step+bsp,y3+step,HSegment-step*2);
790 Line(x1+step+seg+bsp,y1+seg+bsp,x2-seg-bsp,y2-step-seg-bsp);
791 if(step) Line(x1+seg+bsp,y1+step+seg+bsp,x2-step-seg-bsp,y2-seg-bsp);
796 Line(x2+seg+bsp,y2-seg-step-bsp,x3+bsp-step-seg-bsp,y1+seg+bsp);
797 if(step) Line(x2+step+seg+bsp,y2-seg-bsp,x3-seg-bsp,y1+step+seg+bsp);
802 Line(x1+seg+bsp,y3-step-seg-bsp,x2-seg-step-bsp,y2+seg+bsp);
803 if(step) Line(x1+step+seg+bsp,y3-seg-bsp,x2-seg-bsp,y2+step+seg+bsp);
809 Line(x2+step+seg+bsp,y2+seg+bsp,x3-seg-bsp,y3-step-seg-bsp);
810 if(step) Line(x2+seg+bsp,y2+step+seg+bsp,x3-step-seg-bsp,y3-seg-bsp);
816 HLine(x1+bsp+seg+1,y4+step-(seg>>1),HSegment-2*seg-2);
821 HLine(x2+bsp+seg+1,y4+step-(seg>>1),HSegment-2*seg-2);
826 HLine(x1+bsp+seg+1,y5+step-(seg>>1),HSegment-2*seg-2);
830 HLine(x2+bsp+seg+1,y5+step-(seg>>1),HSegment-2*seg-2);
837 VLine(x4+step-(seg>>1),y1+bsp+seg+1,VSegment-2*seg-2);
841 VLine(x5+step-(seg>>1),y1+bsp+seg+1,VSegment-2*seg-2);
847 VLine(x4+step-(seg>>1),y2+bsp+seg+1,VSegment-2*seg-2);
851 VLine(x5+step-(seg>>1),y2+bsp+seg+1,VSegment-2*seg-2);
862 HLine(x2-step,y3+step,step*2);
863 HLine(x2-step,y3+seg+(seg-step),step*2);
881 void Ss_TFT::
SetFont(uint8_t * font,uint8_t x,uint8_t y,uint8_t spx,uint8_t spy)
883 LocalFont.font_type=pgm_read_byte(font+0);
884 if(LocalFont.font_type==1)
886 LocalFont.x_size=pgm_read_byte(font+1);
887 LocalFont.y_size=pgm_read_byte(font+2);
888 LocalFont.c_min=pgm_read_byte(font+3);
889 LocalFont.c_max=pgm_read_byte(font+4);
890 LocalFont.memory_pointer=font+5;
892 LocalFont.font_x_space=LocalFont.x_size;
893 LocalFont.font_y_space=LocalFont.y_size;
895 else if(LocalFont.font_type==2)
902 LocalFont.c_min=pgm_read_byte(font+1);
903 LocalFont.c_max=pgm_read_byte(font+2);
904 LocalFont.memory_pointer=font+3;
905 LocalFont.font_x_space=4*spx+7+8*x;
906 LocalFont.font_y_space=4*spy+7+8*y;
910 void Ss_TFT::SetFontOption(uint8_t option)
912 if(LocalFont.font_type==1)
914 LocalFont.font_x_space=LocalFont.x_size;
915 LocalFont.font_y_space=LocalFont.y_size;
916 if(bitRead(option,0)) LocalFont.font_x_space=LocalFont.x_size<<1;
917 if(bitRead(option,1)) LocalFont.font_y_space=LocalFont.y_size<<1;
924 type=LocalFont.font_type;
925 LocalFont.sp_x=option;
929 SetFontOption(option);
930 DisplayBitmapChar(x,y,val,option);
932 else if(type==2) d32s(x,y,val);
944 uint8_t i,j,ch,chx,chy,cmin,cmax,bit,type,sp=1,L,H;
945 unsigned int bitnum,bytenum;
950 type=LocalFont.font_type;
951 chx=LocalFont.x_size;
952 chy=LocalFont.y_size;
953 cmin=LocalFont.c_min;
954 cmax=LocalFont.c_max;
957 if(option>3) option=3;
960 if (bitRead(Service,1)==
Ss_LANDSCAPE) GetLandscapePoint(&x,&y);
971 if(bitRead(option,0)) bit_x=bit_x*2;
972 if(bitRead(option,1)) bit_y=bit_y*2;
974 bit_buff=(uint8_t*)malloc(bit_x*bit_y);
983 bitnum=(val-cmin)*chx*chy;
985 myarray=(
bool *)malloc(
sizeof(
bool)*chy*chx);
986 unsigned short pointer=0,fpointer=0;
993 bit=bitnum-8*bytenum;
994 ch=pgm_read_byte(LocalFont.memory_pointer+bytenum);
995 if(ch&(1<<(7-bit))) *(myarray+pointer)=1;
996 else *(myarray+pointer)=0;
1001 if (bitRead(Service,1)==
Ss_LANDSCAPE) SetXY(x,y-bit_x+1,x+bit_y-1,y);
1002 else SetXY(x,y,x+bit_x-1,y+bit_y-1);
1021 if(*(myarray+pointer))
1024 if(i<chx-1)
if(*(myarray+pointer+1)) FoB2=1;
1025 if(option==1) FoB2=1;
1030 if(FoB1) {*(bit_buff+fpointer)=1;}
1031 else {*(bit_buff+fpointer)=0;}
1033 if(option==1 || option==3)
if(FoB2){fpointer++;*(bit_buff+fpointer)=1; }
1034 else {fpointer++;*(bit_buff+fpointer)=0;}
1042 if(bitRead(option,1))
1053 if(*(myarray+pointer+chx) & *(myarray+pointer) ) FoB1=1;
1054 if(option==2 && *(myarray+pointer)) FoB1=1;
1055 if(*(myarray+pointer+chx+1) & *(myarray+pointer) & *(myarray+pointer+1)==0 & *(myarray+pointer+chx)==0) FoB2=1;
1056 if(i<chx-1)
if( *(myarray+pointer)==0 & *(myarray+pointer+chx) & *(myarray+pointer+1) & *(myarray+pointer+chx+1)==0) FoB2=1;
1060 if(FoB1) *(bit_buff+fpointer)=1;
1061 else *(bit_buff+fpointer)=0;
1065 if(FoB2) {fpointer++;*(bit_buff+fpointer)=1;}
1066 else {fpointer++;*(bit_buff+fpointer)=0;}
1085 uint8_t * bitpointer=0;
1089 if(!bitRead(Service,1))
1091 for(j=0;j<bit_y;j++)
1093 for(i=0;i<bit_x;i++)
1096 if(*(bit_buff+pointer)) LCD_Write_DATA8(ForeColor);
1097 else LCD_Write_DATA8(BackColor);
1104 for(i=0;i<bit_x;i++)
1106 for(j=0;j<bit_y;j++)
1108 if(*(bit_buff+(bit_x-i-1)+j*bit_x))LCD_Write_DATA8(ForeColor);
1109 else LCD_Write_DATA8(BackColor);
1137 if(LocalFont.font_type==1) SetFontOption(options);
1142 DisplayChar(x1,y1,*st,options);
1143 x1+=LocalFont.font_x_space;
1179 pinMode(T_CLK,OUTPUT);
1181 pinMode(T_CS,OUTPUT);
1183 pinMode(T_DIN,OUTPUT);
1185 pinMode(T_DOUT,INPUT);
1187 pinMode(T_IRQ,INPUT);
1209 for(count=0;count<8;count++)
1230 unsigned short Num=0;
1231 for(count=0;count<12;count++)
void DisplayBitmapChar(int, int, uint8_t, uint8_t option=0)
void HLine(short x, short y, short l)
void HPulse(uint8_t pin)
Set digital pin to high, then to low.
void d32s(short, short, uint8_t)
void Circle(int, int, int)
void CircleFill(int, int, int)
void LCD_Write_CD(unsigned short, unsigned short)
void CheckPoint(int *, int *)
void plot4points(int, int, int, int)
void VLine(short x, short y, short l)
void SetFBcolor(int FC, int BC)
void GetLandscapePoint(int *, int *)
void DisplayChar(short, short, uint8_t, uint8_t option=0)
void SetXY(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
#define FastdigitalWrite(a, b)
void LineVS(int x, int y, int l)
unsigned short SCR_HEIGHT
void LCD_Write8x2(unsigned short)
void SetFont(uint8_t *font, uint8_t x=0, uint8_t y=0, uint8_t spx=0, uint8_t spy=0)
void DisplayString(int x, int y, char *st, uint8_t options=0)
void CleanLCD(unsigned short rgb=0xFFFF)
#define FastdigitalRead(a)
void SetFcolor(uint8_t, uint8_t, uint8_t)
void Write7843(uint8_t num)
void Rect(int, int, int, int)
void LineHS(int x, int y, int l)
void LCD_Write_DATA8(unsigned short)
void RectFill(int sx, int sy, int ex, int ey, bool force=0)
void SetBcolor(uint8_t, uint8_t, uint8_t)
void Line(int sx, int sy, int ex, int ey)
void Touchpin(int tclk, int tcs, int tdin, int dout, int irq)
void LCD_Write_COMM8(unsigned short)