کد:
#define RS PORTDbits.RD0
#define RW PORTDbits.RD1
#define EN PORTDbits.RD2
#define CS1 PORTDbits.RD3
#define CS2 PORTDbits.RD4
#define RST PORTDbits.RD5
#define DirRS TRISDbits.TRISD0
#define DirRW TRISDbits.TRISD1
#define DirEN TRISDbits.TRISD2
#define DirCS1 TRISDbits.TRISD3
#define DirCS2 TRISDbits.TRISD4
#define DirRST TRISDbits.TRISD5
#define GlcdDataBus PORTB
#define DirGlcdDataBus TRISB
const rom unsigned char Bascom8x8Font[760] = {
0,0,0,0,0,0,0,0
,0,0,6,95,6,0,0,0
,0,7,3,0,7,3,0,0
,0,36,126,36,126,36,0,0
,0,36,43,106,18,0,0,0
,0,99,19,8,100,99,0,0
,0,54,73,86,32,80,0,0
,0,0,7,3,0,0,0,0
,0,0,62,65,0,0,0,0
,0,0,65,62,0,0,0,0
,0,8,62,28,62,8,0,0
,0,8,8,62,8,8,0,0
,0,0,224,96,0,0,0,0
,0,8,8,8,8,8,0,0
,0,0,96,96,0,0,0,0
,0,32,16,8,4,2,0,0
,0,62,81,73,69,62,0,0
,0,0,66,127,64,0,0,0
,0,98,81,73,73,70,0,0
,0,34,73,73,73,54,0,0
,0,24,20,18,127,16,0,0
,0,47,73,73,73,49,0,0
,0,60,74,73,73,48,0,0
,0,1,113,9,5,3,0,0
,0,54,73,73,73,54,0,0
,0,6,73,73,41,30,0,0
,0,0,108,108,0,0,0,0
,0,0,236,108,0,0,0,0
,0,8,20,34,65,0,0,0
,0,36,36,36,36,36,0,0
,0,0,65,34,20,8,0,0
,0,2,1,89,9,6,0,0
,0,62,65,93,85,30,0,0
,0,126,17,17,17,126,0,0
,0,127,73,73,73,54,0,0
,0,62,65,65,65,34,0,0
,0,127,65,65,65,62,0,0
,0,127,73,73,73,65,0,0
,0,127,9,9,9,1,0,0
,0,62,65,73,73,122,0,0
,0,127,8,8,8,127,0,0
,0,0,65,127,65,0,0,0
,0,48,64,64,64,63,0,0
,0,127,8,20,34,65,0,0
,0,127,64,64,64,64,0,0
,0,127,2,4,2,127,0,0
,0,127,2,4,8,127,0,0
,0,62,65,65,65,62,0,0
,0,127,9,9,9,6,0,0
,0,62,65,81,33,94,0,0
,0,127,9,9,25,102,0,0
,0,38,73,73,73,50,0,0
,0,1,1,127,1,1,0,0
,0,63,64,64,64,63,0,0
,0,31,32,64,32,31,0,0
,0,63,64,60,64,63,0,0
,0,99,20,8,20,99,0,0
,0,7,8,112,8,7,0,0
,0,113,73,69,67,0,0,0
,0,0,127,65,65,0,0,0
,0,2,4,8,16,32,0,0
,0,0,65,65,127,0,0,0
,0,4,2,1,2,4,0,0
,128,128,128,128,128,128,128,128
,0,0,3,7,0,0,0,0
,0,32,84,84,84,120,0,0
,0,127,68,68,68,56,0,0
,0,56,68,68,68,40,0,0
,0,56,68,68,68,127,0,0
,0,56,84,84,84,8,0,0
,0,8,126,9,9,0,0,0
,0,24,164,164,164,124,0,0
,0,127,4,4,120,0,0,0
,0,0,0,125,64,0,0,0
,0,64,128,132,125,0,0,0
,0,127,16,40,68,0,0,0
,0,0,0,127,64,0,0,0
,0,124,4,24,4,120,0,0
,0,124,4,4,120,0,0,0
,0,56,68,68,68,56,0,0
,0,252,68,68,68,56,0,0
,0,56,68,68,68,252,0,0
,0,68,120,68,4,8,0,0
,0,8,84,84,84,32,0,0
,0,4,62,68,36,0,0,0
,0,60,64,32,124,0,0,0
,0,28,32,64,32,28,0,0
,0,60,96,48,96,60,0,0
,0,108,16,16,108,0,0,0
,0,156,160,96,60,0,0,0
,0,100,84,84,76,0,0,0
,0,8,62,65,65,0,0,0
,0,0,0,119,0,0,0,0
,0,0,65,65,62,8,0,0
,0,2,1,2,1,0,0,0
};
const rom unsigned char MikroE_Logo_BMP[1024] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,192,224,112,176,176,176,176,176,176,176,176,
176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
176,176,176,176,176,176,176,176,176, 96,224,128, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 3, 35, 49, 49, 49,
49, 49, 49, 49, 51, 3,199,255,127, 31, 31, 15, 7, 7, 3, 3,
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 7, 7, 15,
15, 31,127,255,255,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 7, 6, 6, 14, 30,
30, 30, 30, 30,254,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,252,255,255,255,254, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 17, 51, 3, 3, 15,
7, 3, 3, 17,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,129,129,129,129,128,128,128,128,128,128,128,128,
128,128,128,128,128,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 98,127,111, 99, 99,
99, 99, 99, 99,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,255, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 8,140,140,140,140,
140,140,140,140,141,159,255,240,192, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 7, 31, 63, 31, 31, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0,128,192,248,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,127,255,128,127,127,127,112,113,113,113,113,
113,113,113,113,113,113,113,113,115,119,126,124,124,120,120,112,
112,112,112,112,112,112,112,112,112,112,112,112,112,120,120,124,
126,127,127,127,127,127,127,127, 63,192,255,127, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0
};
float sqrt( float x );
char *strcpypgm2ram(char *dest,const rom char *src);
//ResetGlcd -------------------------------------------------------------------------------------------------------------------------------------------
void ResetGlcd(void){
RST = 0;
RST = 1;
}
//LatchData -------------------------------------------------------------------------------------------------------------------------------------------
void LatchData(void){
EN = 1;
EN = 0;
Delay10TCYx(5);
}
//WriteCmdGlcd ----------------------------------------------------------------------------------------------------------------------------------------
void WriteCmdGlcd(unsigned char cmd){
RS = 0;
RW = 0;
GlcdDataBus = cmd;
LatchData();
}
//WriteDataGlcd ---------------------------------------------------------------------------------------------------------------------------------------
void WriteDataGlcd(unsigned char data){
RS = 1;
RW = 0;
GlcdDataBus = data;
LatchData();
}
//ReadDataGlcd ----------------------------------------------------------------------------------------------------------------------------------------
unsigned char ReadDataGlcd(void){
unsigned char data;
RS = 1;
RW = 1;
DirGlcdDataBus = 0xFF;
EN = 1;
EN = 0;
EN = 1;
Delay10TCYx(1);
data = GlcdDataBus;
EN = 0;
DirGlcdDataBus = 0x00;
return(data);
}
//LeftSelect ------------------------------------------------------------------------------------------------------------------------------------------
void LeftSelect(void){
CS1 = 0;
CS2 = 1;
}
//RightSelect -----------------------------------------------------------------------------------------------------------------------------------------
void RightSelect(void){
CS1 = 1;
CS2 = 0;
}
//SetDot -------------------------------------------------------------------------------------------------------------------------------------------Ex
void SetDot(signed char x,signed char y,unsigned char c){
unsigned char data;
if(x<64) {
LeftSelect();
x = x|0x40;
}else {
RightSelect();
x = (x-64)|0x40;
}
WriteCmdGlcd(x);
WriteCmdGlcd((y/8)|0xB8);
data = ReadDataGlcd();
WriteCmdGlcd(x);
WriteDataGlcd(c ? ((1<<(y-((y/8)*8)))|data) : ((~(1<<(y-((y/8)*8))))&data));
}
//DrawVerticalLine ----------------------------------------------------------------------------------------------------------------------------------Ex
void DrawVerticalLine(unsigned char Y0,unsigned char Y1,unsigned char X,unsigned char Color) {
for(Y0;Y0<=Y1;Y0++) SetDot(X,Y0,Color);
}
//DrawHorizontalLine -------------------------------------------------------------------------------------------------------------------------------Ex
void DrawHorizontalLine(unsigned char X0,unsigned char X1,unsigned char Y,unsigned char Color) {
for(X0;X0<=X1;X0++) SetDot(X0,Y,Color);
}
//DrawLine -----------------------------------------------------------------------------------------------------------------------------------------Ex
void DrawLine(signed char X0,signed char Y0,signed char X1,signed char Y1,unsigned char Color) {
signed int Dy,Dx,Fraction;
signed char StepX,StepY;
Dy=Y1-Y0;
Dx=X1-X0;
if(Dy<0) {Dy=-Dy;StepY=-1;} else {StepY=1;}
if(Dx<0) {Dx=-Dx;StepX=-1;} else {StepX=1;}
Dy<<=1;
Dx<<=1;
SetDot(X0,Y0,Color);
if(Dx>Dy) {
Fraction=Dy-(Dx>>1);
while(X0!=X1) {
if(Fraction>=0) {
Y0+=StepY;
Fraction-=Dx;
}
X0+=StepX;
Fraction+=Dy;
SetDot(X0,Y0,Color);
}
}else {
Fraction=Dx-(Dy>>1);
while (Y0!=Y1) {
if(Fraction>=0) {
X0+=StepX;
Fraction-=Dy;
}
Y0+=StepY;
Fraction+=Dx;
SetDot(X0,Y0,Color);
}
}
}
//DrawRectangle -------------------------------------------------------------------------------------------------------------------------------------Ex
void DrawRectangle(unsigned char X0,unsigned char Y0,unsigned char X1,unsigned char Y1,unsigned char Fill,unsigned char Color) {
if(Fill) {
for(Y0;Y0<=Y1;Y0++)
DrawHorizontalLine(X0,X1,Y0,Color);
}else {
DrawHorizontalLine(X0,X1,Y0,Color);
DrawVerticalLine(Y0,Y1,X0,Color);
DrawHorizontalLine(X0,X1,Y1,Color);
DrawVerticalLine(Y0,Y1,X1,Color);
}
}
//DrawCircle ----------------------------------------------------------------------------------------------------------------------------------------Ex
void DrawCircle(unsigned int X,unsigned int Y,unsigned int R,unsigned char Fill,unsigned char Color) {
unsigned int Rx,Ry;
if(Fill) {
for(Rx=0;Rx<=R;Rx++) {
Ry = sqrt((R*R)-(Rx*Rx));
DrawHorizontalLine(X-Ry,X+Ry,Y+Rx,Color);
DrawHorizontalLine(X-Ry,X+Ry,Y-Rx,Color);
}
}else {
for(Rx=0;Rx<=R;Rx++) {
Ry = sqrt((R*R)-(Rx*Rx));
SetDot(Rx+X,Ry+Y,Color);
SetDot(Ry+X,Rx+Y,Color);
SetDot((Rx*-1)+X,Ry+Y,Color);
SetDot(Ry+X,(Rx*-1)+Y,Color);
SetDot(Rx+X,(Ry*-1)+Y,Color);
SetDot((Ry*-1)+X,Rx+Y,Color);
SetDot((Rx*-1)+X,(Ry*-1)+Y,Color);
SetDot((Ry*-1)+X,(Rx*-1)+Y,Color);
}
}
}
//ClsGlcd -------------------------------------------------------------------------------------------------------------------------------------------Ex
void ClearGlcd(unsigned char Color){
unsigned char Page,X,R;
Color *= 255;
for(R=0;R<2;R++) {
if(R == 0) LeftSelect();
else RightSelect();
for(Page=0;Page<8;Page++){
WriteCmdGlcd(Page|0xB8);
WriteCmdGlcd(0x40);
for(X=0;X<64;X++) WriteDataGlcd(Color);
}
}
}
//ShowPicture ---------------------------------------------------------------------------------------------------------------------------------------Ex
void ShowPicture(const rom unsigned char *pic){
unsigned char Page,X,R;
unsigned int P;
for(R=0;R<2;R++) {
if(R == 0) {
P = 0;
LeftSelect();
}else {
P = 64;
RightSelect();
}
for(Page=0;Page<8;Page++){
WriteCmdGlcd(Page|0xB8);
WriteCmdGlcd(0x40);
for(X=0;X<64;X++) {
WriteDataGlcd(pic[P]);
P++;
}
P += 64;
}
}
}
//PutString -----------------------------------------------------------------------------------------------------------------------------------------Ex
void PutString(unsigned char line,unsigned char X,unsigned char *text){
unsigned int R,P=0;
while(text[P] != 0) {
for(R=0;R<8;R++) {
if(X<64) {
LeftSelect();
WriteCmdGlcd(X|0x40);
}else {
RightSelect();
WriteCmdGlcd((X-64)|0x40);
}
WriteCmdGlcd(line|0xB8);
WriteDataGlcd(Bascom8x8Font[(((unsigned int)text[P]-32)*8)+R]);
X++;
}
P++;
}
}
//InitGlcd ------------------------------------------------------------------------------------------------------------------------------------------Ex
void InitGlcd(void){
DirRS = 0;
DirRW = 0;
DirEN = 0;
DirCS1 = 0;
DirCS2 = 0;
DirRST = 0;
DirGlcdDataBus = 0x00;
RS = 0;
RW = 0;
EN = 0;
CS1 = 0;
CS2 = 0;
RST = 0;
GlcdDataBus = 0x00;
ResetGlcd();
ClearGlcd(0);
}