آموزش ۹ ال سی دی گرافیکی با کدویژن جدید قسمت ۱

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

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

بنابراین بهتر است نحوه راه اندازی با نسخه جدید کدویژن را یاد بگیریم نحوه راه اندازی با کدویژن قبلی در پست های بعدی بصورت مختصر توضیح داده خواهد شد.

A_DX2

این ال سی دی دارای رزولوشن ۱۲۸x64 می باشد که در هر ردیف ۱۲۸ پیکسل و در ستون ۶۴ پیکسل را شامل می شود که تک رنگ بوده و پیکسل ها تنها از حالت روشن و خاموش پشتیبانی می کنند  این نمایشگر ها گزینه خوبی برای نمایش اطلاعات پروژه و ورودی خروجی های آن است و می توان در صنعت نیز این نمایشگر را به وفور یافت  اول از همه با پایه های این ال سی دی آشنا بشیم

td_libs_GLCD_3c-(1)همون طور که تو عکس بالا می بینید پایه یک و دو پایه ورودی ولتاژ هستند پایه سوم جهت تنظیم میزان پرنگ یا کم رنگ بودن پیکسل ها به کار میره پایه های ۴ تا ۱۷ هم ورودی دستور و دیتا هستند پایه ۱۸ با یک پتانسیومتر به پایه ۳ وصل خواهد شد جهت تنظیم کنتراست پایه ۱۹ و ۲۰ تغذیه بک لایت هست که باید با یک مقاومت ۳۳۰ یا ۴۷۰ اهم به ۵ ولت وصل بشه.

حال شروع به نوشتن برنامه می کنیم و سپس بستن مدار:

نحوه ایجاد پروژه بدون کد ویزارد:

برای لود سریع عکس ها کوچک شده اند که با کلیک روی هر عکس می توانید عکس را در اندازه ی اصلی مشاهده نمایید

۱-ایجاد پروژه از منوی فایل

 

 

1

۲-بر روی No کلیک کنید(از شما می پرسد که آیا از کد ویزارد می خواهید استفاده کنید؟NO)

2۳-برای پروژه یک نام انتخاب کرده و Save کنید.

 

3

 

۴-چیپ مورد نظر را انتخاب کنید در اینجا ما از میکروی mega32  استفاده کردیم.
4

 

۵-در صفحه باز شده به تب C compiler رفته و تب Code generation رل انتخاب و در آنجا فرکانس کاری میکرو را تایید کنید در اینجا فرکانس کاری ۸ مگا هرتز انتخاب شده است بعد از تایین فرکانس در همین صفحه به تب libraries بروید.
5

 

۶-در تب libraries به تب Graphic Display بروید در Display Type نوع چیپ نمایشگر که همان KS0108 128×64 CS1,CS2 می باشد را انتخاب کنید.سپس پورت دلخواه خود را در تب دیتا تنظیم کرده و به تب کنترل بروید
6

 

۷- در تب کنترل پورت مورد نظر را نیز تنظیم کرده و بر روی OK کلیک کنید.
7

 

بعد از کلیک بر روی ok صفحه زیر نمایش داده خواهد شد که شروع به برنامه نویسی میکنیم.
8

همان طور که در کد ایجاد شده می بینید خود برنامه فایل io.h را به برنامه اضافه کرده و اگر به داخل این فایل نگاهی بیاندازیم خواهیم دید که همان فایل کتابخانه ای میکروکنترلر را به برنامه اضافه می کند اگر می خواهید می توانید این فایل را پاک کرده و فایل میکروی مورد نظر را اضافه کنید در این برنامه برای راحتی کار این عمل را انجام داده ایم:

خوب حالا باید فایل های مربوط به نمایشگر گرافیکی را به برنامه بیافزاییم:

همان طور که مشاهده می کنید فایل اول مربوط به نمایشگر می باشد و فایل دوم فونت استاندارد خود کدویژن می باشد که برای نوشتن روی ال سی دی نیاز خاهد شد.

حال برای مقدار دهی اولیه طبق راهنمای خود کدویژون یک مغییر برای نمایشگر تعریف میکنیم (داخل تابع main):

در کد بالا متغییر glcd_init_data را از نوع  GLCDINIT_t تعریف کردیم بجای glcd_init_data از هر کلمه ای می توانید استفاده کنید.

در کد فوق فونت وارد شده به برنامه را به مغییر ال سی دی تعریف کرده و با استفاده از تابع gld_init نمایشگر را راه اندازی اولیه کردیم حال ال سی دی اماده اجرای دستورات می باشد.

برای نوشتن یک متن ساده بر روی ال سی از تابع زیر بصورت کد زیر استفاده  خواهیم کرد:

با اجرای دستور فوق متن مورد نظر از حافظه فلش میکرو در ال سی دی نمایش داده خواهد شد کارکتر n\ به معنای اینتر در کیبورد می باشد یعنی نمایشگر هنگام دریافت این کاراکتر از سطر بعدی شروع به نمایش خواهد کرد به اجرای کد فوق که دارای این کارکتر است نگاه کنید:

1testحال اگر بخواهیم متن مورد نظر در مکان دلخواهی از صفحه نمایش داده شود باید از تابع glcd_outtextxyf بصورت زیر استفاده کنیم:

همان طور که میبینید دو عدد برای تابع ارسال کردیم که اولی موقعیت X که عددی بین ۰ تا ۱۲۷ که همون طول نمایشگر می باشد و عدد دوم عدد بین ۰ تا ۶۳ می باشد که همان Y یا سطر یا عرض نمایشگر می باشد خروجی کد بالا بصورت زیر می باشد:

test2

برای پاک کردن نمایشگر نیز میتوانید از تابع glcd_clear بصورت زیر استفاده کنید:

تابع glcd_outtext(char) :
این تابع برای نمایش محتویات یک متغییر از حافظه میکرو می باشد برای مثال می خواهیم محتویات متغییر buffer را که یک متغییر از نوع string است را بنمایش در بیاوریم:

همان طور که مشاهده نمودید یک متغییر بنام buffer از نوع رشته با طول ۱۶ کارکتر تعریف کردیم سپس نمایشگر را پاک کرده و محتویات buffer را نمایش دادیم چون متغییر buffer را مقدار دهی نکرده ایم نمایشگر چیزی را نمایش نواهد داد در ادامه نحوه مقدار دهی را توضیح خواهم داد.

تابع glcd_outtextxy(x,y,cahr) :

این تابع همانند تابع قبلی است با این تفاوت که می توان موقعیت نمایش را تغییر داد.

تابع sprintf :

از این تابع برای مقدار دهی متغیر ها برای نمایش در ال سی دی استفاده خواهیم کرد این تابع صرفا برای ال سی دی ها نبوده و تابعی برای کار با رشته ها می باشد از این تابع در آموزش کار با ال سی دی کارکتری نیز استفاده شده (برای دیدن این آموزش اینجا کلیک کنید)

برای استفاده از این تابع باید فایل کتابخانه ای این تابع را به برنامه وارد کنید بصورت زیر:

حال از این تابع می توانید استفاده کنیم فرم تابع به صورت زیر است:

این تابع می تواند متغییر ما را که در اینجا همان buffer می باشد را بصورت های مختلف مقدار دهی کند برای واضح شدن موضوع در چند مثال توضیح میدهم:

در کد بالا تابع متغییر buffer را برابر با مقدار پارامتر بعدی که همان کلمه Test  sprintfمی باشد مقدار دهی می کند و سپس روی ال سی دی بصورت زیر نمایش می دهد .

test3

 

حال می خواهیم مقدار یکی از پایه های آنالوگ به دیجیتال(ADC) را خوانده و ولتاژ موجود را در ال سی دی نمایش دهیم:

(مبدل آنالوگ به دیجیتال قبلا در اینجا آموزش داده شده)

در کد بالا یک متغییر بنام a از نوع integer تعریف کردیم در خط دوم مقدار پایه ADC1 را خوانده و در متغیر a ذخیره کردیم حال در خط سوم مقدار d% را که همان مقدار متغییر a می باشد را در بافر قرار داده و در ال سی دی نمایش دادیم :

test4

در کد بالا d% به این معنی می باشد که مقدار پارامتر بعدی یعنی a را بصورت یک عدد صحیح علامت دار بخواند و در متغییر buffer قرار دهد بجای d بعد از % می توان از کارکتر های زیر استفاده کرد:

sprintf

همان طور که میبینید از کارکتر i نیز بجای کارکتر d می توان استفاده کرد

 

حال می خواهیم کد بالا را کمی زیبا تر و بهتر نمایش دهیم:

نتیجه کد بالا بصورت زیر خواهد بود:

test5

باز هم برای بهتر شدن وضعیت می توان بصورت زیر عمل کرد که متغییر a را همیشه بصورت عدد چهار رقمی نشان داد :

