کتابخانه ی wirinPi به شما این امکان را میدهد که LCD های کارکتری محبوب 1-2و 4 خط را که بر پایه ی Hitachi HD44780U طراحی شده اند را راه اندازی وکنترل کنید. از کتابخانه ی مربوط به LCD و توابع آن به سادگی میتوانید برای راه اندازی LCD در برنامه های خود استفاده کنید. اما سیم کشی LCD کاری سخت و مشکل است که باید بادقت انجام دهید تا مشکلی برای LCD و رزبری ایجاد نشود. زمانی این کار دشوارتر میشود که برای راه اندازی LCD ازمد 8 بیت استفاده کنید در این حالت تعداد GPIO های مورد نیاز بدون احتساب تغذیه ، بک لایت و کنتراست به 10GPIO در رزبری نیاز می باشد. برای کاهش تعداد سیم ها و کم کردن تعداد GPIO ها از LCD در مد 4 بیت استفاده میکنیم. در این حالت تعداد GPOI های مورد استفاده به 6 عدد میرسند.
این نوع LCD های کاراکتری با این حال که در محدوده ولتاژ 5 ولت کار می کنند، توانای کار در ولتاژ 3.3 تا 5 ولت را دارند. این امر باعث میشود که GPIO های رزبری قدرت لازم برای راه اندازی LCD ونوشتن برروی آن را داشته باشند. مشکل زمانی ایجاد میشود که بخواهیم اطلاعاتی از LCD توسط رزبری بخوانیم.با توجه به اینکه ولتاژ خروجی LCD به 5 ولت میرسد ممکن است به GPIO های رزبری آسیب برسد.به همین دلیل در کتابخانه ی مربوط به LCD تابعی برای خواند از LCD وجو ندارد(راستش نیازی هم به خواندن از روی LCD نیست). برای راه اندازی LCD این دو کتابخانه را به ابتدای پروژه اضافه کنید.
1 2 |
#include <wiringPi.h> #include <lcd.h> |
قبل از هر کاری ابتدا باید LCD خود را تنظیم کنید. برای تنظیم LCD از کتابخانه ی زیر استفاده میشود.
1 |
int lcdInit (int rows, int cols, int bits, int rs, int strb, int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ; |
باید این تابع را قبل از استفاده از توابع دیگر LCD فراخوانی کرد. در دو پارامتر اول، ورودی سطر و ستون های LCD مشخص میشوند. در ورودی سوم این تابع تعداد بیت ها قرار میگیرند، 8یا 4 بیت. rs, strb نشان دهنده ی شماره ی پین های RS وSTORB ال سی دی است و در انتها ورودی های d0 تا d7 نشان دهنده ی بیت های متصل به نمایش گر هستند. در حالتی که LCD به صورت 4 بیتی تنظیم شده باشد تنها از 4 بیت اول استفاده میشود و بقیه ورودی ها صفر خواهند شد. خروجی این تابع که با نام ‘ handle’ شناخته میشود در تمام توابع دیگر استفاده میشود. اگر خروجی این تابع منفی باشد نشان دهنده ی خطا می باشد. معمولا خطا در این حالت ناشی از پارامتر های غلط است.
نکته ی مهم: قبل از استفاده از این تابع باید نوع شماره گذازی GPIO را با تابع wiringPiSetup() تغییر دهید.
توابع:
1 2 |
lcdHome (int handle) lcdClear (int handle) |
تابع اول نشان گر LCD را به ابتدای خانه ی اول میبرد.
تابع دوم تمام نوشته های روی LCD را پاک میکند.
1 2 3 |
lcdDisplay (int fd, int state) ; lcdCursor (int fd, int state) ; lcdCursorBlink (int fd, int state) ; |
این سه تابع به ترتیب LCD را خاموش یا روشن، نشان گر را خاموش یا روشن وحالت چشمک زنی نشان گر را خاموش یا روشن میکنند. در این سه تابع اگر مقدار state صفر باشد به منزله ی خاموش و اگر یک باشد به منزله ی روشن است.
1 |
lcdPosition (int handle, int x, int y) ; |
این تابع مکان نشان گر را به محلx,yمیبرد.
1 2 3 |
lcdPutchar (int handle, unsigned char data) ; lcdPuts (int handle, const char *string) ; lcdPrintf (int handle, const char *message, …) ; |
برای کامپایل برنامه هایی که در آن از کتابخانه ی LCD استفاده میشود، باید از کامند لاین استفاده کنیم، بطوریکه ابتدا برنامه را در Geany مینویسم و برای کامپایل کردن از دستورات ترمینال استفاده میکنیم. ابتدا به دایراکتوری مربوط به پروژه رفته، برای مثال پروژه ای نوشته شده در رزبری پای من در دایرکتوری زیر است.
1 |
cd /pi/home/projects |
حالا برای کامپایل برنامه دستور زیر را در ترمینال وارد میکنیم.
1 |
gcc -o example example.c -lwiringPi -lwiringPiDev X |
example نام پروژه نوشته شده است. میتواند هر نام دلخواه دیگری باشد. سپس با دستور زیر برنامه را اجرا کنید.
1 |
sudo ./example |
در اینجا یک برنامه ی ساده برای نمایش کلمه Hello, world! در دو حالت 8 بیتی و 4 بیتی آورده شده .در این مثال از دو پتانسومتر برای تنظیم کنتراس و میزان نور پشت زمینه LCD استفاده شده است.
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 |
******************************************** lcd 4bit ******************************************** #include <wiringPi.h> #include <lcd.h> //USE WIRINGPI PIN NUMBERS #define LCD_RS 25 //Register select pin #define LCD_E 24 //Enable Pin #define LCD_D4 23 //Data pin 4 #define LCD_D5 22 //Data pin 5 #define LCD_D6 21 //Data pin 6 #define LCD_D7 14 //Data pin 7 int main(){ int lcd; wiringPiSetup(); lcd = lcdInit (2, 16, 4, LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7, 0, 0, 0, 0); lcdPuts(lcd, "Hello, world!"); } ******************************************** lcd 8bit ******************************************** #include <wiringPi.h> #include <lcd.h> //USE WIRINGPI PIN NUMBERS #define LCD_RS 25 //Register select pin #define LCD_E 24 //Enable Pin #define LCD_D0 29 //Data pin D0 #define LCD_D1 28 //Data pin D1 #define LCD_D2 27 //Data pin D2 #define LCD_D3 26 //Data pin D3 #define LCD_D4 23 //Data pin D4 #define LCD_D5 22 //Data pin D5 #define LCD_D6 21 //Data pin D6 #define LCD_D7 14 //Data pin D7 int main(){ int lcd; wiringPiSetup(); lcd = lcdInit (2, 16, 8, LCD_RS, LCD_E, LCD_D0, LCD_D1, LCD_D2, LCD_D3, LCD_D4, LCD_D5, LCD_D6, LCD_D7); lcdPuts(lcd, "Hello, world!");} ******************************************** |
نویسنده: میثم سعیدی msimeysamsaeedi @ gmail.com منبع: وبلاگ ECA.ir
سلام ممنون بابت آموزش های خوبتان
مطلبی در مورد راه اندازی lcd گرافیکی در ویندوز 10 دارید ؟