برای مشاهده روند ساخت پروژه ها و محصولات به کانال تلگرام ما بپیوندید           
  خانه محصولات دانلود پروژه ها بحث و گفتگو وبلاگ آموزشها و مقالات تماس با ما  

  فروم khazama.com --> الکترونیک دیجیتال --> سورس توابع LCD گرافیکی

  دوشنبه 31 ارديبهشت 86 , 5:25 PM


کاربر
h_ghadiri
تعداد پستها : 5
سورس توابع LCD گرافیکی

سلام.

من دنبال توابعی به زبان C می گردم که با اونا بشه خط و نقطه و دایره رو روی LCD گرافیکی با استفاده از AVR نشون داد. LCD من از کنترلر KS0108 استفاده می کنه. اگه ممکنه این توابع و header file ها و library هاشونو بهم معرفی کنین و در صورت امکان توی سایت قرار بدین.

ممنونم


  چهارشنبه 2 خرداد 86 , 4:42 PM


مدیر سایت
behzad
تعداد پستها : 905

درود .

این کد تابحال فروشی بود (بخشی از کد اوسیلوسکپ جیبی) ولی این بخشی که شما نیاز دارید رو من اینجا میزارم (بخشهای ارسال کاراکتر فارسی و نمایش عکس حذف شد) .

#include <mega32.h>
#include <delay.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

#define LCD PORTA
#define CS1 PORTC.7
#define CS2 PORTC.6
#define RS PORTC.3
#define E PORTC.4
#define Reset PORTC.5

unsigned char fontnum=0;
bit inlines=0;
unsigned char tmp[18][8];

//==============================
//
void xx(unsigned char a){

E=0;
RS=0;
LCD=a+184; // page address
E=1;
delay_us(5);
E=0;

}

//==============================
//
void yy(unsigned char a){
E=0;
RS=0;
LCD=a+64; //y address
E=1;
delay_us(5);
E=0;

}

//==============================
//
void s_data(unsigned char a){
E=0;
RS=1;
LCD=a ;
E=1;
delay_us(5);
E=0;
}

//==============================
//
void clear (unsigned char data){
unsigned char x=0,y=0;

CS1=1;
CS2=1;

for(x=0;x<=7;x++){
for(y=0;y<=63;y++){
yy(y);
xx(x);
s_data(data);
tmp[y][x]=data;
tmp[y+64][x]=data;

}
}
CS1=0;
CS2=0;

}

//==============================
//
void s_comm(unsigned char cmd){
CS1=1;
CS2=1;

E=0;
RS=0;
LCD=cmd;
E=1;
delay_us(10);
E=0;

CS1=0;
CS2=0;
}

void GLCD_init(void){
Reset=0;
delay_us(10);
Reset=1;
clear(0);
s_comm(0x3f);
}

//====================================================
void point(unsigned char x,unsigned char y){
unsigned char i=0 ,j=0 , k=0;

if (x>63) {CS1=0;CS2=1;x-=64;k=64;}
else {CS1=1;CS2=0;};


yy(x);
i=(unsigned char)(y/8);
xx(7-i);

j = y - (i*8);
tmp[x+k][7-i] = tmp[x+k][7-i] | (128 >> j) ;
s_data(tmp[x+k][7-i]);

CS1=0;
CS2=0;

}

void line(int startx,int starty,int endx,int endy){

int t,distance ;
int xerr=0,yerr=0,deltax,deltay;
int incx,incy;
deltax=endx-startx;
deltay=endy-starty;
if(deltax>0) incx=1;
else if(deltax==0) incx=0;
else incx=-1;

if(deltay>0) incy=1;
else if(deltay==0) incy=0;
else incy=-1;

deltax=abs(deltax);
deltay=abs(deltay);

if (deltax>deltay) distance=deltax;
else distance=deltay;

for (t=0;t< distance+1;t++){
point(startx,starty);
xerr+=deltax;
yerr+=deltay;
if (xerr>distance){
xerr-=distance;
startx+=incx;
}
if (yerr>distance){
yerr-=distance;
starty+=incy;
}
} // end of for t..
} // end of line fun

 

اميدوارم مورد استفاده باشه . سوالات رو همینجا بنویسید .

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  يكشنبه 6 خرداد 86 , 9:28 AM


کاربر
h_ghadiri
تعداد پستها : 5
سوال درباره برنامه

سلام.

بابت برنامه ای که برام نوشتین خیلی ممنونم. اگه ممکنه توضیح بدین که این برنامه دقیقا چه کاری انجام می ده و چطور می شه ازش استفاده کرد. اگه لطف کنین و شماتیک مدار با پروتئوس رو هم برام بذارین خیلی خیلی ممنون می شم.

بازم ممنونم. 


  يكشنبه 6 خرداد 86 , 11:48 PM


مدیر سایت
behzad
تعداد پستها : 905

درود .

برای شماتیک و سیم بندی به پروژه اسکپ مراجعه کنید .

راه اندازی نرم افزار با استفاده از این کد که فرستادم خیلی سادس مراحل کار به این شکل هستش .

۱- تنظیمات پایه ها مثل زیر (پیش فرض برنامه)

#define LCD PORTA
#define CS1 PORTC.7
#define CS2 PORTC.6
#define RS PORTC.3
#define E PORTC.4
#define Reset PORTC.5

2- پورتهای مورد استفاده بایستی در وضعیت خروجی تنظیم بشن مثلا برای حالت بالا میشه :

// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

 

3-حالا توی اول برنامتون (بعد ازمقدار دهیهای اولیه که معمولا خود CodeVisionAVR انجام میده ) تابع GLCD_init رو فراخوانی کنید .

حالا کار تمومه میتونید مثلا با تابع Line یه خط رسم کنید یا با تابع point یه نقطه بزارید .

line(0,0,50,50);  // startx , starty , endx , endy

من فرض کردم که شما اصول اولیه برنامه نویسی C رو میدونید و رعایت خواهید کرد مثل تعریف توابع قبل از استفاده .

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  شنبه 12 خرداد 86 , 10:20 AM


کاربر
h_ghadiri
تعداد پستها : 5
تابع رسم دایره

سلام

برنامه ای که برای رسم خط و نقطه به من دادید برنامه خیلی خوبی بود. از بابتش خیلی ممنونم. فقط یه مشکل کوچیک داره و اون اینه که وقتی x رو بیشتر از ۶۳ انتخاب می کنم خط و نقطه در جهت عمودی پهن می شه. اگه ممکنه منو راهنمایی کنین.

اگه ممکنه یه برنامه به من بدین که باهاش بشه دایره هم کشید. اگه این کارو بکنین یه دنیا ازتون ممنون می شم.

خداحافظ


  شنبه 12 خرداد 86 , 12:26 PM


مدیر سایت
behzad
تعداد پستها : 905

درود .

یکی از محورها توی ۶۴ پیکسل محدوده چون lcd شما 64*128 هستش . شما با این کد باید بتونید یک خط از گوشه سمت راست بالا تا گوشه سمت چپ پایین رسم کنید . توی کد هم دقت کنید توی تابع point اول چک میشه که آیا نقطه مربوط به سمت راست lcd هست یا سمت چپ . علت اینه که این lcd ها دو تا پروسسور جدا گانه برای سمت چپ و راست دارن (دو تا بلوک 64*64 کنار هم)

if (x>63) {CS1=0;CS2=1;x-=64;k=64;}
else {CS1=1;CS2=0;};

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  يكشنبه 13 خرداد 86 , 8:34 AM


کاربر
h_ghadiri
تعداد پستها : 5
تشکر

سلام.

می خواستم بابت برنامه هایی که برام نوشتین تشکر کنم. این برنامه ها خیلی به من کمک کرد و باعث شد بتونم ازشون توی چند تا برنامه دیگه هم استفاده کنم.

ممنونم.


  يكشنبه 18 آذر 86 , 12:37 AM


کاربر فعال
HesamAVR
تعداد پستها : 53
سلام

چطور می توان یک کاراکتر استاندارد مثل حرف A یا اعداد را نمایش داد ؟ آیا با این توابع به سادگی LCD کاراکتری امکان پذیر است ؟

  يكشنبه 18 آذر 86 , 11:48 AM


مدیر سایت
behzad
تعداد پستها : 905

درود .
این توابع تمامی توابعی هست که برای ارتباط با LCD گرافیکی نیاز داری. ولی بخشهای مربوط به ارسال کاراکتر رو من حذف کردم . برای ارسال کاراکتر باید یکسری جدول (آرایه) ایجاد کنید که پیکسلهای مربوط به هر کاراکتر رو داشته باشه مثلا برای حرف A یا ب یک آرایه مثلا 8 در 16 که پیکسلهای روشن و خاموش مورد نیاز برای رسم این کاراکتر رو داشته باشه . بعد میتونید با استفاده از ترکیب این توابع یا درک طرز کار اونها توابعیی بنویسید که یک کاراکتر یا یک رشته یا یک عدد رو نمایش بده . این توابع برای رسم خط و نقطه و توابع ارتباطی زیر بنایی هستند .

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  جمعه 23 آذر 86 , 4:07 PM


کاربر فعال
HesamAVR
تعداد پستها : 53
اگه قسمت ارسال کاراکتر رو قرار بدی خیلی خوب می شه . چون خیلی وقتم کمه .
در ضمن می شه با نرم افزارهای طراحی فونت برای این LCD کاراکترو عدد طراحی کرد (به جای این که خودمان پیکسلی طراحی کنیم)

  جمعه 23 آذر 86 , 8:13 PM


مدیر سایت
behzad
تعداد پستها : 905

فعلا که نمیتونم مجانی قرار بدم . این کد بخشی از کد اسکپ دیجیتال هستش . ولی تا جایی که ممکن بود و برای راهنمایی لازم بود رو قرار دادم .
در واقع هم باید همین کار رو بکنید از یکسری فونت حاظری به عنوان منبع استفاده کنید و یه برنامه مبدل بنویسید که فونت رو به آرایه ای با مشخصاتی که در نظر دارید تبدیل کنه .

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  صفحه : [1]  2    
 
 


Designer And Programmer : Behzad khazama
Coded With ASP.NET
تمامي حقوق مادي و معنوي مطالب متعلق به اين سايت ميباشد .
هر گونه استفاده از مطالب اين سايت تنها با ذکر منبع بلامانع ميباشد
.
www.khazama.com
Tel : 051-44641597 - 09363677001 - 09155714862
Support SMS Center: 09363677100