اطلاعیه

Collapse
No announcement yet.

طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

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

    طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

    با سلام و خسته نباشید خدمت شما
    من میخام با محیط bascome یا codvision برنامه میکرو را برای ماشین حساب بنویسم بعد با proteus شبیه سازی کنم.لطفا اگه به من در مورد برنامش کمک کنین ممنون میشم.
    در ضمن باید 4 عمل جمع و تفریق و ضرب و تقسیم و رادیکال با فرجه 2و 3 و لگاریتم را انجام دهد.
    تشکر

    #2
    پاسخ : طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

    سلام
    دوست عزیز ببین این بدردت می خوره فقط یک مشکلی هست و اون اینه که سورس برنامه رو ندارم فقط فایل هگز و فایل پروتیوس موجود می باشد.
    در ضمن این برنامه 4 عمل اصلی را انجام می دهد.
    فایل های پیوست شده

    دیدگاه


      #3
      پاسخ : طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

      با تشکر از آقای حیاتی

      دو تا پروژه پ کردم اولی با کدویژن و دومی با بسکام
      فقط اونیکه با بسکام هست تو اتصال keypad کمی اشتباه داره که میتونین درستش کنید!
      هر دو همراه سورس برنامه و فایل پروتیوس هستند!
      ولی امیدوارم پروژه آماده باعث نشه که از فکر کردن تو این زمینه منصرف بشید.
      فایل های پیوست شده
      It's nice to be important but it's important to be nice!

      از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

      دیدگاه


        #4
        پاسخ : طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

        سلام
        میخوام با یه صفحه کلید ماتریسی4*4یه عدد چند رقمی رو روی lcdنمایش بدم بطوریکه ارزش خودشو حفظ کنه یعنی بتونم ضرب وجمعش کنم .الان فقط بصورت تک رقمی نمایش میده.
        البته به زبان C.
        کسی هست کمکم کنه ؟
        ممنون میشم

        دیدگاه


          #5
          پاسخ : طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

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

          دیدگاه


            #6
            پاسخ : طراحی و ساخت ماشین حساب به کمک avr وشبیه سازی با proteus

            تنظیمات LCD توی کانفیگ پروژت انجام بده
            کد:
            #include <mega8.h>
            #include <alcd.h>
            #include <stdio.h>   
             #include <DELAY.H>
            unsigned char lcd[16];
            
            
            #define  port_key PORTB   
            #define  pin_key  PINB         // ����� ���� ˜�����
            #define  ddr_key  DDRB  
            
            
            #define buzzer    PORTC.5
            
            
            
            
             unsigned char a,b,c,cant;
             unsigned long h,yekan,dahgan;   // ����� ������� ��
             float hasel;
            
            
              unsigned char select=0;
            
            
            
            
            char key_code[4][4]={{14,13,0,15},{9,12,8,7},{6,11,5,4},{3,10,2,1}}; // ˜� ��� ˜�����
            
            
            char key; 
            char colom,row;  
            
            
            void scan_key(void){    // ���� ��˜� ˜����� �� ����� ���� �����
            if(pin_key!=0xf0){
            ddr_key=0x0f;
            buzzer=1;                // ���� ��� ��� �˜ � ���� ��� ��� ��� ������
            port_key=0xf0;
            delay_ms(1);
            if (pin_key == 0B01110000)row=0;
            if (pin_key == 0B10110000)row=1;
            if (pin_key == 0B11010000)row=2;      // ��˜� ��� ˜�����
            if (pin_key == 0B11100000)row=3;
            ddr_key=0xf0;
            port_key=0x0f;             // �� ����� ���� ��� ��� ��� ����� � ���� ��� ��� �˜ �����
            delay_ms(1);
            if (pin_key == 0B00000111)colom=0; 
            if (pin_key == 0B00001011)colom=1;
            if (pin_key == 0B00001101)colom=2;  // ��˜� ���� ˜�����
            if (pin_key == 0B00001110)colom=3;
            key=key_code[colom][row];           // �� ��� ����� ��� ���� ���� ���
            
            
            delay_ms(1);
            ddr_key=0x0f;
            port_key=0xf0;
            if(key<10){                               // �� ��� ���� �� ����� ˜� ��� ˜��� �� �� ���
                 if(cant==0)a=key,h=key,cant=1,b=0,c=0;  // ���� ������� ˜��� �� 3 ��� ����� �����
            else if(cant==1)b=key,h=(a*10)+b,cant=2;
            else if(cant==2)c=key,h=((a*100)+(b*10))+c,cant=0;
            
            
            }            // �� ����� ˜� ˜��� ����� ��� ����� �� �� ���
            else {       // �� ���� ����� ���� ��� ˜� ������� ���  ����� ��� �� ����� ����
                 if(key==10)select=0;
            else if(key==11)select=1;
            else if(key==12)select=2;
            else if(key==13)select=3;
            else if(key==14)dahgan=h;
            else if(key==15)yekan=h;
            }
            while(pin_key!=0xf0);
             }  
             
             buzzer=0;
            }
            
            
            
            
            void main(void)
            {
                                  // ��˜� ���� ���� ��
            DDRC=0xff;
            // Alphanumeric LCD initialization
            // Connections are specified in the
            // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
            // RS - PORTD Bit 7
            // RD - PORTD Bit 6
            // EN - PORTD Bit 5
            // D4 - PORTD Bit 4
            // D5 - PORTD Bit 3
            // D6 - PORTD Bit 2
            // D7 - PORTD Bit 1
            // Characters/line: 16
            lcd_init(16);
            ddr_key=0x0f;
            
            
            port_key=0xf0;
            while (1)
                  { 
                  key=17;
                  scan_key();      // ��� �� ���� ��˜� ˜�����
                  
                       if(select==0)hasel=yekan+dahgan;
                  else if(select==1)hasel=yekan-dahgan;  // �� ����� ���� �� ��� ������� ��˜�
                  else if(select==2)hasel=yekan*dahgan;  // ��� �� ����� �� ��� �� ����� �����
                  else if(select==3)hasel=yekan/dahgan; 
                    
                  lcd_clear();             // �� �� �� ��˜ �����
                       if(select==0)sprintf(lcd,"%03d+%03d=%4.1f",yekan,dahgan,hasel);  // ���� �� ��� �������
                  else if(select==1)sprintf(lcd,"%03d-%03d=%4.1f",yekan,dahgan,hasel);  //��˜� ��� ����� ���� �����
                  else if(select==2)sprintf(lcd,"%03d*%03d=%4.1f",yekan,dahgan,hasel);
                  else if(select==3)sprintf(lcd,"%03d/%03d=%4.1f",yekan,dahgan,hasel);
                  lcd_puts(lcd); 
                  lcd_gotoxy(0,1);        // �� �� ��� �� �� ��
                  sprintf(lcd,"Scan_key>%3d",h);   // ��� ���� ��� �� ����� ˜����� �� �� ��� ����� ���� �����
                 lcd_puts(lcd); 
                  delay_ms(200);
               
            
            
                  }
            }
            دلیل: ادغام دو پست برای جلوگیری از اسپم

            این هم یه کد دیگه که 16 عمل انجام میده . ذخیره .... داره توضیح نمیتونم بدم چون ابن برنامه سال 91 نوشتم

            کد:
            #include <mega16.h>
            #include <stdio.h>
            #include <delay.h>
            #include <math.h>
            
            
            #define  port_key PORTA   
            #define  pin_key  PINA
            #define  ddr_key  DDRA
            
            
            
            
            unsigned char lcd[16],l;
            float  yekan,dahgan,hasel,bank2;
             int y,d,s,h,t,mi,bank;   
             
            float z[12];
            char key_code[4][4]={{13,14,0,15},{12,9,8,7},{11,6,5,4},{10,3,2,1}};
            char key; 
            char colom,row,k;  
            
            
            
            
            #include <alcd.h>
            
            
            
            
            //--------------------------------ÈÑäÇãå ÇÓßä ßíÈæÑÏ----------------------
            void scan_key(void){
            ddr_key=0x0f;
            port_key=0xf0;
            delay_ms(10);
            
            
            if (pin_key != 0XF0){
            delay_ms(10);
            if (pin_key == 0B01110000)row=0;
            if (pin_key == 0B10110000)row=1;
            if (pin_key == 0B11010000)row=2;
            if (pin_key == 0B11100000)row=3;
            ddr_key=0xf0;
            port_key=0x0f;
            delay_ms(10);
            if (pin_key == 0B00000111)colom=0; 
            if (pin_key == 0B00001011)colom=1;
            if (pin_key == 0B00001101)colom=2;
            if (pin_key == 0B00001110)colom=3;
            key=key_code[colom][row];
            
            
            if (key<10){
            if(t==0)s=key;
            if(t==1)d=key;
            if(t==2)y=key;
            if(t==3)mi=key;
            
            
            bank=(s*100)+(d*10.0)+y;
            bank2=bank+mi*0.1;
            t++;
            if(t>=4)t=0,y=0,d=0,s=0,h=0,mi=0;
            }
            
            
            }
            ddr_key=0x0f;
            port_key=0xf0;
            delay_ms(50);
            while(pin_key!=0xf0);
            
            
            }
            //-----------------------------------------------------------------------
            
            
            
            
            void main(void)
            {
            bit look;
            lcd_init(16);
            port_key=0xf0;
            ddr_key=0x0f;
            
            
            for (y=0 ; y<=5 ; y++){
            lcd_gotoxy(y,1);
            lcd_putsf(" Calculator");
            
            
            lcd_gotoxy(y,0);
            lcd_putsf(" Engneering");
            delay_ms(800);
            }
            
            
            y=0;
            while (1)
                  {    
                  if(key==11){
                  y=0;
                  d=0;
                  s=0;
                  mi=0;
                  hasel=0;
                  bank2=0;
                  bank=0;
                  yekan=0;
                  dahgan=0;   
                  t=0;
                  }
            //----------------------------------------------------------------------      
                  if(key==12)yekan=bank2,y=0,d=0,hasel=0,t=0;   
                   if(key==13)dahgan=bank2,y=0,d=0,hasel=0,t=0;    
                    if(key==15){
                      lcd_clear(); 
                      look=1;
                      l=0;
                      while(look){  
                      if (pin_key!=0xf0)scan_key(); 
                      if(key==13)l++;
                      if(key==14)l--;  
                        if(key==11)look=0; 
                      key=17;
                      if(l>=13)l=0; 
                      lcd_gotoxy(0,0); 
                      sprintf(lcd,"Memory(%2u)  ",l);
                      lcd_puts(lcd);
                      lcd_gotoxy(0,1);
                      sprintf(lcd,"%6.4f   ",z[l]);
                      lcd_puts(lcd);      
                      delay_ms(100);
                      }                
                      lcd_clear();
                    }
                     
            //---------------------------------------------------------------------        
                  
                  if(key==10){
                  l++;
                  if(l>=17)l=0;
                  key=17;
                  }
                  
                  if(key==14){
                  lcd_clear();
                        if(l==0)hasel=dahgan+yekan;
                   else if(l==1)hasel=dahgan-yekan;
                   else if(l==2)hasel=dahgan/yekan;
                   else if(l==3)hasel=dahgan*yekan;
                   else if(l==4)hasel=sin(dahgan);
                   else if(l==5)hasel=cos(dahgan);  
                   else if(l==6)hasel=sinh(dahgan);
                   else if(l==7)hasel=cosh(dahgan); 
                   else if(l==8)hasel=exp(dahgan);
                   else if(l==9)hasel=log(dahgan);
                   else if(l==10)hasel=log10(dahgan);
                   else if(l==11)hasel=tan(dahgan);
                   else if(l==12)hasel=tanh(dahgan);  
                   else if(l==13)hasel=1/tan(dahgan); 
                     else if(l==14)hasel=sqrt(dahgan);  
                       else if(l==15)hasel=acos(dahgan);
                        else if(l==16)hasel=atan(dahgan);  
            
            
                   
                   if(hasel>999999.99999 || hasel<-999999.99999){
                   hasel=0;
                   lcd_clear();
                   lcd_gotoxy(0,0);
                   lcd_putsf("__Large  Digit__"); 
                   delay_ms(4000);
                   lcd_clear();
                   
                   }
                    
                   z[k]=hasel;  
                   k++;
                   if(k>=12)k=0;
                   lcd_gotoxy(0,0);
                   lcd_putsf(".....Risult.....");
                   lcd_gotoxy(0,1);
                   sprintf(lcd," %6.5f ",hasel);   
                   lcd_puts(lcd);
                   delay_ms(4000);
                   lcd_clear();   
                   y=0;
                   d=0;
                   hasel=0;
                   t=0;
                  
                  }                           
                  
                  
                  
                  
                  
                 if(key==14)dahgan=bank2,key=17;  
                 key=17;
                 if (pin_key!=0xf0)scan_key();   
                 
                lcd_clear();
                lcd_gotoxy(0,0);
                     if(l==0)  sprintf(lcd,"%3.1f+%3.1f ",yekan,dahgan);
                else if(l==1)  sprintf(lcd,"%3.1f-%3.1f ",yekan,dahgan);
                else if(l==2)  sprintf(lcd,"%3.1f/%3.1f ",yekan,dahgan);
                else if(l==3)  sprintf(lcd,"%3.1f*%3.1f ",yekan,dahgan);
                else if(l==4)  sprintf(lcd,"Sin [%3.1f] ",dahgan);  
                else if(l==5)  sprintf(lcd,"Cos [%3.1f] ",dahgan); 
                else if(l==6)  sprintf(lcd,"Sinh[%3.1f] ",dahgan); 
                else if(l==7)  sprintf(lcd,"Cosh[%3.1f] ",dahgan);   
                else if(l==8)  sprintf(lcd,"exp[%3.1f] ",dahgan);
                else if(l==9)  sprintf(lcd,"log[%3.1f] ",dahgan);
                else if(l==10) sprintf(lcd,"log10[%3.1f] ",dahgan);
                else if(l==11) sprintf(lcd,"tan[%3.1f] ",dahgan);
                else if(l==12) sprintf(lcd,"tanh[%3.1f] ",dahgan); 
                else if(l==13) sprintf(lcd,"cotg[%3.1f] ",dahgan); 
                else if(l==14) sprintf(lcd,"sqrt[%3.1f] ",dahgan);
                else if(l==15) sprintf(lcd,"acos[%3.1f] ",dahgan);
                else if(l==16) sprintf(lcd,"atan[%3.1f] ",dahgan); 
            
            
                
                        
                 lcd_puts(lcd);
                 lcd_gotoxy(0,1);
                 sprintf(lcd,"INPUT(%3.1f)",bank2);
                 lcd_puts(lcd);
                 
                 delay_ms(90);
                 
                  };
            }

            دیدگاه

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