همه چیز از همه جا برای تو

دنیای سرگرمی های خاص خاص

همه چیز از همه جا برای تو

دنیای سرگرمی های خاص خاص

پروژه ساعت دیجیتال دقیق در چهار 7segment جدا از هم ( 1digit )

با سلام

یکی از دوستان از من خواستن که برنامه ساعت دیجیتال دقیق با سون سگمنت که در پست های قبل گذاشتم به صورتی باشه که ساعت در 4سون سگمنت  تکی نمایش داده بشه نه در یک سون سگمنت 4 تایی


این پروژه با یک آیسی Atmega 16 چون احتیاج به پورت های بیشتری هست

و چهار سون سگمنت تکی یا به قول بعضی ها ( 1digit )

, دو LED که در هر ثانیه چشمک میزنن بین ساعت و دقیقه باید قرار بگیرن همان طور که در عکس میبینید

و دو کلید یکی برای تنظیم ساعت و یکی برای تنظیم دقیقه


توضیح برنامه

========

توضیح برنامه ساعت دیجیتال در 4 سون سگمنت جدا از هم
خط اول : معرفی آیسی میکرو atmega 8 به برنامه
خط دوم:فرکانس کاری میکرو
خط سوم:پیکره بندی کردن ماژول ساعت
خط 4:فعال کردن وقفه سراسری
خ5:مقداراولیه دادن به ساعت که هر تایمی خواستی میتونی وارد کنی
خ6:و7و8و9 : پیکره بندی کردن پورت های A B C D به عنوان خروجی
خ10و11 : پیکره بندی پین a.7 , b.7 به عنوان ورودی برای وصل کردن کلید به این پورت ها
3خ بعدی : تغییر نام پورت های ورودی با دستور alias شما هر اسمی به جای hour-key , ... میتونی بزاری
خ بعدی تعریف چند متغییر با نام t,h ,s
خط های بعد تعریف چند گروه با دستور declare sub جلوی این دستور هر اسمی خواستین برای گروه انتخاب میکنید
خط بعد یک حلقه پایان ناپذیر do loop که درون این حلقه گروه های keyscan , refresh به طور دایم با دستور call فراخوانی میشوند
خط بعد ابتدای گروه را با sub شروع میکنیم مثلا شروع گروه keyscan
خ بعد دستور های شرط if then و با دستور end if این شرط پایان میابد
مثلا این شرط گفته وقتی hour-key صفر شد یعنی کلیدی که به پین ورودی A.7 وصله با دستور incr یک واحد بر ساعت اضافه کن
در شرط بعدی با این تفاوت که وقتی پین d.7 صفر شد با دستور incr یک واحد بر دقیقه اضاف کن
و اما call 4key در این شرط کارش اینه که وقتی دست ما روی کلید هست این عدد ها با چه سرعتی زیاد شوند این دستور گروه 4key را فراخوانی میکند در گروه 4key یک حلقه for next وجود دارد که 300 بار تکرار میشود و وقتی دست ما روی کلید است عدد به سرعت افزایش نمیابد( یعنی تا میکرو 300 بار تو این حلقه بچرخه و برگرده و دوباره به عدد اضافه کنه این عمل باعث میشه تا عدد با سرعت کمتری افزایش پیدا کنه هر چی این عددبزرگتر باشه وقتی دست ما رو کلیده عدد با سرعت کمتری افزایش پیدا میکنه)
دستور end sub یعنی پایان گروه
کار گروه refresh گروه یکان و دهگان ساعت و دقیقه را برای ما جدا میکند یعنی اگر ساعت و دقیقه 4 عدد هستند هر یک از این عدد ها را جدا میکند مثلا ساعت 12:20 میشود 1 2 2 0 در کل تیکه تیکه میشن و در متغییر T ریخته میشوند
کار گروه Send 1 این گروه مقدار t را از جدول نوشته شده باینری segdata میخواند یعنی وقتی t است از جدول segdata عدد باینری 00000110 را در پورت A میکند و باعث میشود عدد یک در سون سگمنت روشن شود و وقتی 2 است باز به همین ترتیب عدد باینری 01011011 را در خروجی ظاهر میکند و عدد 2 در سون سگمنت روشن میشود . که send 1 دهگان ساعت است
send 2 یکان send 3 دهگان دقیقه , send 4 یکان دقیقه هست .
گروه های دیگر هم مثل send 2 send 3 send 4 همین وظیفه را دارند با این تفاوت که این عدد ها را در پورت های B C D ظاهر میکنند

با دستور call این گروه ها خوانده میشوند و دستوراتی که درون این گروه ها هست اجرا میشود . یعنی در این برنامه به طور دایم گروه های keyscan , refresh خوانده میشوند و رنامه های هر گروه اجرا میشود
تمام


دانلود سورس و نقشه پروتیوس

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد