ماشین حساب
پروژه: ماشین حساب با استفاده از LCD و کیپد 4×4 و ATmega32
در این پروژه، با استفاده از میکروکنترلر ATmega32، یک کیپد 4×4 و LCD کاراکتری، یک ماشین حساب ساده طراحی و پیادهسازی خواهیم کرد. این ماشین حساب قادر به انجام عملیاتهای پایه مانند جمع، تفریق، ضرب و تقسیم خواهد بود.
هدف این پروژه، طراحی یک ماشین حساب است که ورودیها از طریق کیپد 4×4 دریافت میشود و نتایج روی LCD نمایش داده میشود. این پروژه به کاربر امکان انجام محاسبات مختلف را میدهد و نتیجه عملیاتها به صورت گرافیکی روی LCD نمایش داده خواهد شد.
موارد مورد نیاز:
– میکروکنترلر ATmega32
– کیپد 4×4
– LCD کاراکتری 16×2
– 4 مقاومت 10 کیلو اهم (برای استفاده در کیپد)
– برد بورد و سیمهای اتصال
این پروژه برای آشنایی با کار با کیپد، نمایشگر LCD، انجام عملیات ریاضی و برنامهنویسی میکروکنترلر ATmega32 بسیار مناسب است.
#include
#include
#include
#include
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 در این پروژه برای مدیریت ردیفهای کیپد به کار میروند، و در صورتی که پینهای صحیح شناسایی نشوند، عملکرد کیپد دچار مشکل میشود.
سلام و درود خدمت استاد
لطفا نقشه شماتیک 13 همین پروژه رو یعنی ماشین حساب با کیپد رو قرار بدید تا روی برد برد ببندیم و تست کنیم ممنون بابت زحماتتون