عکس پیش‌فرض نوشته

در این مطلب می خواهیم برنامه یک شمارنده صعودی دو رقمی بدون کنترل را طراحی کنیم و آن را به 7-seg متصل کنیم تا اعداد را نمایش دهد. برنامه را با استفاده از نرم افزار Bascom می نویسیم و از میکرو ATmega32 استفاده می کنیم،

همچنین دو عدد 7-seg معمولی به میکرو متصل می کنیم به این صورت که هر کدام از 7-seg ها به پورت مجزا متصل می شود، این کار از جهت برنامه نویسی بسیار ساده و آسان است ولی مشکلات خود را نیز دارد.

مهمترین مشکل، این است که تعداد زیادی از پایه های میکرو اشغال می شود و استفاده از میکرو برای کارهای سنگین و پیچیده مشکل خواهد شد.

 

مطابق همیشه اولین کاری که باید قبل از برنامه نویسی انجام داد بستن سخت افزار است. بنابراین برای این کار ما یکی از 7-seg ها را به پورت A و دیگری را به پورت B متصل می کنیم.(این کار اختیاری است و شما می توانید 7-seg ها را به پورت دیگری وصل کنید.)

ترتیب اتصال پایه ها مطابق مطلب قبلی (برنامه شمارنده صعودی 0 تا 9 و نمایش آن در 7-seg) می باشد. بنابراین به این صورت که پایه a نمایشگر اول(یکان) به PortA.0  و به همین ترتیب پایه g نمایشگر اول(یکان) به PortA.6 میکرو متصل می کنیم همچنین پایه a نمایشگر دوم(دهگان) به PortB.0 و به همین ترتیب پایه g نمایشگر دوم(دهگان) به PortB.6 میکرو متصل می کنیم.

به طور خلاصه رقم یکان عددی که میخواهیم نمایش دهیم باید بر روی پورت A ارسال شود و رقم دهگان آن بر روی پورت B ارسال شود.

 

برنامه نویسی شمارنده دو رقمی در AVR

یک سری از دستورات مربوط به پیکربندی می باشد که نوع میکرو و فرکانس کاری آن را مشخص می کند.

همچنین باید در این قسمت دو پورت مربوط به 7-seg را به عنوان خروجی تعریف نمود.

$regfile="m32def.dat"
$crystal=8000000
config portA=OUTPUT
config portB=OUTPUT

 

در قسمت بعدی متغیرها را تعریف و در صورت لزوم مقداردهی می کنیم.

یک متغیر به نام x تعریف کرده ایم که همان عدد ما است و متغیر z نیز به عنوان متغیر میانی می باشد.

Dim x as Byte
Dim z as Byte
Dim yekan as Byte
Dim dahgan as Byte
x=0

 

شروع برنامه اصلی و انجام شمارش و نمایش آن

Do

   dahgan = x / 10
   z = dahgan * 10
   yekan = x - dahgan

   portA=lookup(yekan,dta)
   portB=lookup(dahgan,dta)
   Incr x
   wait 1

   If x>99 Then
      x=0
   End If

Loop
End

برای جداسازی رقم یکان از دهگان روش های مختلفی وجود دارد ولی یکی از ساده ترین روش ها، روشی است که ما در اینجا از آن استفاده کرده ایم به صورتی که ابتدا عدد را بر 10 تقسیم می کنیم و در متغیر دهگان ذخیره می کنیم(توجه داشته باشید، زمانی که عدد بر 10 تقسیم می شود قسمت اعشاری دارد ولی به دلیل اینکه ما متغیر dahgan را از نوع بایت(byte) تعریف کرده ایم قسمت اعشاری عدد را حذف و فقط قسمت صحیح عدد تقسیم شده را در داخل متغیر dahgan ذخیره می کند.)

سپس متغیر dahgan را در 10 ضرب و سپس حاصل را از عدد اصلی کم می کنیم.

به طور مثال زمانی که شمارنده به 57 می رسد متغیرها به صورت زیر مقدار دهی می شوند:

x=57

dahgan=5

z=50

yekan=7

 

و در نهایت جدول دیتای خروجی نوشته می شود.

dta:
Data &B00111111,&B00000110,&B01011011,&B01001111,&B01100110,&B01101101,&B01111101,&B00000111,&B01111111,&B01101111