NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2526 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 5 از 5

موضوع: نوشتن برنامه ماشین حساب با key pad ت

  1. #1
    عضو جدید
    تاریخ عضویت
    Jan 2009
    نوشته ها
    8
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض نوشتن برنامه ماشین حساب با key pad ت

    با سلام

    من میخوام یک ماشین حساب را به کمک یک key pad تلفنی و دو سون سگمنت BCD به صورتی که اگر یک عدد و ستاره که در اینجا به معنی ضرب هست با یک عدد دیگر بزنیم و سپس دکمه مربع را بفشاریم حاصلضرب را در سون سگمنتها نمایش دهد. البته گفتنی است که عملیات ضرب ما فقط یک رقمی خواهد بود (مثال: آخرین عدد 81=9*9)

    برنامه را به زبان ++C اگر ممکنه توضیح بدین با کد وبژن کار می کنم و شبیه سازی رو در پروتئوس انجام می دهم.

    این برنامه رو خود تا اونجا که اعداد را از صفحه کلید اسکن می کنه نوشتم ولی تو اونجایی که باید با هم ضرب بشن موندم.

    از همکاری شما کمال سپاس گذاری را دارم

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    32
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    سلام

    همین که کلیدها را میتونی تشخیص بدی تقریباً 50% کار را انجام دادی. منظورت از اینکه قسمت ضرب کردن را نمیدونی چکار کنی چیه؟ یعنی نمیدونی چطور برنامه را هدایت کنی بطوریکه پس از دریافت یک عدد و سپس علامت ضرب، عدد دوم را بگیرد و سپس نتیجه؟

    یک الگوریتم پیشنهادی به اینصورت است که یک متغیر به عنوان نگهدارنده وضعیت جاری ماشین حساب تعریف کنی. مثلاً 0 یعنی آماده دریافت آپرند اول (عدد اول)، 1 اماده دریافت عملگرد (مثلاً ضرب)، 2 آماده دریافت آپرند دوم (عدد دوم)، 3 یعنی اماده نمایش نتایج. سپس در داخل یک حلقه ابتدا یک کلید را از ورودی خوانده و براساس وضعیت جاری ماشین حساب آن کلید را پردازش کنی.

  4. تشکرها از این نوشته :


  5. #3
    عضو جدید
    تاریخ عضویت
    Jan 2009
    نوشته ها
    8
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوست عزيز

    من وقت زيادي ندارم الان تو امتحاناتم اگه ممكنه ي جور با برنامه توضيح بده كه بفهمم
    از كمكت ممنونم

  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    32
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    یه چیزی مثل این (مه سادش کردم که کاملاً واضح باشه):
    unsigned char status = 0;
    unsigned int op1, op2;
    unsigned char operator;
    unsigned int result;

    c = readkey();
    switch(status)
    {
    case 0:
    op1 = c;
    status = 1;
    break;
    case 1:
    if(c == '*')
    {
    operand = c;
    status = 2;
    }
    break;
    case 2:
    op2 = c;
    status = 3;
    break;
    case 3:
    if(c == '=')
    {
    result = op1 * op2;
    display(result);
    status = 0;
    }
    break;
    }

    فرض کردم که تابع readkey کلید را می خواند. تابع display مقدار را نمایش می دهد. op1 آپرند اول و op2 آپرند دوم. operator هم که عملگر است که در اینجا همیشه ضرب است.

  7. تشکرها از این نوشته :


  8. #5
    تازه وارد
    تاریخ عضویت
    Feb 2016
    نوشته ها
    2
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوستان
    من یه برنامه ماشین حساب ساده برا انجام 4 عمل اصلی تو محیط AtmelStudio نوشتم ولی مشکلش اینه که وقتی یه بار یه محاسبه رو انجام داد برای بار دوم اگه یکی از کلیدهای 7،8 یا 9 رو بزنم همش مساوی چاپ میکنه و کلا به هم میریزه. کسی میتونه راهنماییم کنه؟
    این لینک فایلای اتمل استودیو و پروتئوسه:
    Simple-Calculator دانلود OPLOAD.ir - آپلود |آپلود عکس|آپلود فایل| آپلود موزیک|آپلود آهنگ


    اینم برنامه:

    /*
    * calc.cpp
    *
    * Created: 5/7/2017 11:37:53 AM
    * Author : Reza
    */


    #include <avr/io.h>
    #define F_CPU 1000000
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include "lcd.h"
    #include "lcd.c"
    #include <stdio.h>




    char key=0xff;
    char buffer[2];
    volatile int op=0;
    volatile int fin=0;
    char shift[4]={0XFE,0XFD,0XFB,0XF7};
    volatile int c=0;
    void keypad4X4(void)
    {
    int i=0;
    for (i=0;i<4;i++)
    {
    PORTD=shift[i];
    _delay_ms(2);
    if(bit_is_clear(PIND, PD4)) switch(i){
    case 0: key=7; c=0;
    break;
    case 1: key=4; c=0;
    break;
    case 2: key=1; c=0;
    break;
    case 3: key='C'; lcd_clrscr(); lcd_home(); c=2;
    }

    if(bit_is_clear(PIND, PD5)) switch(i){
    case 0: key=8; c=0;
    break;
    case 1: key=5; c=0;
    break;
    case 2: key=2; c=0;
    break;
    case 3: key=0; c=0;
    }

    if(bit_is_clear(PIND, PD6)) switch(i){
    case 0: key=9; c=0;
    break;
    case 1: key=6; c=0;
    break;
    case 2: key=3; c=0;
    break;
    case 3: key='='; fin=1; c=1;
    }

    if(bit_is_clear(PIND, PD7)) switch(i){
    case 0: key='/'; op=1; c=1;
    break;
    case 1: key='*'; op=2; c=1;
    break;
    case 2: key='-'; op=3; c=1;
    break;
    case 3: key='+'; op=4; c=1;
    }
    PORTD=0XF0;
    }
    }
    int main(void)
    {
    DDRD=(1<<DDD0)|(1<<DDD1)|(1<<DDD2)|(1<<DDD3);
    PORTD=0XF0;
    PORTB=(1<<2);
    GICR=(1<<INT2);
    MCUCSR=(0<<ISC2);
    sei();
    lcd_init(LCD_DISP_ON);
    lcd_clrscr();
    lcd_home();
    while (1);
    }


    ISR(INT2_vect)
    { static int t=0;
    static int j=0;
    static char answer=0;
    static char input[3]={20,20,20};

    if(t) {
    t=0;
    lcd_clrscr();
    lcd_gotoxy(0,0);
    }

    keypad4X4();
    input[j]=key;
    sprintf(buffer,"%d",input[j]);
    lcd_gotoxy(j++,0);
    if(!c) lcd_puts(buffer);
    else if(c==1) lcd_putc(key);
    if(fin==1)//اگر کلید "=" زده شد
    {
    fin=0;
    j=0;
    t=1;
    switch (op)
    {
    case 1: { op=0; if(!input[2]) { lcd_puts("ERROR"); break; } else answer=input[0]/input[2]; sprintf(buffer,"%d",answer); lcd_puts(buffer); break;}

    case 2: { op=0; answer=input[0]*input[2]; sprintf(buffer,"%d",answer); lcd_puts(buffer); break;}

    case 3: { op=0; if(input[0]<input[2]) {answer=input[2]-input[0]; sprintf(buffer,"-%d",answer); } else {answer=input[0]-input[2]; sprintf(buffer,"%d",answer);} lcd_puts(buffer); break;}

    case 4: { op=0; answer=input[0]+input[2]; sprintf(buffer,"%d",answer); lcd_puts(buffer); break;}
    }
    }
    }


    ممنون

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •