توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : جمع اوري پروژها ي PIC
sajjad_AD
24-11-2012, 22:06
سلام :hi:
قبل از هر چیز ایام تاسوعا و عاشورای حسینی رو به همه ی کاربران تسلیت میگم...
خوب,اجبارا (مشق شب,تکلیف مدرسه) یه هدر برای این نوع LCD نوشتم که شامل توابع روبروست:
SetDot(signed char x,signed char y,unsigned char c);
DrawVerticalLine(unsigned char Y0,unsigned char Y1,unsigned char X,unsigned char Color);
DrawHorizontalLine(unsigned char X0,unsigned char X1,unsigned char Y,unsigned char Color);
DrawLine(signed char X0,signed char Y0,signed char X1,signed char Y1,unsigned char Color);
DrawRectangle(unsigned char X0,unsigned char Y0,unsigned char X1,unsigned char Y1,unsigned char Fill,unsigned char Color);
DrawCircle(unsigned int X,unsigned int Y,unsigned int R,unsigned char Fill,unsigned char Color);
ClearGlcd(unsigned char Color);
ShowPicture(const rom unsigned char *pic);
PutString(unsigned char line,unsigned char X,unsigned char *text);
InitGlcd(void);
برنامه ی هدر:
#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,17 6,176,176,176,
176,176,176,176,176,176,176,176,176,176,176,176,17 6,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,12 4,120,120,112,
112,112,112,112,112,112,112,112,112,112,112,112,11 2,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);
}
هدر برای کامپایلر PIC MPLAB C18 نوشته شده
به همراه یه مثال و شبیه سازی با پروتئوس
PDF توضیحات و آموزش هدر
دیتاشیت چیپ KS0108
و نرم افزار GLCD BMP Editor شرکت MikroEleKtroniKa ضمیمه شده اند.
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.