پروژه ساعت دیجیتال با نمایشگر ماتریس

ساعت دیجیتال با نمایشگر ماتریس

در این پروژه ساخت ساعت با نمایشگر ماتریسی (LED) را برای شما عزیزان ارائه می کنیم.

ساخت ساعت و تقویم با کریستال داخلی میکرو کنترلر Avr  و نمایش آن روی دات ماتریس های 8×8 که تعداد 3 عدد از آنها در کنار یکدیگر قرار گرفتند.

در این پروژه ساعت بر روی نمایشگر به مدت 7 ثانیه نمایش داده می شود و بعد از آن تاریخ به مدت 7 ثانیه نمایش داده می شود.

در این نسخه قابلیت تنظیم ساعت و تاریخ قرار داده نشده که می توانید به آن اضافه نمایید.

در پروژه ای که خواهید دید از پردازنده Atmega8 استفاده شده است.

برای بدست آوردن اطلاعات بیشتر درباره میکروکنترلر ATmega8 به بخش آموزش میکروکنترلرهای AVR در همین سایت مراجعه نمایید.

در زیر ترتیب پایه های این میکروکنترلر را می بینید:

برای نمایش ساعت و تقویم از نمایشگرهای ماتریسی استفاده شده که میتوانید از LED های معمولی نیز استفاده کنید که در این صورت باید LEDها را به صورت ماتریسی (سطر و ستوت) به هم اتصال دهید.

این نمایشگرها از تعدادی ای ای دی که به صورت ماتریسی به هم متصل هستند تشکیل شده است. به  طوری که پایه های آند هر سطر به هم متصل شده اند و همچنین پایه های کاتد هر ستون نیز به یکدیگر متصل هستند. به عنوان مثال در این حالت با اعمال یک ولتاژ مثبت به سطر سوم (پایه 14 در شکل زیر) و یک ولتاز منفی به ستون چهارم (پایه 4 در شکل زیر) ال ای دی متناظر موجود در سطر سوم و ستون چهارم روشن خواهد شد. همچنین میتوان به همین روش با اعمال ولتاژ مثبت به چند سطر و اعمال ولتاژ منفی به یک ستون چند ال ای دی موجود در آن ستون را همزمان روشن نمود. وعکس این قضیه نیز امکان پذیر است یعنی میتوان با اعمال ولتاژ منفی به چند ستون و اعمال ولتاژ مثبت به یک سطر چند ال ای دی را در یک سطر روشن نمود. باید توجه داشت که نمی توان یک ال ای دی در سطر و ستون های متفاوت را همزمان روشن نمود زیرا با اعمال ولتاژ به دو سطر و دو ستون همزمان باعث می شود که چهار ال ای دی روشن شوند.

برای نمایش یک متن یا اعداد بر روی این نمایشگر چندین راه وجود دارد که ما در این مثال به این صورت عمل می کنیم که به ترتیب ستون اول را با اعمال ولتاژ منفی آن را فعال می کنیم و تعداد سطر هایی که در آن ستون می خواهیم روشن باشند را توسط ای سی های latch مقدار دهی مکنیم و پس از آن ولتاژ اعمال شده به این ستون و سطرها را صفر قرار می دهیم تا ال ای دی ها خاموش شوند این مرحله را برای هفت ستون دیگر تکرار می کنیم تا نمایشگر کامل شود.

سوالی که پیش می آید شاید این باشد که با روشن کردن هر ستون و خاموش کردن آنها چطور نمایشگر کامل روشن می شود در صورتی که ما فقط بخشی از نمابشگر را در هر لحظه روشن می کنیم؟ در جواب باید گفت که روشن و خاموش کردن این ال ای دی ها آنقدر سریع باید اتفاق بیافتد که چشم انسان قادر به تفکیک آن نباشد. چشم انسان قادر است محیط اطراف تا 60 فریم در ثانیه ببیند این به این معنی است که اگر ما این صفحه نمایش را با سرعتی بیشتر از 60 فریم در ثانیه روشن و خاموش کنیم چشم انسان آن را یک تصویر ثابت دائما روشن خواهد دید.

