راه اندازی LCD گرافیکی KS108 با STM32 و نحوه معرفی پایه های آن موضوع آموزش این مقاله می باشد پس تا پایان این مقاله با ما همراه باشید . LCD گرافیکی یک واحد نمایش الکترونیکی است که می تواند هر نوع عنصر ارائه شده توسط کاربر را نمایش دهد. برخلاف یک LCD کاراکتری که فقط می تواند حروف الفبا را نشان دهد . یک LCD گرافیکی می تواند تصاویر ، فونت ها و سایر ساختارها را نمایش دهد.
موضوعاتی که در این مقاله به آنها پرداخته خواهد شد :
به طور معمول یکی از LCD گرافیکی هایی که راحت در بازار پیدا می شود و پر کاربرد است . LCD گرافیکی با وضوح 128 × 64 است . به این معنی که می تواند 8192 پیکسل را روی صفحه نمایش دهد .
KS108 یک کنترل کننده نمایش ماتریس نقطه ای تولید شده توسط کمپانی سامسونگ با 64 کانال خروجی است. ورودی را به صورت داده موازی 8 بیتی دریافت می کند و در حافظه RAM که ظرفیت 512 بایت دارد (512 × 8 = 4096 بیت) ذخیره می کند.
برای درایو نمایشگر گرافیکی 128 × 64 ، به دو عدد کنترل کننده KS108 احتیاج داریم و هر یک از آنها نیمی از 64 × 64 پیکسل را کنترل خواهند کرد. برای تولید سیگنال های زمان بندی برای دو کنترل کننده KS108 ، یک کنترل کننده مشترک KS0107 وجود دارد .
در تصویر زیر ، می توانید سه IC با بسته بندی Chip-on-Board) CoB) را در PCB پشت LCD گرافیکی مشاهده کنید. دو تا از آنها KS0108 ، و یکی KS0107 است.
شرح پایه های LCD گرافیکی KS108
LCD گرافیکی KS108 یک ماژول 20 پین است. دارای 8 خط داده ، 6 خط کنترل و 6 پایه مربوط به توان و نمایشگر است. شرح پینها در زیر آورده شده است.
پین های 7 تا 14 (D0 ~ D7) از GLCD KS108 پین دیتا است. ما از این پین ها برای انتقال دیتاها به RAM نمایشگر استفاده می کنیم.
پین های تغذیه KS108
پایه 1 (Vss) این پایه را به زمین وصل کنید . پایه 2 (Vdd) این پایه را به 5 ولت وصل کنید .
پایه 18 (Vee) خروجی یک مولد ولتاژ منفی است. ولتاژ -10 ولت تولید می کند . با استفاده از پتانسیومتر می توانیم با تغذیه ولتاژ منفی پین Vo ولتاژ عملیاتی مورد نیاز را تولید کنیم. ولتاژ LCD حاصل Vdd-Vo خواهد بود (اگر پتانسیومتر در حداقل مقدار باشد ، 5-(-10) = 15V ). طبق دیتاشیت LCD گرافیکی KS108 ، حداکثر ولتاژ مجاز 18 ولت است. برای تغییر کنتراست نمایشگر می توانیم توسط پتانسیومتر ولتاژ Vo را تغییر دهیم.
پایه های 19 آند و 20 کاتد LED نور پس زمینه هستند . برای طول عمر بیشتر LED نور پس زمینه با قرار دادن مقاومت مناسب در مسیر پایه 19 ، جریان را محدود می کنند. اگر لازم است نور پس زمینه را نیز تغییر دهید ، می توانیم از پتانسیومتر استفاده کنیم.
پایه های سیگنال های کنترلی KS108
KS108 یک درایور 64X64 پیکسل است. بنابراین دو عدد KS108 برای درایو صفحه نمایش 128X64 پیکسل لازم هست. از منظر برنامه نویسی ، صفحه LCD از دو LCD جداگانه تشکیل شده است و هرکدام داده ها را به صورت جداگانه دریافت می کنند .
CS1 و CS2 برای انتخاب کنترلر KS0108 استفاده می شود. پین های CS1 و CS2 به برنامه نویس اجازه می دهد تا انتخاب کند کدام تراشه تحویل داده ها را در گذرگاه داده (DB0-DB7) دریافت می کند.
CS1 كنترل كننده سمت چپ و CS2 كنترل كننده سمت راست را انتخاب كرده و به نوبه خود سمت متناظر با صفحه نمايش 64 × 64 پيکسل را انتخاب مي كند. RST پین تنظیم مجدد است ، از آن برای تنظیم مجدد کل محتوای صفحه نمایش با پاک کردن حافظه RAM استفاده می شود.
پین R / W نوع عملیاتی را که توسط GLCD انجام می شود انتخاب می کند ، اگر این پایه در وضعیت High باشد نشان دهنده عملکرد خواندن و اگر این پایه در وضعیت Low باشد عملکرد نوشتن را نشان می دهد.
پین D / I عملیات بین انتقال داده یا دستورالعمل را انتخاب می کند ، اگر این پایه در وضعیت High باشد نشان دهنده عملکرد انتقال دیتا و اگر این پایه در وضعیت Low باشد عملکرد انتقال دستورالعمل را نشان می دهد.
پین Enable کلاک GLCD است. برای انتقال داده یا دستورالعمل ، ابتدا باید داده ها را روی خطوط داده قرار دهید ، سپس پینهای R / W و D / I را با توجه به نوع دستورالعمل یا دیتا تنظیم کنیم . سپس پایه Enable را ابتدا در وضعیت Low و سپس High تنظیم کنید.
برای انتقال داده ها یکی از نکات مهم در هنگام زمان سنجی این است که ، همیشه بعد از هر دستورالعمل یا انتقال داده حداقل 1 میکرو ثانیه تأخیر بدهید. این پارامتر به عنوان Ecycle در دیتاشیت LCD گرافیکی KS108 برابر با مقدار Ecycle 1us تعریف شده است .
بلوک دیاگرام LCD گرافیکی KS108
نمودار بلوک دیاگرام ال سی دی گرافیکی KS108 در زیر آورده شده است . دارای دو درایور بخش KS108 و یک درایور مشترک KS0107 است. KS0108 یک درایور بخش دات ماتریس LCD با 64 کانال خروجی است که نیمی از GLCD را مدیریت می کند. KS0107 یک درایور مشترک 64 کاناله است که سیگنال های زمان بندی را برای کنترل دو درایور بخش KS0108 تولید می کند.
نحوه آدرس دهی X , Y صفحه نمایش
از آنجا که هر دو نیمه به یک روش کار می کنند و توسط CS1 یا CS2 کنترل می شوند . یک نیمه را بررسی کنیم تا ببینیم بایتهای دیتا چگونه به پیکسل تبدیل می شوند .
اولین چیزی که باید توجه کنید این است که یک بایت داده به طور عمودی ستونی از پیکسل ها را در صفحه تشکیل می دهد . هر نیمه از GLCD یک ماتریس 64 × 64 پیکسل را نشان می دهد. تعداد ستون ها از 0 تا 63 هستند و به هیچ وجه گروه بندی نمی شوند ، اما ردیف ها گروه بندی می شوند.
آنچه “Page” یا صفحه خوانده می شود ، از یک ماتریس 64X8 پیکسل تشکیل شده است . در هر نیمه از LCD گرافیکی 8 صفحه وجود دارد که توسط یک کنترل کننده KS108 کنترل می شود. یک صفحه شامل 64 ستون 8 پیکسلی است.
هر زمان که داده ها را انتقال می دهیم ، ابتدا نیمی از LCD گرافیکی را توسط پایه (Chip Select)CS انتخاب می کنیم ، سپس آدرس صفحه (X) را مشخص می کنیم . و سپس آدرس Y را انتخاب می کنیم . بایت به عنوان یک نوار 8 بیتی منتقل می شود و در محل حافظه RAM ذخیره می شود. ما می توانیم این روند را به صورت زیر خلاصه کنیم.
توسط CS1 و CS2 نیمه GLCD را انتخاب کنید (64 × 64 پیکسل)
انتخاب صفحه (X) یا Page
آدرس ستون Y نوار 8 پیکسلی عمودی درست را انتخاب می کند
نحوه آدرسی Y :
آدرس Y شماره ستونی است که از 0 تا 63 در نظر گرفته شده است . آدرس ستون ها از 0x40 آغاز می شود . با در نظر داشتن این نکته که ما می توانیم فقط با نیمی از صفحه نمایش در هر زمان کار کنیم. این پارامتر نیاز به ردیابی از طریق یک شمارنده در کد برنامه شما دارد.
از نظر سخت افزاری ، “آدرس Y” به طور خودکار افزایش می یابد ، زیرا صفحه نمایش دارای مدار شمارنده داخلی است. وقتی بایت بعدی داده را می فرستید ، به طور خودکار ستون بعدی را پر می کند.
از دیدگاه برنامه نویسی ، نکته خوبی است زیرا ، هنگام نوشتن در ستون بعدی ، نیازی به تنظیم شماره ستون از طریق کد برنامه نیست. با این حال ، باید شمارش آن را در یک متغیر انجام دهید تا بدانید چه موقع باید خطوط کنترل CS1 و CS2 را تغییر دهید.
نحوه آدرسی X Page :
آدرس صفحات به ترتیب از (Page 0)0XB8 الی (Page 7)0XBF می باشد . این آدرس ها برای نیمه دوم LCD نیز یکسان می باشد .
یک بایت داده در گذرگاه داده ، ماتریس LCD را به صورت عمودی در یک ستون پر می کند. یک بایت داده در گذرگاه داده ها نقاط مشخص شده از DB0 تا DB7 را در یک ستون تنظیم می کند. پس از پر شدن ، مدارهای داخلی به طور خودکار به ستون بعدی افزایش می یابند ، برای بایت بعدی داده ها.
تصویر پایین نحوه نمایش حرف “P” الفبا را نشان می دهد.
ابتدا از نیمی از صفحه استفاده کنید. برای نیمه اول CS1 را انتخاب کنید .
“آدرس Y” را انتخاب کنید ، شماره ستون (از 0 تا 63) جایی که اولین بایت کاراکتر شروع می شود . در این مثال دو ستون ابتدا خالی و از ستون سوم اولین بایت کاراکتر آغاز شده ، بنابراین آدرس Y=0X42 می باشد .
کاراکتر در 0 Page قرار دارد بنابراین آدرس X Page=0XB8 می باشد .
در انتها بایت های داده زیر را پشت سر هم ارسال کنید.
01111111
00001001
00001001
00001001
00000110
00000000
همانطور که مشاهده می کنید ، بایت ها از سمت راست (LSB) به چپ (MSB) به صورت افقی توسط انسان خوانده می شوند ، اما داده ها به طور عمودی بر روی ستون LCD از DB0 تا DB7 پر می شوند.
شمارنده Y برای ستون بعدی به طور خودکار افزایش می یابد ، بنابراین در نتیجه فقط باید بایت داده را به طور پی در پی ارسال کنید. با این حال ، بهتر است یک شمارنده در کد برنامه داشته باشید تا ردیابی ستونی را که در آن قرار دارید را داشته باشید.
در این مثال ، هر کاراکتر هشت ردیف و شش ستون را اشغال می کند. برای هر کاراکتر ، DB7 را خالی می گذاریم که به عنوان فاصله کاراکتر بین خطوط عمل می کند. علاوه بر این ، ستون آخر را خالی می گذاریم ، که به عنوان فاصله کاراکتر بین کاراکتر ها عمل می کند.
هفت دستورالعمل در کنترلر KS0108 موجود است که در جدول زیر آورده شده است.
در جدول فوق دستورالعمل های مختلف موجود برای کنترلر KS0108 آورده شده است. به عنوان مثال ، برای روشن کردن صفحه نمایش ، پایه های RS , R / W در سطح Low قرار می گیرند ، 00111111 را در پایه های DB7-DB0 قرار دهید و با ایجاد یک پالس ساعت بر روی پایه Enable از سطح Low به High دستورالعمل اجرا می شود .
نکته : همانطور که اشاره شد ، در هر بار نوشتن یک بایت در حافظه RAM LCD نوشته می شود . بنابراین دسترسی و نوشتن جداگانه بر روی یک پیکسل امکان پذیر نیست .
برای نوشتن و دسترسی به پیکسل های جداگانه ، باید آنچه را که در حال حاضر در آدرس مورد نظر LCD می خواهیم بنویسیم ، ابتدا بخوانیم . در عملیات خواندن 8 بیت خوانده می شود و یک عمل ماسک Boolean بر روی بیت یا پیکسل مورد نظر انجام دهید. سپس دوباره 8 بیت را در آدرس قبلی بنویسیم .
راه اندازی lcd گرافیکی ks108 با آردوینو
کتابخانه های مختلفی در سطح اینترنت برای راه اندازی lcd گرافیکی با arduino وجود دارد . از مهمترین این کتابخانه ها می توان به U8glib اشاره نمود . این کتابخانه توسط اشخاص خارجی و انگلیسی زبان نوشته و توسعه داده شده اند .
بنابراین این کتابخانه ها از زبان و فونت فارسی و نوشتار راستچین پشتیبانی نمی کنند . کتابخانه ای که ما برای راه اندازی lcd گرافیکی ks108 توسط آردوینو توسعه داده ایم دارای فونت فارسی با قابلیت انکودینگ UTF-8 می باشد . یعنی کاربر می تواند در محیط IDE ARDUINO عبارت فارسی را تایپ و بنویسد و کامپایل کند و بر روی LCD نمایش دهد .
به راحتی توسط یک فرمان پایه های آردوینو را برای اتصال به GLCD KS108 تعریف می کنیم . این کتابخانه از السیدی گرافیکی با سایز ks108 192*64 و ks108 128*64 و قابلیت پشتیبانی از توابع کتابخانه Adafruit_GFX را دارا می باشد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
/**********************************************************************************/ #include <Adafruit_GFX.h> // include adafruit GFX library #include <KS0108_GLCD.h> // include KS0108 GLCD library //#include "fonts/AF12x16.h"//فونت فارسی و انگلیسی //#include "fonts/AF9x11.h"//فونت فارسی و انگلیسی //#include "fonts/AF9x10.h"//فونت فارسی و انگلیسی #include "fonts/AF8x8.h"//فونت فارسی و انگلیسی #include "bitmap.h" //کدهای هگز تصاویر در این فایل قرار دارند //KS0108 GLCD library initialization according to the following connection: //KS0108_GLCD(DI, RW, E, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, CS1, CS2, CS3, RES); 192*64 pixel //KS0108_GLCD(DI, RW, E, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, CS1, CS2, RES); 128*64 pixel //KS0108_GLCD display = KS0108_GLCD(PB9, PB8,PB7, PA0,PA1, PA2, PA3,PA4, PA5, PA6,PA7, PB6, PB5, PB4);//Blue pill KS0108_GLCD display = KS0108_GLCD(17, 16,18, 8,9, 10, 11,4, 5, 6,7, 14, 15, 19);//Arduino UNO char buff[50]={0}; void setup() { Serial.begin(9600); display.begin(KS0108_CS_ACTIVE_HIGH); } void loop() { display.clearDisplay(); //پاک کردن بافر صفحه نمایش display.SetFont(AF8x8); // تنظیم فونت display.LcdFontXScale(1);//تنظیم مقیاس عرض فونت display.LcdFontYScale(1);//تنظیم مقیاس ارتفاع فونت display.SetLetter(P_LETTER);//راستچین کردن نوشتار display.drawString(1, 0, "بسم الله رحمن الرحيم", BLACK, WHITE); display.drawString(2, 0, "سایت میکرونیک", BLACK, WHITE); display.drawString(3, 0, "قابليت نمايش فونت فارسي", BLACK, WHITE); display.SetLetter(E_LETTER);//چپ چین کردن نوشتار display.drawString(5, 0, "ARDUINO IDE", BLACK, WHITE); display.drawString(6, 0, "micronik.ir", BLACK, WHITE); display.drawString(7, 0, "KS108 GLCD", BLACK, WHITE); display.display();//نمایش بافر بر روی صفحه delay(5000); display.clearDisplay(); display.clearDisplay(); display.drawBitmap(0/*x*/ , 0/*y*/ , phone , 128/*width*/ , 64/*height*/ , BLACK);//نمایش تصویر display.display(); delay(2000); display.clearDisplay(); display.SetLetter(P_LETTER); display.SetCursor(100/*x*/, 10/*y*/);//تنظیم مختصات بر اساس پیکسل display.Puts("میکرونیک");//نمایش رشته display.display(); delay(2000); display.clearDisplay(); display.SetLetter(E_LETTER); for(int number=0;number<=20;number++) { sprintf(buff,"Show number : %d ",number);//نحوه نمایش متغیر display.drawString( 2 , 0 ,buff ,BLACK,WHITE); delay(100); display.display(); } delay(2000); } |
همچنین از این کتابخانه می توانید بر روی بورد بلوپیل در نرم افزار آردوینو استفاده کنید ، تصویر زیر نحوه اتصال پایه های lcd ks108 به بورد blue pill را نشان می دهد .
راه اندازی lcd گرافیکی ks108 با stm32
در این پروژه در محیط نرم افزار STM32CubeIDE و Keil نمایشگر گرافیکی KS108 را راه اندازی می کنیم . بورد مورد استفاده ما bluepill می باشد ، میکروکنترلر استفاده شده بر روی بورد بلوپیل stm32f103t8c6 می باشد . از این کتابخانه بر روی سایر میکروکنترلرهای دیگر نیز می توانید استفاده کنید ، فقط کافیست در نرم افزار stm32cubemx نام پایه های lcd ks108 را بر روی پایه های میکروکنترلر مورد نظر خود تعریف کنید . پایه های نمایشگر ks108 را مطابق تصویر زیر به پایه های بورد بلوپیل متصل کنید .
نرم افزار STM32CubeMX را باز کنید ، میکروکنترلر خود را انتخاب کنید . در این پروژه ما از بورد بلوپیل استفاده کردیم ، بنابراین میکروکنترلر stm32f103t8c6 را انتخاب کردیم . بر روی پایه های دلخواه خود کلیک چپ کنید و گزینه config output را انتخاب کنید تا پایه ها بصورت خروجی تعریف شوند .
تعریف نام پایه ها خیلی مهم است ، نام یا برچسب پایه ها را دقیقا همنام با برچسب هایی تصویر زیر تعریف کنید . پین های دیتا(D0 الیD7) و پین های فرمان(RS,RW,EN,CS1,CS2) را بدون محدودیت بر روی پایه های دلخواه میکروکنترلر STM32 در محیط نرم افزار Stm32CubeMX قابل پیکربندی می باشد.
توابع کتابخانه ks108 برای stm32 به شرح زیر می باشد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
#ifndef KS108_H_INCLUDED #define KS108_H_INCLUDED #include "main.h" #include "stdbool.h" #define SYSTEM_CORE_CLOCK 72 //72 Mhz #define __KS108_Screen_Width 128 #define __KS108_Screen_Height 64 #define __KS108_ChipSelectActive HIGHT //LOW = active low cs --- HIGHT = active hight cs #define __KS108_Command_On 0x3F #define __KS108_Command_Off 0x3E #define __KS108_Command_Set_Address 0x40 #define __KS108_Command_Set_Page 0xB8 #define __KS108_Command_Display_Start 0xC0 #define __KS108_Screen_Line_Height 8 #define __KS108_Screen_Lines __KS108_Screen_Height / __KS108_Screen_Line_Height #define __KS108_Screen_Chips 2 #define __KS108_BUSY_FLAG 0x80 #define GetMaxX() ((unsigned int)__KS108_Screen_Width-1) #define GetMaxY() ((unsigned int)__KS108_Screen_Height-1) #define OUTPUTS 0 #define INPUTS 1 #define HIGHT 1 #define LOW 0 enum Chip_t { Chip_1, Chip_2, Chip_All }; enum OperatingMode_t { Non_Inverted, Inverted }; enum Color_t { WHITE = 0x00, BLACK = 0xFF }; typedef struct { uint8_t X; uint8_t Y; enum OperatingMode_t Mode; }KS108_t; //------------------------------------------------// void KS108_SendCommand(const uint8_t Command, enum Chip_t Chip); void KS108_SendData(const uint8_t Data, enum Chip_t Chip); void KS108_Init(void); void KS108_Screen_Update(void); void KS108_InvertMode(void); void KS108_Clear(void); void KS108_ClearLine(const uint8_t Line); void KS108_GotoX(const uint8_t X); void KS108_GotoY(const uint8_t Y); void KS108_GotoXY(const uint8_t X, const uint8_t Y); void KS108_GotoLine(const uint8_t line); uint8_t KS108_GetX(void); uint8_t KS108_GetY(void); uint8_t KS108_GetLine(void); void KS108_SetPixel(const uint8_t X, const uint8_t Y, enum Color_t Color); void KS108_SetPixels(uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2, enum Color_t Color); void KS108_DrawBitmap(const unsigned char *bitmap, unsigned char x, unsigned char y,unsigned char Width, unsigned char Height); void KS108_DrawLine(const uint8_t X1, const uint8_t Y1, const uint8_t X2, const uint8_t Y2, enum Color_t Color); void KS108_DrawRectangle(const uint8_t X1, const uint8_t Y1, const uint8_t X2, const uint8_t Y2, enum Color_t Color); void KS108_DrawRoundRectangle(const uint8_t X1, const uint8_t Y1, const uint8_t X2, const uint8_t Y2, const uint8_t Radius, enum Color_t Color); void KS108_DrawTriangle(const uint8_t X1, const uint8_t Y1, const uint8_t X2, const uint8_t Y2, const uint8_t X3, const uint8_t Y3, enum Color_t Color); void KS108_DrawCircle(const uint8_t CenterX, const uint8_t CenterY, uint8_t Radius, enum Color_t Color); void KS108_FillScreen(enum Color_t Color); void KS108_FillRectangle(const uint8_t X1, const uint8_t Y1, const uint8_t X2, const uint8_t Y2, enum Color_t Color); void KS108_FillRoundRectangle(const uint8_t X1, const uint8_t Y1, const uint8_t X2, const uint8_t Y2, const uint8_t Radius, enum Color_t Color); void KS108_FillTriangle(uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2, uint8_t X3, uint8_t Y3, enum Color_t Color); void KS108_FillCircle(const uint8_t CenterX, const uint8_t CenterY, const uint8_t Radius, enum Color_t Color); void KS108_InvertScreen(void); void KS108_InvertRect(uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2); void KS108_ScrollRight(uint8_t s); void KS108_ScrollLeft(uint8_t s); void KS108_ScrollDown(uint8_t s); void KS108_ScrollUp(uint8_t s); //-----------------------------------------------------------------------------// #endif |
نحوه استفاده از توابع کتابخانه ks108 به صورت چندین مثال در فایل main.c قرار داده شده است .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
/* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" #include "lcd/Font.h" //#include "lcd/f5x7.h" //#include "lcd/AF12x16.h" //#include "lcd/AF12x16DF.h" //#include "lcd/AF9x11.h" #include "lcd/AF9x10.h" #include "lcd/AF8x8.h" //#include "lcd/f10x20.h" //#include "lcd/f9x14.h" #include "lcd/bitmap.h" #include "lcd/KS108.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ //کاراکترهای سفارشی زیر فقط در فونت 8*8 وجود دارند #define ant 0xa3 #define ant1 0x99 #define ant2 0xa4 #define ant3 0xa8 #define ant4 0xaa #define bat 0xac #define bat1 0xad #define bat2 0xaf #define bat3 0xb2 #define like 0x88 #define unlike 0x89 #define alarm 0x8b #define speaker 0x8f #define music 0x91 #define plugin 0x92 #define temp 0x93 #define hum 0x94 #define lock 0xa6 #define unlock 0xa7 /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ char buffer[50]={0}; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ KS108_Init(); KS108_Clear(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { KS108_Clear(); //پاک کردن بافر صفحه نمایش SetLetter(E_LETTER);//چپ چین کردن نوشتار SetFont(AF8x8); // تنظیم فونت LcdFontXScale(1);//تنظیم عرض فونت LcdFontYScale(1);//تنظیم ارتفاع فونت sprintf(buffer,"%c%c%c",ant,ant2,ant4);//قرار دادن چند کاراکتر داخل یک آرایه DrawString(0/*line*/, 0/*x*/,buffer/*text*/, BLACK/*font color*/, WHITE/*back ground color*/); SetLine(0,3);//تنظيم مختصات بر اساس سطر PutChar(bat);//نمايش فقط یک کاراکتر SetLine(0,4); PutChar(bat1); SetLine(0,5); PutChar(bat2); SetLine(0,6); PutChar(alarm); SetLine(0,7); PutChar(music); SetLine(0,8); PutChar(plugin); SetLine(0,9); PutChar(temp); SetLine(0,10); PutChar(hum); SetLine(0,11); PutChar(lock); SetLine(0,12); PutChar(unlock); SetLetter(P_LETTER);//راستچین کردن نوشتار DrawString(1, 0, "بسم الله رحمن الرحيم", BLACK, WHITE); DrawString(2, 0, "سایت میکرونیک", BLACK, WHITE); DrawString(3, 0, "قابليت نمايش فونت فارسي", BLACK, WHITE); SetLetter(E_LETTER);//چپ چین کردن نوشتار DrawString(5, 0, "STM32CubeIDE", BLACK, WHITE); DrawString(6, 0, "micronik.ir", BLACK, WHITE); DrawString(7, 0, "KS108 GLCD", BLACK, WHITE); KS108_Screen_Update();//رفرش صفحه نمایش HAL_Delay(3000); KS108_Clear(); KS108_DrawBitmap( phone/*bitmap*/ , 0/*x*/ , 0/*y*/ , 128/*width*/ , 64/*height*/);//نمایش تصویر KS108_Screen_Update(); HAL_Delay(1000); KS108_Clear(); KS108_DrawBitmap( car , 0 , 0 , 128 , 64 ); KS108_Screen_Update(); HAL_Delay(1000); KS108_InvertScreen(); KS108_Screen_Update(); HAL_Delay(1000); KS108_InvertScreen(); KS108_Screen_Update(); HAL_Delay(1000); KS108_Clear(); SetLetter(E_LETTER); for(int number=0;number<=10;number++) { sprintf(buffer,"Show number : %d ",number);//نحوه نمایش متغیر DrawString( 0 , 0 ,buffer ,BLACK,WHITE); HAL_Delay(100); KS108_Screen_Update(); } HAL_Delay(1000); KS108_Clear(); SetCursor(0/*x*/, 0/*y*/);//تنظیم مختصات بر اساس پیکسل SetFont(AF8x8); LcdFontXScale(2);//تنظیم عرض فونت LcdFontYScale(2);//تنظیم ارتفاع فونت Puts("micronik.ir"); KS108_Screen_Update(); HAL_Delay(1000); // scroll right for (uint8_t scroll = 0; scroll < 0x0F; scroll++) { KS108_ScrollRight(1); KS108_Screen_Update(); HAL_Delay(10); } HAL_Delay(1000); // scroll left for (uint8_t scroll = 0; scroll < 0x0F; scroll++) { KS108_ScrollLeft(1); KS108_Screen_Update(); HAL_Delay(10); } HAL_Delay(1000); // scroll right-up for (uint8_t scroll = 0; scroll < GetMaxY()/2; scroll++) { KS108_ScrollRight(1); KS108_ScrollUp(1); KS108_Screen_Update(); HAL_Delay(10); } HAL_Delay(1000); // scroll left-up for (uint8_t scroll = 0; scroll < GetMaxY()/2; scroll++) { KS108_ScrollLeft(1); KS108_ScrollUp(1); KS108_Screen_Update(); HAL_Delay(10); } HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } |
قابلیت کتابخانه lcd گرافیکی ks108 برای Arduino
قابلیت رسم اشکال گرافیکی مانند خط ، مربع ، مستطیل و دایره
قابلیت نمایش تصویر در ابعاد مختلف
قابلیت پیکربندی تمامی پایه های KS108 بر روی پایه های دلخواه آردوینو
دارای فونت فارسی و انگلیسی در ابعاد 8×8 , 9×10 , 9×11 , 12×16
دارای فونت انگلیسی بدون فارسی در ابعاد 5×7 , 9×14 , 10×20
قابلیت استفاده از فونت و توابع کتابخانه Adafruit_GFX
قابلیت پشتیبانی از سایزهای 192×64 , 126×64 پیکسل
به همراه فایل شبیه سازی پروتیوس
قابلیت کتابخانه lcd گرافیکی ks108 برای stm32
قابلیت رسم اشکال گرافیکی مانند خط ، مربع ، مستطیل و دایره
قابلیت نمایش فونت انگلیسی و فارسی
قابلیت نوشتن کاراکتر و علامتهای خاص
کتابخانه و مثال برای نرم افزارهای STM32CUBEIDE و KEIL
قابلیت پیکربندی تمامی پایه های LCD بر روی پایه های دلخواه میکرو ، توسط نرم افزار STM32CUBEMX
قابلیت نوشتن حروف و عبارات فارسی به صورت مستقیم و بدون نیاز به تبدیل در محیط STM32CubeIDE و KEIL
نوشته شده توسط توابع HAL و پیاده سازی شده توسط میکروکنترلر stm32f103c8t6(bluepill)
قابلیت اضافه کردن کتابخانه ks108 براحتی بر روی میکروکنترلرهای سری f4 و f7 و سری های دیگر