عدد ۰۴ که در کد بالا می بینید به این معنی می باشد که متغییر a را بصورت چهار رقمی بخواند و اگر a کمتر از چهار رقم باشد بجای آن صفر قرار دهد حال خروجی را مشاهد نمایید:test6

مثال دیگر

عدد ۰۴ را به ۴ تبدیل کردیم حالا بازهم مثل کد قبل a یک عدد چهار رقمی خوانده خواهد شد با این تفاوت که در صورت چهار رقمی نبودن a کاراکتر خالی نمایش داده خواهد شد:

test7

مثال آخر sprintf

خروجی:test8

تحلیل کد بالا رو به خودتون میسپارم ولی اگه سوالی بود در قسمت نظرات بپرسید.

توجه !در صورتی که کد بالا را اجرا کردید و چیزی رو ال سی دی نمایش داده نشد مراحل زیر رو طی کنید:

9 10

 

در آموزش بعدی مربوط به این نمایشگر نحوه نمایش عکس و استفاده از سایر فونت ها آموزش داده خواهد شد.

موفق باشد.

 

85 دیدگاه در “آموزش ۹ ال سی دی گرافیکی با کدویژن جدید قسمت ۱

  1. سلام
    کیشه سریعتر مطالب مربوط به نمایش عکس هم نشون بدید.
    اگه توابع به صورت لیست در بیاررید ممنون میشم. مثل این سایت
    http://www.techno-electro.com/353–glcd-.html
    کتابخانه خیلی خوبی .ایا مثل این کتابخانه توبع داره؟
    اگه میشه همانند پروژه این سایت شماهم قرار بدین. مثل چشمک زدن چشم با ال سی دی گرافیکی

  2. فقط می تونم بگم به وجود امثال شما افتخار می کنم چون بدون منت، بدون درخواست چیزی، برا بقیه افراد وقت می زارین. خداوند به شما صد چندان دهند هم از لحاظ علمی و هم از لحاظ انگیزه. و عاقبت بخیری هم نصیب تون بشه.

  3. سلام خسته نباشید
    پروژه من در مورد تقویت کننده ecgو دیدن سیگنال های قلبی روی lcd هست من با نوشتن این کدهایی که اینجا نوشتید و تبدیل مبدل به آنالوگ میتونم سیگنال مورد نظرم رو ببینم ؟

  4. باعرض سلام و خسته نباشید
    مدت کوتاهی است که بنا به نیاز روی این موضوع کار میکنم که ببینم چطور میشه از این مدل نمایشگر به صورت ۱۲۸*۶۴ استفاده کرد و داده ها در عرض نمایش داده شوند…
    به نوعی از ال سی دی به صورت قدی استفاده کرد!
    ————————————————————
    دو موضوع مطرح هست…
    ۱- آیا دستور یا روشی برای ۹۰درجه دوران وجود دارد….؟؟؟؟
    ۲-باید در دستورات و ریجیستری ها تغییرات جدید اعمال کرد و به نوعی کد جدیدی نوشت؟؟؟
    ————————————————————
    البته اگر کسی بگه نمیشه حرف نادرستی میزنه….و من تلاش میکنم و درستش میکنم!

    1. سلام
      نه دستور خاصی نداره برای دوران.
      شدنش که فکر کنم بشه.باید توابع خودتونو برای ال سی دی بنویسن در ضمن تو کد ویژن اگه از کتابخانه استاندارد خودش استفاده کنین نمی تونین به خواسته خودتون برسین پیشنهاد می کنم از کدویژن به اتمل استودیو کوچ کنین و دیتا شیت ال سی دی رو نگاه کنین که چجوری دستورات رو نشنون میده.
      من هم دیگه اموزش ها رو با atmel studio ادامه خواهم داد به علت اینکه کدویژن مشکلاتی رو برام درست کرد.
      تو کتابخانه ای که تو لینک زیر گذاشتم برای ال سی دی گرافیکی نوشته شده تابع Portrait و Landscape اضافه کردن ولی من امتحان نکردم برای winavr نوشته شده.
      http://www.eca.ir/forum2/index.php?topic=51530.0

      1. سلام. منم همین مشکلو داشتم با این نکته شماحل شد .. . از ادمین جان هم درخواست دارم ک این نکته رو در سایت یاد اوری کنن.. تشکر از همگی. خصوصا مولف سایت

  5. سلام
    من LCD رو راه انداختم.
    ولی مثل اینکه LCD از وسط از بالا به پائین بریده شده و دو قسمتش با هم جابجا شده اند.
    یعنی یه دایره رو، دو نیم دایره پشت به پشت هم نشون میده.
    مشکل چیه؟

  6. سلام. اقا من هر کاری میکنم رو صفحه ال سی دی هیچ متنی نمینویسه و فقط نقطه چین میاد باید چیکارش کنم؟
    بابت آموزش هاتون ممنون

  7. سلام.من دقیقا مثه شما اتصالات رو وصل کردم. مثه شما هم کد نوشتم.فقط به جای شما از کدویزارد پایه ها رو لود کردم. توی پروتئوس چیزی نشون نمیده.بعلاوه اینکه پایه های میکرو و ال سی دی هم زرد میشه.یعنی اتصال کوتاه

      1. ببین من فقط از lcd ام این انتظار رو دارم.
        ۱- بتونم باهاش رشته به نام خدا به انگلیسی رو بنویسم.
        ۲- بتونم باهاش محتویات درون کاراکتر رشته ای C رو نمایش بدم.همین

      1. بدجوری گیر کردم می خوام عکس بذارم نمیشه
        چندتا سایت هست که گذاشته اما با کدویزارد نیست من با کدویزارد میخوام
        اگ ی پروژه دارین بذارین شاید مشکلم حل شد

  8. سلام. من بعد از انجام قسمت ۷ وقتی ok میزنم فقط صفحه سفید نشون میده نمیتونم بدون کدویزارد تنظیم کنم .امکانش هست مشکل از کدویژن باشه؟

  9. با سلام
    بنده کد ها رو که گذاشتید نوشتم مثل زیر :
    #include
    #include
    #include
    void main(void)
    {
    while (1)
    {
    glcd_outtextf(“in the name of god\nGLCD TEST”);
    }
    }
    ولی ال سی دی هیچی نشون نمیده پایه های ال سی دی هم مثل شکله که گذاشتین
    لطفا کمک کنید.
    ممنونم

  10. سلام .خیلی ممنون از این سایت پرمحتوای شما
    اگر امکان داره جواب بدهید من بعد از نوشتن متنی
    میخوام ۳خروجی برام فعال بشه .و صفحه تاچ باشد.
    ممنون میشم راهنماییم کنید.

  11. سلام
    وقتتون بخیر
    ببخشید من میخوام تصویر خودمو تو eeprom ذخیره کنم و از اونجا بخونم و بیارم رو صفحه امکانش هست؟ میشه دستورشو بگید؟ وراهنماییم کنید.
    مصلا یک کیپد هست که میخوام روش تاچ بزارم (منظورم تصویر صفحه کلیده) امکانش هست تو eeprom بزارمش ؟
    با تشکر

  12. من انجام دادم قسمت اول گیر کردم نوشن شروع میشه مشخصه ولی همین طور که کلمه منو مینویسه برای هر کاراکتر من یه مربع سیاه درست میکنه که دیگه کلمه قابل تشخیص نیست و نهایتاsalam را یه خط سیاه کلفت دیده میشه با سرعت مینویسه و خیلی سریع در حدی که دیده نشه انگار با ماژیک سیاهش میکنه علت چیه شما میدونین؟

  13. سلام تشکر از آموزش خوبتون
    میخواستم بپرسم چطور میشه تو کدیویژن از دوتا فونت استفاده کرد یک فونت خود کدیویژن و یک فونتی که خودم درست کردم

    1. سلام ممنون
      آموزش قسمت ۱۴ (فارسی نویسی در ال سی دی)رو بخونید از هر چند تا فونت که بخواهید میتونید استفاده کنید

  14. سلام . ممنون اززحمتی که کشیدید . اما من هیچی متوجه نشدم . میشه امائش رو برام بفرستین تا یک بار از روش بخونمتا متوجه بشم . خیلی لازم دارم این ال سی دی گرافیگیو

    1. در این برنامه از کتابخانه خود کد ویژن استفاده شده و قابل استفاده در اتمل استدیو نیست
      برای این که در اتمل استدیو این lcd رو راه اندازی کنید باید فایل کتابخانه ای این ال سی دی رو از اینترنت دانلود کنید(زیاد هست و خیلی راحت پیدا میشه)
      با اینکه اتمل استودیو نرم افزار خوبی هست ولی پیشنهاد میکنم به اردینو کوچ کنید چون هم اموزش هاش زیاد تر هست و هم با برد های جدید سازگارتره و باهاش بهتر میتونید پیشرفت کنید

        1. سلام در آدرس زیر کتابخانه به زبان c نوشته شده و با اکثر کامپایلر ها سازگار هست حتی با کمی تغییر در آردینو نیز قابل استفاده است همچنین برای اکثر میکرو های نیز نوشته شده از جمله
          avr lpc stm32 و غیره
          در پایین صفحه لینک زیر میتونید فایل رو دانلود کنید و فایل مربوط به میکروتون رو که avr هست استفاده کنید من به شخصه تستش نکردم ولی به احتمال خیلی زیاد کار میکنه
          http://en.radzio.dxp.pl/ks0108/

    1. دقت کنید که نوع LCD تان در پروتئوس را درست انتخاب کرده اید. چون در کتابخانه پروتئوس دو مدل lcd ks0108 وجود دارد. ضمنا کلاک برنامه تان و همچنین میکروتان در پروتئوس را روی ۴MHz یا کمتر قرار دهید.

  15. سلام. ببخشید اگه اون مدل ال سی دی گرافیکی که می خوایم باهاش کار کنیم ، داخل کدویژن نباشه ، باید چیکار کرد ؟

  16. سلام من همون کدای بالا رو نوشتم ولی در پروتوس وقتی پوشه ی ک کد توش ذخیره کردم فایله موجود نیست؟؟؟
    میشه راهنمایی کنید!

  17. سلام .همون کدهای بالا رو تایپ کردم ولی روی lcd چیزی نمایش نمیده؟؟ #include
    #include
    #include
    #include

    void main(void)
    {
    GLCDINIT_t glcd_init_data;
    while (1)
    {
    glcd_init_data.font-font5x7;
    glcd_init(&glcd_init_data);
    glcd_outtextf(“welcome”);
    } delay_ms(1000);
    }

  18. با سلام و خسته نباشید.
    یه پروژه مار بازی مبتنی بر atmega64 و ks0108 دانلود کردم توش از این سه دستور استفاده کرده برای ال سی دی.
    OnePixel
    ClearDisBuf
    UpdateDis
    خواستم بدونم این دستورات مرتبط به این ال سی دی گرافیکی هست؟
    البته فایل هدر مربوط به ال سی دی هم اشتباه نوشتن.

    اینم لینک پروژه:
    http://community.atmel.com/projects/snake-game-12864lcd-ks0108-based-atmega64

  19. سلام . ممنونم بابت این اموزشا .. یه سوال . اون قستمت sprintf که اولش توضیح میدین .کهمقدار sprintf test رو نمایش میدین. من هرکاری میکنم رو ال سی ی نمیاره .. اگه امکانش هست بعد توضیح دادن هر تابع یه نمونه کد کامل از اول تا اخر قرار بدید تا بدونیم کدوم کد کجا باید قرار بگیره .. نمیدونم مشکلم از چیه ..

  20. با سلام وخسته نباشید به شما مهندس عزیز

    لطفا یک پروژه تاچ مقاومتی ۱۲۸*۶۴ به زبان سی با همراه آموزش درسایت قرار بدین .

    قبلا از زحمات جناب عالی ممنونم.

  21. سلام اقا من میخوام بهترین برنامه ی کد زنی برای میکرو کنترولر هارو پیداکنم
    طبق گفته هاتون کدویژن مشکل داره الان اتمل استودیو بهترین برنامست؟؟

  22. سلام ممنون بابت آموزش
    من پروژه ساخت اسیلوسکوپ دارم از دوستان پرسیدم گفتن از نرم افزار glcd استفاده کردن .ولی من بلد نیستم ازش استفاده کنم میشه راهنماییم کنید راجع به پروژه ام؟از ساخت و خرید قطعات تا همین ال سی دیش مشکل دارم

    1. میتونین با استفاده از ۲ تا آی سی ساده و شبکه لامپ LED اسیلوسکوپ ارزون قیمت و جالب و بی درنگ(real-time) درست کنین.
      اگه خواستین میتونم راهنمایتون کنم.
      (تو اینی که من گفتم هیچ نیازی به تراشه AVR نیست)

  23. سلام
    یک برد داریم (برد از پیش ساخته شده است و ما اطلاعاتی از نحوه کار ان نداریم)که اطلاعات چندتا سنسور رو میگیره و تویه یک ال سی دی ۶۴*۱۲۸ اطلاعات رو نشون میده(اکثر سنسور ها برای دمان یا سطح هستن)
    میخوام این اطلاعات رو از ال سی دی بگیرم و توو لپتاپ نشون بدم
    راهش چیه؟
    اصلا این کار عملی هست یا نه؟
    ممنون میشم کمکم کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *