فهرست بستن

سیزدهمین پروژه: ماشین حساب با keypad و lcd

ماشین حساب

پروژه: ماشین حساب با استفاده از LCD و کیپد 4×4 و ATmega32

در این پروژه، با استفاده از میکروکنترلر ATmega32، یک کیپد 4×4 و LCD کاراکتری، یک ماشین حساب ساده طراحی و پیاده‌سازی خواهیم کرد. این ماشین حساب قادر به انجام عملیات‌های پایه مانند جمع، تفریق، ضرب و تقسیم خواهد بود.

هدف این پروژه، طراحی یک ماشین حساب است که ورودی‌ها از طریق کیپد 4×4 دریافت می‌شود و نتایج روی LCD نمایش داده می‌شود. این پروژه به کاربر امکان انجام محاسبات مختلف را می‌دهد و نتیجه عملیات‌ها به صورت گرافیکی روی LCD نمایش داده خواهد شد.

موارد مورد نیاز:
– میکروکنترلر ATmega32
– کیپد 4×4
– LCD کاراکتری 16×2
– 4 مقاومت 10 کیلو اهم (برای استفاده در کیپد)
– برد بورد و سیم‌های اتصال

این پروژه برای آشنایی با کار با کیپد، نمایشگر LCD، انجام عملیات ریاضی و برنامه‌نویسی میکروکنترلر ATmega32 بسیار مناسب است.

				
					#include <mega32.h>
#include <alcd.h>
#include <delay.h>
#include <stdio.h>
char c[16];
int k=20;
float A=0,B=0;
int flagAmalgar=0;
void keypad(void)
    {
    PORTD.0=1;
    delay_ms(5);
    if(PIND.4==1){k=1;}

    if(PIND.5==1){k=2;}
    if(PIND.6==1){k=3;}
    if(PIND.7==1){k=10;}

    PORTD.0=0;

    PORTD.1=1;
    delay_ms(5);
    if(PIND.4==1){k=4;}

    if(PIND.5==1){k=5;}
    if(PIND.6==1){k=6;}
    if(PIND.7==1){k=11;}
    PORTD.1=0;

    PORTD.2=1;
    delay_ms(5);
    if(PIND.4==1){k=7;}

    if(PIND.5==1){k=8;}
    if(PIND.6==1){k=9;}
    if(PIND.7==1){k=12;}
    PORTD.2=0;

    PORTD.3=1;
    delay_ms(5);
    if(PIND.4==1){k=13;}

    if(PIND.5==1){k=0;}
    if(PIND.6==1){k=14;}
    if(PIND.7==1){k=15;}

    PORTD.3=0;
}

void main(void)
{
lcd_init(16);
DDRD=0x0F; PORTD=0x00;
while (1)
    { 
        keypad();
        if(k>=0 && k<=9)
            { 
            if(flagAmalgar==0){A=A*10+k;}
            else {B=B*10+k;}
            sprintf(c,"%d",k); 
            lcd_puts(c); 
            k=20;
            }  
        if(k==10) {lcd_putsf("/");flagAmalgar=1; k=20;} 
        if(k==11) {lcd_putsf("X");flagAmalgar=2; k=20;}
        if(k==12) {lcd_putsf("-");flagAmalgar=3; k=20;}
        if(k==13) {lcd_clear();A=0;B=0;flagAmalgar=0; k=20;}  
        if(k==14)
            {
            lcd_putsf("="); 
            if(flagAmalgar==1){sprintf(c,"%.2f",A/B); lcd_puts(c);}  
            if(flagAmalgar==2){sprintf(c,"%.2f",A*B); lcd_puts(c);}
            if(flagAmalgar==3){sprintf(c,"%.2f",A-B); lcd_puts(c);}
            if(flagAmalgar==4){sprintf(c,"%.2f",A+B); lcd_puts(c);}
            k=20;
            }
        if(k==15) {lcd_putsf("+"); flagAmalgar=4; k=20;}
    }
}
				
			

این کد مربوط به یک ماشین‌حساب ساده است که با استفاده از میکروکنترلر ATmega32، LCD 16×2 و کیپد 4×4 پیاده‌سازی شده است. در این پروژه، عملیات‌های مختلف ریاضی (جمع، تفریق، ضرب، تقسیم) توسط ورودی‌های گرفته‌شده از کیپد انجام می‌شود و نتیجه عملیات روی LCD نمایش داده می‌شود.

 توضیح کد:
1. تعریف متغیرها:
– `k`: متغیر برای ذخیره‌سازی کلید فشرده‌شده از کیپد.
– `A` و `B`: متغیرهای برای ذخیره‌سازی اعداد وارد شده توسط کاربر.
– `flagAmalgar`: برای شناسایی عمل‌گر انتخاب‌شده (مثل جمع، تفریق، ضرب و تقسیم).

2. تابع `keypad()`:
– این تابع وظیفه خواندن ورودی‌ها از کیپد 4×4 را دارد.
– در هر بار فراخوانی این تابع، با فعال کردن هر ردیف (PORTD.0 تا PORTD.3) و چک کردن وضعیت هر کلید، ورودی فشرده‌شده شناسایی می‌شود.

3. تابع `main()`:
– در این بخش، ابتدا LCD راه‌اندازی می‌شود و سپس وارد حلقه بی‌پایان می‌شود.
– پس از خواندن کلید فشرده‌شده از کیپد، بسته به نوع کلید، عملیات مختلف انجام می‌شود.
– اگر یک عدد وارد شود، به یکی از متغیرهای `A` یا `B اضافه می‌شود.
– اگر یکی از عمل‌گرها (جمع، تفریق، ضرب، تقسیم) انتخاب شود، عمل‌گر مربوطه ذخیره می‌شود.
– اگر کلید `=` فشرده شود، نتیجه عملیات محاسبه شده و روی LCD نمایش داده می‌شود.
– کلید `C` برای پاک‌کردن مقادیر قبلی استفاده می‌شود.

4. ملاحظات مربوط به سخت‌افزار:
– در این پروژه، پایه‌های کیپد به درستی تنظیم نشده‌اند و نیاز به آزمایش و خطا دارند. به عبارت دیگر، با تغییر پین‌های کیپد و استفاده از آزمون و خطا، پایه‌های درست برای ردیف‌ها و ستون‌ها پیدا می‌شوند.
– چون تعداد پین‌های کیپد زیاد است، ابتدا باید پایه‌های کیپد به طور موقتی به پورت‌ها متصل شده و سپس با تست‌های مختلف، پین‌های صحیح شناسایی شوند.

 نکات مهم:
– در طراحی سخت‌افزار این پروژه، باید به سیم‌کشی صحیح کیپد دقت شود و با استفاده از آزمایش و خطا پایه‌ها به درستی شناسایی شوند.
– پایه‌های PORTD در این پروژه برای مدیریت ردیف‌های کیپد به کار می‌روند، و در صورتی که پین‌های صحیح شناسایی نشوند، عملکرد کیپد دچار مشکل می‌شود.

1 Comments

  1. Amirhosein

    سلام و درود خدمت استاد
    لطفا نقشه شماتیک 13 همین پروژه رو یعنی ماشین حساب با کیپد رو قرار بدید تا روی برد برد ببندیم و تست کنیم ممنون بابت زحماتتون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *