راه اندازی سون سگمنت

شنبه 29 شهرویور 1393  •  دسته بندی: پروژه های آماده با میکروکنترلر AVR  •  بازدیدها: 4305  •  برچسب ها: | |

هدف پروژه: می خواهیم تابعی بنویسیم که اعداد را روی نمایشگر 7 قسمتی نمایش دهد و بتوان آن را در برنامه های مختلف صدا زد.

سخت افزار مورد استفاده: در اینجا از برد آموزشی avr شرکت نامینیک که مبتنی بر تراشه ATMEGA32 است استفاده می کنیم. در قسمت پایین برد یک عدد نمایشگر 7 قسمتی 4 تایی وجود دارد. 7 عدد آند نمایشگر به پایه های 0 الی 6 پورت c میکرو وصل شده و 4 عدد کاتد نمایشگر برای انتخاب یکی از 4 عدد نمایشگر و تنظیم نور نمایشگر، به امیتر 4 ترانزیستور وصل شده. پایه های 4 الی 7 پورت b میکرو هم به بیس این ترانزیستور ها وصل شده است. ترانزیستور ها از نوع pnp بوده و کلکتور آن زمین شده است. یعنی برای روشن کردن نمایشگر باید آندها را 1 کرد و یک یا چند پایه از 4 پورت b را صفر. نمایشگر آند مشترک است.

کتابخانه های استفاده شده: در این برنامه  کتابخانه خود میکرو و کتابخانه تاخیر مورد نیاز است که در خطوط 9 و 10 از برنامه دیده می شوند. ضمن اینکه کتابخانه توابع ریاضی و کتابخانه stdlib در خطوط 11 و 12 فراخوانی شده اند.

شرح کد برنامه: در خط 14 یک آرایه تعریف شده که کد اعداد و بعضی حروف را برای نمایشگر های آند مشترک در آن قرار داده ایم. مثلا اولین خانه عدد 0x3F بوده به معنی عدد صفر. در خط 17 هم یک آرایه 4 تایی تعریف شده که با فراخوانی هر خانه آن یک نمایشگر روشن می شود.

خطوط 30 تا 54 تابع ss_s قرار دارد این تابع یک عدد صحیح از 0 تا 9999 می گیرد و در 4 عدد نمایشگر نشان می دهد. در غیر این صورت علامت Err را به معنی خطا نمایش می دهد.

دقت کنید اگر برنامه شما بیشتر از این است. تابع  ss_s را حداکثر در فاصله زمانی 20 میلی ثانیه فرا بخوانید تا نور صفحه نمایشگر ها کمرنگ یا چشمک زن نشود.

#include <mega32.h>
#include <delay.h>

int i;

unsigned char num_code[15]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
                   0x07,0x7F,0x6F,0x80,0x31,0x31,0x79,0x40};

unsigned char shpins[4]={0x70,0xE0,0xB0,0xD0};

void disp_err(void)
{
   for(i=0;i<3;i++)
     {
        PORTC=num_code[i+11];
        PORTB=shpins[i];
        delay_us(500);
     }
     PORTB=0xF0;
}

void ss_s(int num)
{
   int t,l,c=0;
   bit g=1;
   t=num;
   if(num>9999 || num<0)
   {
      disp_err();
   }
   else
   {                     
     while(t!=0 || g)
     {
        t=t/10;
        l=num-t*10;
        num=num/10;
        PORTC=num_code[l];
        PORTB=shpins[c];
        delay_us(500);
        PORTB=0xF0;
        c++;
        g=0;
     }
   }
}

void main(void)
{
DDRC=0xFF;
PORTC=0x4F;
DDRB=0xF0;

while (1)
      {
        ss_s(1188);
        delay_ms(19);
      }
}

دانلود سورس کد

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

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

این مطلب را به اشتراک بگذارید:

نظری در این باره وجود ندارد، شما می توانید اولین کسی باشید که نظر می دهید.
نام:
ایمیل:
نظر: