به كمك دستور بالا ما قادر خواهيم بود كه LCD را به هر پورتي كه مي خواهيم وصل كنيم. در خط اول برنامه ما تك تك پايه هاي LCD را معرفي كرديم و گفتيم DB4 ال سي دي را مي خواهيم به porta.4 وصل كنيم و همين طور تا آخر. و پايه هاي E و RS رو هم تعريف مي كنيم البته پايه RW رو هم زمين مي كنم چون ما اغلب در LCD مي نويسيم و كم پيش مياد كه بخواهيم ازش بخونيم. در خط بعدي هم تعداد سطر و ستون هاي LCD را براي ميكرو تعريف كرديم.
نكته: چون در خط اول بايد دستورات پشت سر هم باشد مي مي توانيم به كمك يه آندرلاين ” _” ادامه دستورات را در خط بعدي بنويسيم. اين كار صرفا براي اين كه طول برنامه زياد نشه و يا در موقع چاپ به هم نريزه .
دستورات LCD :
از دستور LCD مي توانيم محتواي يك متغيير يا تعداي كاراكتر (به تعداد ستون هاي LCD) را نمايش دهيم. به عنوان مثال ما مي خواهيم عبارت MC8051.blogfa.com را روي LCD 16*2 نمايش دهيم.
LCD ” MC8051.blogfa.com “
عبارت را بايد بين اين دو ” ” علامت بنويسيم. اكنون اين عبارت روي LCD نمايش داده مي شود.
دستور CLS:
از اين دستور هم براي پاك كردن كل LCD استفاده مي نماييم. يعني هر جا ما نوشتيم CLS كل LCD پاك خواهد شد.
دستور Display :
به كمك اين دستور شما مي تواند صفحه نمايش LCD را روشن يا خاموش كنيد.
براي خاموش كردن: Display off
و براي روشن كردن: Display on
دستور Cursor :
به كمك اين دستور شما مي توانيد مكان نماي LCD را در چهار وضعيت تنظيم كنيد.
1) Cursor no يعني مكان نما روشن باشد
2) Cursor off يعني مكان نما خاموش باشد
3) Cursor blink يعني مكان نما به صورت چشمك زن باشد
4) Cursor noblink يعني مكان نما به صورت چشمك زن نباشد
دستور Locate :
قالب اين دستور به اين شكل مي باشد:
Locare x , y
كه X مشخص كننده سطر مي باشد و مي تواند از 1 تا 4 باشد. (با توجه به نوع LCD)
و Y هم مشخص كننده ستوان مي باشد و مي توانيد از 1 تا 64 باشد. (با توجه به نوع LCD)
به عنوان مثال شما مي خواهيد در وسط يه LCD 16*2 عبارت MC8051 را بنويسيد كه به صورت زير عمل مي كنيم:
Cls
Locate 1,6
Lcd “MC8051”
در خط اول ما LCD رو پاك كرديم و در خط دوم مكان نما را به سطر اول و ستون 6 برديم و در اين مكان از LCD يعني در خانه ششم LCD عبارت را نوشتيم كه M در خانه 6 و Cدر خانه 7 و … نوشته مي شود.
دستور Shiftlcd :
به كمك اين دستور مي توانيد كل صفحه نمايش رو به چپ يا راست انتقال دهيد. يعني به كمك اين دستور شما مي توانيد متن خود را روي LCD به حركت در آورديد مانند تابلو هاي روان.
در اين مثال ما عبارت MC8051 را در انتهاي يك LCD 20*2 نوشتيم و 500 ميلي ثانيه هم تاخير گذاشتيم و به كمك يك حلقه for دستور Shiftlcd Right را حدود 20 بار تكرار كرديم البته بايد يه تاخير هم قرار دهيم تا حركت متن را بتوانيم مشاهده كنيم.
براي حركت به چپ هم از دستور Shiftlcd left استفاده مي كنيم.
دستور Deflcdchar :
به كمك اين دستور شما مي توانيد به جاي يك كاراكتر انگليسي خودتان يك كاراكتر فارسي بسازيد و يا اشكالي را ايجاد كنيد كه نحوي استفاد از آن را در زير توضيخ مي دهيم:
براي اين كار ابتدا در يك خط از برنامه كليك كنيد (يا اول برنامه و يا در ميان خطوط برنامه جايي كه هيچ دستوري در آن خط نباشد.) بعد به منوي Tools برنامه بيسكام برويد و روي LCD Designer كليك كنيد در اينجا شما يك ماتريس 5 در 8 مي بينيد در واقع هون پيكسل هاي يك ستون LCDمي باشد. شكل يا هر چيز ديگر خود را در اينجا طراحي كنيد و بعد OK را بزنيد اكنون كدي به شكل زير براي شما درج مي شود:
به عنوان مثال من كل پيكسل ها را سياه كردم و يك مثلث سفيد كوچك ميان اون درست كردم كه بعد بيسكام اين كد ها را به من داد:
Deflcdchar ?,31,19,21,22,22,21,19,31 ” replace ? with number (0-7)
در اينجا علامت ? به رنگ قرمز مي باشد و شما بايد از بين اعداد 0 تا 7 يكي را جايگزين اين علامت كنيد مثلا من عدد 5 را دادم.
Deflcdchar 5,31,19,21,22,22,21,19,31 ” replace ? with number (0-7)
حال براي نمايش اين شكل روي LCD از دستور CHR (?) استفاده مي كنيم:
Cls
Locate 1, 15
Lcd chr(5)
حال اين مثلث در خانه 15 LCD نمايش داده مي شود.
نحوي اتصال كيبور 3*4 يا 4*4 به AVR :
براي پيكره بندي كيبورد در بيسكام شما بايد يك پورت كامل 8 بيتي را به كيبورد اختصاص دهيد و بعد از وصل كردن پايه هاي كيبورد به هاي AVR كه در زير نوشته ام شما به كمك دستور Getkbd() مي توانيد كليد فشرده شده را بخوانيد و در يك متغيير بريزيد. و بعد هم به روش هاي مختلفي عدد واقعي كليد را پيدا كنيد.
براي پيكره بندي آن به اين صورت مي نويسيم: Config Kbd = Portc كه در اينجا پورت C براي اتصال كيبورد انتخاب شده.
در اينجا من از يك روش خاص كه خودم استفاده مي كنم ارزش واقعي كليد فشرده شده را به دست مي آورم. البته روش هاي ديگر هم وجود دارد ولي من اين روش خاص خودم رو دوست دارم.
قضيه پيدا كردن ارزش واقعي كليد فشرده شده اين كه وقتي شما مثلا عدد كليد شماره 2 را فشار مي دهيد هيچ گاه ميكرو عدد 2 را به شما نمي دهيد. يعني بستيگ به شما دارد كه سطر ها را به كدام يك از پين هاي AVR وصل كرده ايد و …
من در اينجا يه اتصال راحت به همراه برنامه خواندن و پيدا كردن ارزش واقعي كليد و نمايش آن عدد روي LCD رو براي شما مي نويسيم و كه خودتان مي توانيد بعدا بسته به نوع كارتون برنامه رو تغيير بدهيد.
اتصال يك كيبورد 3*4 به پورت C ميكروي AVR و برنامه آن:
$regfile = “m16def.dat” $crystal = 12000000 Config Lcdpin = Pin Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , _ Db7 = Pina.7 , E = Pina.2 , Rs = Pina.3 Config Lcd = 20 * 2 Config Kbd = Portc Dim Key As Byte Main: Do Key = Getkbd() If Key = 7 Then Goto Character_0 If Key = 0 Then Goto Character_1 If Key = 4 Then Goto Character_2 If Key = 8 Then Goto Character_3 If Key = 1 Then Goto Character_4 If Key = 5 Then Goto Character_5 If Key = 9 Then Goto Character_6 If Key = 2 Then Goto Character_7 If Key = 6 Then Goto Character_8 If Key = 10 Then Goto Character_9 If Key = 11 Then Goto Character_pond If Key = 3 Then Goto Character_star Loop End Character_0: Cls Lcd “0” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_1: Cls Lcd “1” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_2: Cls Lcd “2” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_3: Cls Lcd “3” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_4: Cls Lcd “4” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_5: Cls Lcd “5” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_6: Cls Lcd “6” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_7: Cls Lcd “7” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_8: Cls Lcd “8” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_9: Cls Lcd “9” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_pond: Cls Lcd “#” Do Key = Getkbd() Loop Until Key = 16 Goto Main Character_star: Cls Lcd “*” Do Key = Getkbd() Loop Until Key = 16 Goto Main