در اين قسمت آموزشي به نحوي پيكره بندي امكانات AVR مي پردازيم. از جمله پيكره بندي LCD  و كيبورد

اتصال LCD به AVR و نحوي پيكره بندي آن در بيسكام :

Config   Lcdpin = Pin   Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , _

Db7 = Porta.7 , E = Porta.2 , Rs = Porta.3

Config Lcd = 16 * 2

به كمك دستور بالا ما قادر خواهيم بود كه 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 به حركت در آورديد مانند تابلو هاي روان.

 

$regfile = "m32def.dat"

$crystal = 12000000

Config Lcdpin = Pin Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , _

Db7 = Porta.7 , E = Porta.2 , Rs = Porta.3

Config Lcd = 20 * 2

Dim A As Byte

Do

Locate 1 , 15

Lcd "MC8051"

Waitms 500

For A = 1 To 20

Shiftlcd Right

Waitms 100

Next

Cls

Loop

End

در اين مثال ما عبارت 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 و برنامه آن:

 

3ستون

2ستون

1ستون

 

Portc.0

3

2

1

  Aسطر 1

Portc.1

6

5

4

   Bسطر 2

Portc.2

9

8

7

  Cسطر 3

Portc.3

#

0

*

   Dسطر 4

 

Portc.6

Portc.5

Portc.4

 

'------------------------------------------------

'micro: atmega16

'driver keyborad 4*3

'port=C

'A,B,C,D=C0,C1,C2,C3****1,2,3=C4,C5,C6

'PROGRAMER: MOHSEN GHASEMIAN

'------------------------------------------------

 

$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

البته برنامه يه كم بهم ريخته شد چون توي بيسكام نيست.

من فايل هاي 3*4 و 4*4 را همراه با نقشه و برنامه براتون ميزام اميدوارم كه به شما كمكي بكند.

دانلود فايل ها

پسورد: mc8051.blogfa.com

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت سوم

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت دوم

آموزش ميكرو كنترلر AVR به زبان بيسيك || قسمت اول