اطلاعیه

Collapse
No announcement yet.

خواندن عدد دو رقمی از کیبرد و مقایسه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    خواندن عدد دو رقمی از کیبرد و مقایسه

    سلام دوستان عزیز اول از همه تولد حضرت علی اکبر و روز جوان مبارک همه شما باشه :applause:

    ی کیبرد به میکرو وصله که میخام تا عدد مثلا 25 خونده شد ی چراغ را روشن کنه و اگر غیر از این عدد بود چراغ دیگه ای را چشمک زنان روشن کنه

    این برنامه برای تک عددی را نوشتم اما دو عددی یکم گیر دارم


    کد:
    #include <mega16.h>
    #include <delay.h>
    
    
    volatile unsigned char data,b=0,i;
    
    void ref_key(){
    DDRC=0X0f;
    PORTC=0xff;
    PORTC.0=0;
    delay_ms(15);
    if(PINC.4==0){data=7,b=1;} 
    if(PINC.5==0){data=4,b=1;} 
    if(PINC.6==0){data=1,b=1;} 
    if(PINC.7==0){data=14,b=1;} 
    //*************************
    PORTC=0xff;
    PORTC.1=0;
    delay_ms(15);
    if(PINC.4==0){data=8,b=1;} 
    if(PINC.5==0){data=5,b=1; }
    if(PINC.6==0){data=2,b=1; }
    if(PINC.7==0){data=15,b=1; }
    //*************************
    PORTC=0xff;
    PORTC.2=0;
    delay_ms(15);
    if(PINC.4==0){data=9,b=1;} 
    if(PINC.5==0){data=6,b=1; }
    if(PINC.6==0){data=3,b=1; }
    if(PINC.7==0){data=16,b=1; }
    //************************
    PORTC=0xff;
    PORTC.3=0;
    delay_ms(15);
    if(PINC.4==0){data=11,b=1;} 
    if(PINC.5==0){data=12,b=1; }
    if(PINC.6==0){data=13,b=1; }
    if(PINC.7==0){data=17,b=1; }
    //************************
    } 
    
    
    
    void main (){
    DDRA=0XFF;
    DDRB=0XFF;
    
    while (1){
    
    ref_key();
    
    if(b==1){ // که اگر هیچ کلیدی زده نشد به قسمت الس نره 
    
    
    if (data==6){
    PORTA.0=1;
    PORTB.0=0;}
    
    else {
    PORTA.0=0;
    for(i=0;i<3;i++){
    PORTB.0=1;
    delay_ms(500);
    PORTB.0=0;
    delay_ms(500);
    b=0;
    }
    }
    }
    }


    اینم چیزی که از دو عددی به ذهنم رسید ولی جواب نمیده

    کد:
    #include <mega16.h>
    #include <delay.h>
    
    
    volatile unsigned char data,b=0,x=0,a=0;
    
    void ref_key(){
    DDRC=0X0f;
    PORTC=0xff;
    PORTC.0=0;
    delay_ms(15);
    if(PINC.4==0){data=7,b=1,x++;} 
    if(PINC.5==0){data=4,b=1,x++;} 
    if(PINC.6==0){data=1,b=1,x++;} 
    if(PINC.7==0){data=14,b=1,x++;} 
    //*************************
    PORTC=0xff;
    PORTC.1=0;
    delay_ms(15);
    if(PINC.4==0){data=8,b=1,x++;} 
    if(PINC.5==0){data=5,b=1,x++; }
    if(PINC.6==0){data=2,b=1,x++; }
    if(PINC.7==0){data=15,b=1,x++; }
    //*************************
    PORTC=0xff;
    PORTC.2=0;
    delay_ms(15);
    if(PINC.4==0){data=9,b=1,x++;} 
    if(PINC.5==0){data=6,b=1,x++; }
    if(PINC.6==0){data=3,b=1,x++; }
    if(PINC.7==0){data=16,b=1,x++; }
    //************************
    PORTC=0xff;
    PORTC.3=0;
    delay_ms(15);
    if(PINC.4==0){data=11,b=1,x++;} 
    if(PINC.5==0){data=12,b=1,x++; }
    if(PINC.6==0){data=13,b=1,x++; }
    if(PINC.7==0){data=17,b=1,x++; }
    //************************
    } 
    
    
    
    void main (){
    DDRA=0XFF;
    DDRB=0XFF;
    
    while (1){
    
    ref_key();
    
    //if(b==1){
    
    if(x==1){
    a=data*10;
    if(x==2) {
    data=a+data;
    x=0;
    
    if (data==69)
    PORTA.0=1;
    
    
    else {
    PORTA.0=0;
    //for(i=0;i<3;i++){
    PORTB.0=1;
    delay_ms(500);
    PORTB.0=0;
    delay_ms(500);
    b=0;
    //x=0;
    }
    }
    }
    }
    }

    #2
    پاسخ : خواندن عدد دو رقمی از کیبرد و مقایسه

    سلام دوست عزیز
    اگه برنامه رو ب زبون بسکام میخواستین میتونستم کمک بیشتری بکنم.ولی در کل واسه اینکه میکرو فرق اعداد دو رقمی رو بفهمه(ینی وقتی شما ابتدا کلید 2 و بعد کلید 5 رو بزنی بفهمه این عدد 25 هس)
    اول باید متغیر رو تعریف کرد بعد شما یه دستور میزارین که (البته این ساده ترین راهشه)هر وقت عدد اول وارد شد اونو ضرب در 10 کن و بعد به عدد دوم اضافه کن.مثلا 5+10×2=25 برای اعداد با رقمای بیشترم میشه این کارو ادامه داد.برای مقایسه هم از if استفاده میشه که الگوریتمش ب این صورته :اگه حاصل اعداد وارد شده برابر xبود فلان کارو انجام بده.
    امید وارم کمکت کرده باشم

    دیدگاه


      #3
      پاسخ : خواندن عدد دو رقمی از کیبرد و مقایسه

      نوشته اصلی توسط saeed khakdan
      سلام دوست عزیز
      اگه برنامه رو ب زبون بسکام میخواستین میتونستم کمک بیشتری بکنم.ولی در کل واسه اینکه میکرو فرق اعداد دو رقمی رو بفهمه(ینی وقتی شما ابتدا کلید 2 و بعد کلید 5 رو بزنی بفهمه این عدد 25 هس)
      اول باید متغیر رو تعریف کرد بعد شما یه دستور میزارین که (البته این ساده ترین راهشه)هر وقت عدد اول وارد شد اونو ضرب در 10 کن و بعد به عدد دوم اضافه کن.مثلا 5+10×2=25 برای اعداد با رقمای بیشترم میشه این کارو ادامه داد.برای مقایسه هم از if استفاده میشه که الگوریتمش ب این صورته :اگه حاصل اعداد وارد شده برابر xبود فلان کارو انجام بده.
      امید وارم کمکت کرده باشم

      سلام تشکر دوست عزیز
      این کارا که میگی دقیقا منم انجام دادم ولی نمیشه جواب نمیده

      دیدگاه


        #4
        پاسخ : خواندن عدد دو رقمی از کیبرد و مقایسه

        من از این روش تو پروژه قفل رمزی استفاده کردم و با بسکام جواب گرفتم
        فقط یه جا گیر کردم وقتی عدد و وارد میکردم رو lcd چیزی نشون نمیداد یا یه عدد دیگرو نشون میداد که مشکل از روغن باقی مونده بین اتصالات فلت با کی پد بود که با الکل حل شد

        دیدگاه


          #5
          پاسخ : خواندن عدد دو رقمی از کیبرد و مقایسه

          کد زیر رو ببین
          یه ماشن حساب با 4 عمل اصلی.....تا n رقم کار مکنه....اعداد 1 و 2 و 3 رقمی تست کردم جواب داد
          [code=c]#include <mega16.h>
          #include <math.h>
          #include <stdlib.h>
          #include <delay.h>
          #include <lcd.h>
          #asm
          .equ __lcd_port=0x15 ;PORTC
          #endasm


          int number=0;
          char str[10];
          int key1;
          float javab,adad=0;
          float InterAdad[10];


          int Feshrode_SHodane_Kelid(void)
          {
          PORTA.0=0; PORTA.1=1; PORTA.2=1; PORTA.3=1;
          if(!PINA.4) return 1;
          if(!PINA.5) return 2;
          if(!PINA.6) return 3;
          if(!PINA.7) return 10;

          PORTA.0=1; PORTA.1=0; PORTA.2=1; PORTA.3=1;
          if(!PINA.4) return 4;
          if(!PINA.5) return 5;
          if(!PINA.6) return 6;
          if(!PINA.7) return 11;

          PORTA.0=1; PORTA.1=1; PORTA.2=0; PORTA.3=1;
          if(!PINA.4) return 7;
          if(!PINA.5) return 8;
          if(!PINA.6) return 9;
          if(!PINA.7) return 12;

          PORTA.0=1; PORTA.1=1; PORTA.2=1; PORTA.3=0;
          if(!PINA.4) return 15;
          if(!PINA.5) return 0;
          if(!PINA.6) return 14;
          if(!PINA.7) return 13;

          return 16;
          }


          void Namayesh(int key2)
          {
          if(key2==0) lcd_puts("0"
          if(key2==1) lcd_puts("1"
          if(key2==2) lcd_puts("2"
          if(key2==3) lcd_puts("3"
          if(key2==4) lcd_puts("4"
          if(key2==5) lcd_puts("5"
          if(key2==6) lcd_puts("6"
          if(key2==7) lcd_puts("7"
          if(key2==8) lcd_puts("8"
          if(key2==9) lcd_puts("9"
          if(key2==10)lcd_puts("/"
          if(key2==11)lcd_puts("*"
          if(key2==12)lcd_puts("+"
          if(key2==13)lcd_puts("-"
          if(key2==14)lcd_puts("="
          if(key2==15){lcd_clear(); number=0; adad=0;}

          delay_ms(300);
          }


          //void Mode_Basic(){}


          void main(void)
          {
          //چهار تا پایه اول ورودی و پول دان شدن
          DDRA=0X0F; PORTA=0XF0;

          lcd_init(16);

          while (1)
          {
          key1 = Feshrode_SHodane_Kelid();//دریافت عدد-اگه دکمه ای فشرده نشه عدد 16 ارسال میشه از طرف تابع
          if(key1!=16)Namayesh(key1);//نمایش دکمه فشرده شده


          if(key1>=0 && key1<=9)// 0 1 2 3 4 5 6 7 8 9
          {
          adad = 10 * adad + key1;
          InterAdad[number]=adad;
          }


          if(key1>=10 && key1<=13)// + - / *
          {
          number++;
          InterAdad[number]=key1;

          number++;
          adad=0;
          }


          if(key1==14)// = >>> نمایش جواب
          {
          if(InterAdad[1]==10)javab=InterAdad[0]/InterAdad[2];
          if(InterAdad[1]==11)javab=InterAdad[0]*InterAdad[2];
          if(InterAdad[1]==12)javab=InterAdad[0]+InterAdad[2];
          if(InterAdad[1]==13)javab=InterAdad[0]-InterAdad[2];

          ftoa(javab,2,str);
          lcd_puts(str);

          number=0; adad=0;
          }
          };
          }[/code]
          اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

          اگه دوس دارید سریع به جواب برسید :
          1) قبل از پرسیدن سوال، بسرچید.
          2) سوالاتون رو با جزئیات کامل مطرح کنید.

          دیدگاه

          لطفا صبر کنید...
          X