کتابخانه برای LCD گرافیکی با چیپست K108 در عرض 128*64
نمونه
http://telec.persiangig.com/avr_amoo...imple_glcd.swf
کتابخانه ای که نوشته ام هرچند هنوز کامل نشده و به این زودیها نیز فرصت نمی کنم روش کار کنم، اما امیدوارم مورد توجه دوست واقع بشه و خودشون تکمیلش کنند
توابع نوشتن متن در هر جایی از lcd با تابع
lcd_puts(font , address x, address y,Text,Laguage)
lcd_putsf(font , address x, address y,Text,Laguage)
lcd_putchar(font , address x, address y,char,Laguage)
مثلا
glcd_puts(font16x8,2,2,"Chnage Select",E_LETTER);
glcd_puts(font16x8,15,11,str,E_LETTER);
glcd_putchar(font16x8,15,11,’A’,E_LETT ER);
توابع کشیدن عکس
void glcd_imgset(char flash *str,char x,char y)
عکس آرایه ای
void glcd_imgarray(char flash *ff,char x,char y,char d)
توابع کشیدن اشکال گرافیکی
خواندن یک پیکسل
char glcd_pixelr(char x,char y);
پر کردن یک پیکسل
void glcd_pixelw(char x,char y,char color);
کشیدن یک خط
void glcd_line(int x1, int y1, int x2, int y2,char wide, char dot,char space);
کشیدن یک خط افقی
void glcd_lineh(char x, char y, char length, char wide,char color);
کشیدن یک خط عمودی
void glcd_linev(char x, char y, char length, char wide,char color);
کشیدن دایره
void glcd_circle(int xc, int yc, int r,char fill,char color);
کشیدن یک مستطیل
void glcd_rect(char x1,char y1 , char x2,char y2,char wide,char fill,char color);
در این کتابخانه همچنین چهار کنترل اصلی تعریف شده است
کنترل button :برای بکارگیری آن باید یک ساختار از این رو بسازید
BUTTON btn1;
//********** Structures ************************
struct BUTTON{
unsigned char flash *font;
char x;
char y;
char width;
char height;
char status;
char *str;
char language;
};
// Init Button 1
btn1.x=5;
btn1.y=40;
btn1.font=font8x8;
btn1.str=stback; //stback = “Back”
btn1.status=_SELECT_;
که شامل طول و عرض و موقعیت و وضعیت دکمه است و نوع فونت مورد استفاده و متن دکمه می باشد
اگر status یا همان وضعیت می تواند سه وضعیت داشته باشد
#define _NORMAL_ 0 حالت نرمال مقدار صفر
#define _SELECT_ 1حالت انتخاب مقدار یک
#define _CLICK_ 2حالت کلیک مقدار دو
پس از تغییرات ساختار دکمه باید آن را نمایش داده ، که برای کشیدن آن از دستور زیر استفاده می شود
glcd_button(&btn1);
کنترل Processor bar :
این کنترل از ساختار زیر باید ایجاد شود
struct PROCESSORBAR{
char x;
char y;
char width;
char height;
char min;
char max;
char scale;
char control;
char value;
};
x,y موقعیت مکانی کنترل، width,height طول و عرض کنترل، min,max حداکثر و حداقل مقداری که درحال نمایش آن هستیم، scale تعداد اشل بندی (نقطه های کنار کنترل) را مشخص می کند، و value مقداری که کنترل دارد و در حال نمایش آن هست
هر بیت متغییر control برای تغییر قسمتی از کنترل می باشد
بیت 0 برای تعیین رنگ کنترل
بیت 1 برای تعیین افقی یا عمودی بودن کنترل (فقط نوع 000 در حالت افقی عمل می کند) و بقیه انواع کنترلها فقط در حالت عمودی کار می دهد
بیت 2 نمایش عدد کنار اشل بندی کنار (خیلی روش کار نشده) و باید نمایش اشل هم یک شود
بیت 3 اشل بندی را نمایش بدهد یا نه بطوری که با صفر کردن یک بیت scale یا همان اشل بندی نمایش داده نمی شود
بیت 4 اشل بندی سمت راست قرار بگیرد یا سمت چپ اگر صفر باشد سمت راست و اگر یک باشد سمت چپ
بیت 5و6و7 نوع کنترل را مشخص می کند
اگر 000 به تر تیب از راست به چپ 5و 6و 7