در شکل زیر مدار داخلی نمایشگر دات ماتریس را می بینید:

همچنین از آی سی های 74HC573 که ایسی LATCH می باشد به عنوان افزاینده تعداد خروجی های میکرو کنترلر استفاده کرده ایم هر کدام از آنها برای یک ماتریس استفاده شده است همانطور که می بینید این آی سی شامل 8 فلیپ فلاپ نوع D می باشد که هر کدام از آنها دارای یک پایه latch enable می باشد که با اعمال یک سیگنال یک منطقی خروجی ان فعال می شوند یعنی ورودی دیجیتال را روی پین خروجی قرار می دهد. که برای اعمال ولتاژهای مورد نیاز سطرهای دات ماتریس از آن استفاده کردیم. به این صورت که مقادیر را روی ورودی دیتای این آیسی قرار دادیم و با اعمال یک پالس مثبت به پایه LE (یا Latch enable) مقادیر دیتای ورودی آن در خروجی قرار خواهد گرفت و بعد از آن با اعمال ولتاژ صفر خروجی آن ثابت خواهد ماند و برای هر کدام از این آیسی ها مراحل گفته شده را انجام می دهیم.

 

فایل شماتیک این مدار به صورت زیر می باشد:

توجه داشته باشید که ستون های دات ماتریس ها که برای شبیه سازی به صورت مستقیم به پورت های B و C متصل شده اند برای اجرا در واقعیت نیاز به یک بافر دارند تا بتواند جریان مورد نیاز نمایشگر را تامین کند.

 

و سورس برنامه ساعت با نمایشگر دات ماتریس که در محیط بسکام نوشته شده و برای کامپایل کردن اون نیاز به کامپایلر بسکام دارید.

‘معرفی نوع میکرو و مقدار کریستال آن

$regfile = “m8def.dat”
$crystal = 1000000

‘پیکربندی پورت های میکرو

Config Portd = Output
Config Portb = Output
Config Portc = Output

‘پیکربندی ساعت به صورت نرم افزاری در این حالت از توابع داخلی بسکام استفاده می شود و فقط کافیست مقدیر _sec و _min و _hour و مقادیر تاریخ را مانند زیر از آن خواند

Config Clock = Soft
Enable Interrupts
Time$ = “17:40:00”
Date$ = “11/18/07”

‘ معرفی تابع

Declare Sub Sectic

Portc = &HFF

‘معرفی متغییر ها

Dim A As Byte
Dim Scan As Byte
Dim Index As Byte
Dim I As Byte
Dim S As Byte
Dim C As Word
Dim Buf(25) As Byte
Const Sc_wait = 1

S = _sec

For Index = 0 To 3
Buf(index + 11) = Lookup(index , Dot)
Next Index

‘حلقه اصلی برنامه

Do
If S <> _sec Then Call Sectic
Scan = &HFE

‘مقدار دهی ال ای دی های ستون اول تا ششم هر دات ماتریس به این صورت که در تابع Sectic بافر BUF را مقداردهی میکند (این بافر شامل یک آرایه 24 تایی می باشد که که شامل وضعیت ال ای دی سطرهای هر ستون می باشد یعنی Buf(1) شامل ال ای دی های روشن در سطر های ستون اول می باشد.)

For Index = 1 To 6

Portd = Buf(index )
Portc.3 = 1
Portc.3 = 0

Portd = Buf(index + 8)
Portc.4 = 1
Portc.4 = 0

Portd = Buf(index + 16)
Portc.5 = 1
Portc.5 = 0

Portb = Scan
Rotate Scan , Left , 1
Waitms Sc_wait
Portb = &HFF

Next Index

‘مقدار دهی ستون هفتم از دات ماتریس ها

Portd = Buf(7 )
Portc.3 = 1
Portc.3 = 0

Portd = Buf(15)
Portc.4 = 1
Portc.4 = 0

Portd = Buf(23)
Portc.5 = 1
Portc.5 = 0

Portc.1 = 0
Waitms Sc_wait
Portc.1 = 1

‘مقدار دهی ستون هفتم از دات ماتریس ها

Portd = Buf(8 )
Portc.3 = 1
Portc.3 = 0

Portd = Buf(16)
Portc.4 = 1
Portc.4 = 0

Portd = Buf(24)
Portc.5 = 1
Portc.5 = 0

Portc.2 = 0
Waitms Sc_wait
Portc.2 = 1

‘پایان حلقه اصلی

Loop

End ‘end program

‘ تابع Sectic می باشد که در هر ثانیه یک بار اجرا می شود و مقدار بافر بر اساس مقادیر جدید زمان و تاریخ به روز می شود.

Sub Sectic:

S = _sec
C = _sec Mod 15

‘ با دستور بالا و بررسی شرط زیر نمایشگر به مدت 7 ثانیه زمان را بافر میکند و به مدت 7 ثانیه تاریخ را نمایش می دهد.

If C < 8 Then

For I = 0 To 3
C = _sec Mod 2
If C = 0 Then ‘
Buf(i + 11) = Lookup(i , Dot)
Else
Buf(i + 11) = 0
End If
Next I

For I = 0 To 4

A = _hour / 10
A = A * 5
A = A + I
Buf(i + 1) = Lookup(a , Font)

A = _hour Mod 10
A = A * 5
A = A + I
Buf(i + 6) = Lookup(a , Font)

A = _min / 10
A = A * 5
A = A + I
Buf(i + 15) = Lookup(a , Font)

A = _min Mod 10
A = A * 5
A = A + I
Buf(i + 20) = Lookup(a , Font)

Next I

Else

For I = 0 To 3
Buf(i + 11) = Lookup(i , Lin)
Next I

For I = 0 To 4
A = _month / 10
A = A * 5
A = A + I
Buf(i + 1) = Lookup(a , Font)

A = _month Mod 10
A = A * 5
A = A + I
Buf(i + 6) = Lookup(a , Font)

A = _day / 10
A = A * 5
A = A + I
Buf(i + 15) = Lookup(a , Font)

A = _day Mod 10
A = A * 5
A = A + I
Buf(i + 20) = Lookup(a , Font)
Next I

End If

End Sub

‘ جدول فونت برای نمایش اعداد بر روی نمایشگر

Font:
Data &H00 , &H3E , &H41 , &H41 , &H3E ‘0
Data &H00 , &H21 , &H7F , &H01 , &H00 ‘1
Data &H00 , &H23 , &H45 , &H49 , &H31 ‘2
Data &H42 , &H41 , &H51 , &H69 , &H46 ‘3
Data &H0C , &H14 , &H24 , &H7F , &H04 ‘4
Data &H72 , &H51 , &H51 , &H51 , &H4E ‘5
Data &H1E , &H29 , &H49 , &H49 , &H06 ‘6
Data &H40 , &H47 , &H48 , &H50 , &H60 ‘7
Data &H36 , &H49 , &H49 , &H49 , &H36 ‘8
Data &H30 , &H49 , &H49 , &H4A , &H3C ‘9

Dot:
Data &H00 , &H36 , &H36 , &H00 , &H00 ‘:

Lin:
Data &H00 , &H08 , &H08 , &H00 , &H00 ‘

امیدواریم این مطلب برای شما عزیزان مفید واقع شده باشد.

همچنین در صورت نیاز به قطعات مربوط به این پروژه می توانید آنها را از

اینجا

تهیه فرمایید

موفق و پیروز باشید.

کپی برداری از مطالب این سایت بدون ذکر منبع ممنوع می باشد. با تشکر از همکاری شما عزیزان.

دسته بندی : پروژه های آموزشی


۱ Comment

نوید جاوید

فروردین ۸, ۱۴۰۱ at ۱۰:۵۶ ب.ظ

سلام لطفا فایل هکس پروژه رو هم بزارید. ممنونم

ارسال نظرات