4 lcd
خب توي اين پست ميخوام کار با LCD کارکتري رو آموزش بدم.
نمايشگرهاي کارکتري قادر به نمايش حروف و اعداد هستند.
کامپايلر ccs دو کتابخانه با نام هاي LCD.C و LCD420.C داره که اولي براي LCD هاي 16*2 و کوچکتره و دومي براي LCD هاي 20*4 و کوچکتر هستش.
اين LCD ها سه تا پايه با نام هاي RS و RW و ENABLE دارند که پايه هاي کنترلي هستند. و 8 پايه ديگر که 4 تاي آن (D0/D1/D2/D3) براي خواندن از روي LCD و 4 تاي ديگر (D4/D5/D6/D7 که به پايه هاي خط ديتاي نمايشگر معروفند) براي نوشتن بر روي LCD هستند.
ما ميخواهيم فقط روي LCD اطلاعاتي رو نمايش بديم پس با 4 پايه دوم کار داريم.
اگه با کتابخانه اولي کار ميکنيد ميتونيد اين 7 پايه رو (3 پايه کنترلي و 4 پايه خط ديتاي نمايشگر) به هر پايه از ميکرو که قابليت IO داشته باشه وصل کنيد. چون در اين کتابخانه دستوراتي هستند که شما ميتونيد مشخص کنيد هر پايه رو به کدام پايه از مکرو وصل کرده ايد.
کل پايه هاي LCD به ترتيب به صورت زير هستند:
کنتراست صفحه روشنايي کارکتر ها هستش که با يه پتانسيومتر قابليت کم و زياد شدن داره. طريقه اتصال توي فايل شماتيک که در پيوست قرار داده شده مشخصه. وقتي LCD بسته شد و برنامه رو نوشتيد بايد اين پتانسيومتر رو اونقدر بچرخونيد تا وضوح نوشته به حداکثر خودش برسه.
بعد از اينکه LCD رو وصل کرديد بايد بريم سراغ برنامه :nerd:
بعد از دستورات تعريف ميکرو و کريستال بايد پايه هاي LCD رو مشخص کنيم. به صورت زير:
[code=c]
#define LCD_RS_PIN PIN_b0
#define LCD_RW_PIN PIN_b1
#define LCD_ENABLE_PIN PIN_b2
#define LCD_DATA4 PIN_b3
#define LCD_DATA5 PIN_b4
#define LCD_DATA6 PIN_b5
#define LCD_DATA7 PIN_b6
[/code]
پايه هاي RS و RW و ENABLE به ترتيب به پايه هاي b0 و b1 و b2 متصل شدند و پايه هاي ديتا (D4 تا D7) به ترتيب به پايه هاي b3 تا b6 متصل شده اند. شما ميتونيد بر حسب نياز پايه هارو تغيير بديد.
و در خط بعدي بايد کتابخانه LCD.C رو صدا بزنيد. به اين صورت:
[code=c]#include <LCD.c>[/code]
حالا براي کار با LCD و نوشتن بر روي آن بايد حتما دستور زير نوشته شود:
[code=c] lcd_init();[/code]
با نوشتن اين دستور LCD پاک شده و آماده به کار ميشود.
يکي از توابعي که در اين کتابخانه تعريف شده تابع lcd_putc هستش. که به صورت زير تعريف شده:
[code=c]Void lcd_putc(char c); [/code]
به اين معني که اين تابع يک کارکتر را به عنوان آرگومان گرفته و هيچ مقداري را بر نميگرداند.
مثلا دستور زير حرف Q را بر روي LCD مينويسد:
[code=c]Lcd_putc(“Q”[/code]
توسط دستور printf نيز ميتوانيم اين کار رو انجام بديم. به صورت زير:
[code=c]Printf(lcd_putc,”#test#”[/code]
که دستور بالا رشته ي #test# رو بر روي LCD نمايش ميده.
با دستور printf عدد هم ميتونيد نشون بديد. به صورت زير
[code=c]
Unsigned int8 i=80;
Printf(lcd_putc,”\f\variable is %u”,i);
[/code]
دستور بالا نوشته روبرو رو چاپ ميکنه: variable is 80
که قسمت variable is که قبل از u% نوشته شده به عنوان رشته هستش و i به عنوان يک عدد متغير هستش که هر مقداري رو در برنامه بگيره روي lcd چاپ ميشه که اينجا 80 هستش
بخش \f\ باعث پاک شدن LCD ( نه رفلش شدن آن) ميشه. شما اگه نميخوايد LCD پاک بشه ميتونيد اين رو ننويسيد
دومين تابع در اين کتابخانه تابع lcd_gotoxy هستش. به صورت زير:
[code=c]Void lcd_gotoxy(BYTE x, BYTE y);[/code]
که x شماره ستون و y شماره سطر هستش. و خانه اي که از سمت چپ در اولين ستون و در سطر بالا هستش داراي شماره ي 1و1 ميباشد پس خانه ستون 5 ام و سطر دوم به صورت زير مشخص ميشه:
[code=c]Lcd_gotoxy(5,2); [/code]
خب حالا ميريم سراغ برنامه کامل:
[code=c]#include <16f877a.h>
#use delay(xtal=20Mhz)
#fuses HS,NOWDT
#define LCD_RS_PIN PIN_b0
#define LCD_RW_PIN PIN_b1
#define LCD_ENABLE_PIN PIN_b2
#define LCD_DATA4 PIN_b3
#define LCD_DATA5 PIN_b4
#define LCD_DATA6 PIN_b5
#define LCD_DATA7 PIN_b6
#include <LCD.c>
int i=0;
void main()
{
lcd_init();
lcd_gotoxy(6,1);
printf(lcd_putc,"<<ECA>>"
lcd_gotoxy(8,2);
printf(lcd_putc,"PIC"
delay_ms(700);
lcd_init();
while(true)
{
lcd_gotoxy(1,1);
printf(lcd_putc, "I=%u", i);
i++;
delay_ms(100);
}
}[/code]
اين برنامه ابتدا کارکتر هايي رو روي lcd نمايش ميده سپس اون رو رفلش ميکنه و مقدار يه متغير به نام i که مدام در حال افزايش هست رو نشون ميده.
اينم فايل برنامه به اضافه فايل پروتئوس:
http://s3.picofile.com/file/7963502254/lcd.rar.html
+ نوشته شده در سه شنبه دوازدهم بهمن ۱۳۹۵ ساعت 12:2 توسط مرادی
|

;[/code]