نوع 001 و 011 فقط عرض خط نشانده هنده با هم فرق دارد

نوع 010 مثل بالا است ولی نمایشگر دارای لبه است

نوع 100

برای کشیدن یک prossecorbar از دستور زیر باید استفاده کرد
glcd_processorbar(&اسم ساختار);
کنترل checkbox
از ساختار زیر استفاده می کند
struct CHECKBOX{
unsigned char flash *font;
char x;
char y;
char status;
char *str;
char language;
};
تنها نکته در تعیین متغییر status است که سه وضعیت می تواند داشته باشد
کلیک _CLICK_ یعنی حالت مارک شده
حالت _SELECT_ یعنی فوکوس روش باشه
حالت معمولی _NORMAL_ مارک نشده
برای کشیدن کنترل هم از دستور زیر استفاده می شود
glcd_checkbox(&اسم ساختار);
برای کنترل radiobox هم مانند checkbox باید عمل کرد
ساختار ایجاد آن به صورت زیر است
struct RADIOBOX{
unsigned char flash *font;
char x;
char y;
char status;
char *str;
char language;
};
و دستور کشیدن آن
glcd_radiobox(&اسم ساختار);
کتابخانه خیلی جای کار داره اما از اونجایی که حالا حالاها وقت کامل کردن اون رو ندارم فکر کردم بهتر در اختیار دوستان قرار بگیره شاید شما کاملش کنید
راستی به دلیل اینکه از رم میکرو استفاده نشده سرعت آن خیلی پایین اومده به دلیل اینکه برای کشیدن یا نوشتن هرچیزی باید مقدار درون حافظه LCD را خوانده تغییرات را انجام بدهد و دوباره به lcd بفرستد که سرعت را بشدت پایین می آورد. البته می توان با تغییر دستورات زیربنایی مانند خواندن و نوشتن،و چند تابع دیگر این مشکل سرعت را حل کرد اما باید از رم میکرو استفاده شود.
چون هنوز کامل نیست برای اینکه دوستان که مایل باشند روی این کتابخانه کار کنند و نتایج خودشون رو جایی اعلام کنند این تایپک رو ایجاد کردم
دانلود کتابخانه به همراه یک مثال
http://telec.persiangig.com/avr_amoo...with_farsi.zip
نمونه
http://telec.persiangig.com/avr_amoo...imple_glcd.swf
کتابخانه ای که نوشته ام هرچند هنوز کامل نشده و به این زودیها نیز فرصت نمی کنم روش کار کنم، اما امیدوارم مورد توجه دوست واقع بشه و خودشون تکمیلش کنند
توابع نوشتن متن در هر جایی از lcd با تابع
lcd_puts(font , address x, address y,Text,Laguage)
lcd_putsf(font , address x, address y,Text,Laguage)
lcd_putchar(font , address x, address y,char,Laguage)
مثلا
glcd_puts(font16x8,2,2,"Chnage Select",E_LETTER);
glcd_puts(font16x8,15,11,str,E_LETTER);
glcd_putchar(font16x8,15,11,’A’,E_LETT ER);
توابع کشیدن عکس
void glcd_imgset(char flash *str,char x,char y)
عکس آرایه ای
void glcd_imgarray(char flash *ff,char x,char y,char d)
توابع کشیدن اشکال گرافیکی
خواندن یک پیکسل
char glcd_pixelr(char x,char y);
پر کردن یک پیکسل
void glcd_pixelw(char x,char y,char color);
کشیدن یک خط
void glcd_line(int x1, int y1, int x2, int y2,char wide, char dot,char space);
کشیدن یک خط افقی
void glcd_lineh(char x, char y, char length, char wide,char color);
کشیدن یک خط عمودی
void glcd_linev(char x, char y, char length, char wide,char color);
کشیدن دایره
void glcd_circle(int xc, int yc, int r,char fill,char color);
کشیدن یک مستطیل
void glcd_rect(char x1,char y1 , char x2,char y2,char wide,char fill,char color);
در این کتابخانه همچنین چهار کنترل اصلی تعریف شده است
کنترل button :برای بکارگیری آن باید یک ساختار از این رو بسازید
BUTTON btn1;
//********** Structures ************************
struct BUTTON{
unsigned char flash *font;
char x;
char y;
char width;
char height;
char status;
char *str;
char language;
};
// Init Button 1
btn1.x=5;
btn1.y=40;
btn1.font=font8x8;
btn1.str=stback; //stback = “Back”
btn1.status=_SELECT_;
که شامل طول و عرض و موقعیت و وضعیت دکمه است و نوع فونت مورد استفاده و متن دکمه می باشد
اگر status یا همان وضعیت می تواند سه وضعیت داشته باشد
#define _NORMAL_ 0 حالت نرمال مقدار صفر
#define _SELECT_ 1حالت انتخاب مقدار یک
#define _CLICK_ 2حالت کلیک مقدار دو
پس از تغییرات ساختار دکمه باید آن را نمایش داده ، که برای کشیدن آن از دستور زیر استفاده می شود
glcd_button(&btn1);
کنترل Processor bar :
این کنترل از ساختار زیر باید ایجاد شود
struct PROCESSORBAR{
char x;
char y;
char width;
char height;
char min;
char max;
char scale;
char control;
char value;
};
x,y موقعیت مکانی کنترل، width,height طول و عرض کنترل، min,max حداکثر و حداقل مقداری که درحال نمایش آن هستیم، scale تعداد اشل بندی (نقطه های کنار کنترل) را مشخص می کند، و value مقداری که کنترل دارد و در حال نمایش آن هست
هر بیت متغییر control برای تغییر قسمتی از کنترل می باشد
بیت 0 برای تعیین رنگ کنترل
بیت 1 برای تعیین افقی یا عمودی بودن کنترل (فقط نوع 000 در حالت افقی عمل می کند) و بقیه انواع کنترلها فقط در حالت عمودی کار می دهد
بیت 2 نمایش عدد کنار اشل بندی کنار (خیلی روش کار نشده) و باید نمایش اشل هم یک شود
بیت 3 اشل بندی را نمایش بدهد یا نه بطوری که با صفر کردن یک بیت scale یا همان اشل بندی نمایش داده نمی شود
بیت 4 اشل بندی سمت راست قرار بگیرد یا سمت چپ اگر صفر باشد سمت راست و اگر یک باشد سمت چپ
بیت 5و6و7 نوع کنترل را مشخص می کند
اگر 000 به تر تیب از راست به چپ 5و 6و 7

نوع 001 و 011 فقط عرض خط نشانده هنده با هم فرق دارد

نوع 010 مثل بالا است ولی نمایشگر دارای لبه است

نوع 100

برای کشیدن یک prossecorbar از دستور زیر باید استفاده کرد
glcd_processorbar(&اسم ساختار);
کنترل checkbox
از ساختار زیر استفاده می کند
struct CHECKBOX{
unsigned char flash *font;
char x;
char y;
char status;
char *str;
char language;
};
تنها نکته در تعیین متغییر status است که سه وضعیت می تواند داشته باشد
کلیک _CLICK_ یعنی حالت مارک شده
حالت _SELECT_ یعنی فوکوس روش باشه
حالت معمولی _NORMAL_ مارک نشده
برای کشیدن کنترل هم از دستور زیر استفاده می شود
glcd_checkbox(&اسم ساختار);
برای کنترل radiobox هم مانند checkbox باید عمل کرد
ساختار ایجاد آن به صورت زیر است
struct RADIOBOX{
unsigned char flash *font;
char x;
char y;
char status;
char *str;
char language;
};
و دستور کشیدن آن
glcd_radiobox(&اسم ساختار);
کتابخانه خیلی جای کار داره اما از اونجایی که حالا حالاها وقت کامل کردن اون رو ندارم فکر کردم بهتر در اختیار دوستان قرار بگیره شاید شما کاملش کنید
راستی به دلیل اینکه از رم میکرو استفاده نشده سرعت آن خیلی پایین اومده به دلیل اینکه برای کشیدن یا نوشتن هرچیزی باید مقدار درون حافظه LCD را خوانده تغییرات را انجام بدهد و دوباره به lcd بفرستد که سرعت را بشدت پایین می آورد. البته می توان با تغییر دستورات زیربنایی مانند خواندن و نوشتن،و چند تابع دیگر این مشکل سرعت را حل کرد اما باید از رم میکرو استفاده شود.
چون هنوز کامل نیست برای اینکه دوستان که مایل باشند روی این کتابخانه کار کنند و نتایج خودشون رو جایی اعلام کنند این تایپک رو ایجاد کردم
دانلود کتابخانه به همراه یک مثال
http://telec.persiangig.com/avr_amoo...with_farsi.zip
دیدگاه