اطلاعیه

Collapse
No announcement yet.

ماشین حساب

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

    ماشین حساب

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

    #2
    پاسخ : ماشین حساب

    سلام
    من برنامه اون رو با Basic می نویسم به این صورت:
    $regfile "m16def.dat"
    $crystal = 8000000
    Config Kbd = Portd , Debounce = 150 , Delay = 200
    Dim Keypad As Byte
    dim row as word
    do
    Keypad = Getkbd()
    Keypad = Lookup(keypad , Key)
    Select Case Keypad
    Case Is < 10:
    row=row*10
    row=row+keypad
    end select
    loop
    end
    Key:
    Data 1 , 2 , 3 , 12 , 4 , 5 , 6 , 13 , 7 , 8 , 9 , 14 , 10 , 0 , 11 , 15 , 16

    من در این برنامه یک متغیر دارم به نام Row که 16 بیتی است مقدار اولیه آن صفر است شما وقتی عددی از صفحه کلید فشار بدید میره معادل آن کلید رو از جدول Data برمیداره وداخل متغیر keypad که هشت بیتی میریزه بعد میاد داخل Select case و می بینه اگر شما اعداد 0 تا 9 رو فشار دادید مقدار row رو ضربدر 10 میکنه و با مقدار keypad جمع می کنه و داخل متغیر row میریزه. شما با این کار یکان دهگان و... رو دارید.
    البته باید به یک نکته توجه کنید و اون متغیر Row است که از نوع word یعنی 16 بیتی تعریف شده و حداکثر عددی که می تونه داشته باشه 65536 است. پس شما حداکثر تا 5 رقم می تونید داشته باشید. اگه بیشتر خواستید می تونید می تونید متغییر تون رو از نوع long تعریف کنید یا اعداد رو تبدیل به رشته کنید.

    موفق باشی




    دیدگاه


      #3
      پاسخ : ماشین حساب

      سلام

      آقای Ahp_online ممنون از عنایتی که داشتید

      می خواستم بدونم در جدول look up اگه یک عدد مانند 11 را نخواهیم قرار بدیم باید چی جاش بنویسیم تا نظم جدول بهم نخوره

      دیدگاه


        #4
        پاسخ : ماشین حساب

        سلام
        دوست عزیز شما جدول lookup رو هرجوری که دلتون می خواد می تونی تعریف کنی ولی تو قسمت select case شما وقتی case هاتون رو تعریف می کنید می بایست اون کدی که معدل کلید صفحه کلید تون هست رو تعریف کنید.
        مثلا شما بجای عدد 11 می زارید 22 اگه عدد 11 قبلی شما معدل کلید Enter است حالا عدد 22 معدل کلید Enter است.
        پس فرقی نمی کنه که شما جدول lookup رو چجوری تعریف کنید.

        موفق باشید :nice:

        دیدگاه


          #5
          پاسخ : ماشین حساب

          جدول لوک پ یه جور جدول تناسبه.
          همیشه اولین مقدار با اندیس صفر نسبت داده میشه و به همین ترتیب یکی به اونا زیاد میشه.
          مثلا تو این شکل:

          به اندیس صفر عدد بیست و به اندیس هشت عدد صد نسبت داده شده.
          چون دریافت کلید از صفحه کلید کدی بین 0 تا 16 رو برمی گردونه( 16 یعنی کلیدی فشار داده نشده) پس به هر کدوم از این کلید ها میشه عددی نسبت داد:
          اعدادی که به صورت اولیه از صفحه کلید دریافت میشه این طوریه:

          حالا اگه بخوای مثلا یه همچین شکلی داشته باشی:

          باید به عنوان مثال بعد از فشردن عدد یک( تو شکل دومی) ، میکرو عدد صفر رو دریافت میکنه و بعد توسط جدول لوک پ زیر اونو تبدیل به یک میکنی.
          اگه مثلا خواستی + رو تعریف کنی میگی هر وقت کلید 10 زده شد عملیات مربوطه انجام بشه(چون بعد از تبدیل تو جدول لوک پ زیر ، عدد 10 بهش نسبت داده میشه).

          Data 1,2,3,10,4,5,6,11,7,8,9,12,13,0,14,15,16

          دیدگاه


            #6
            پاسخ : ماشین حساب

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


            Dim Keypad As Byte
            Dim A(2) As Word
            Deflcdchar 0 , 32 , 4 , 4 , 4 , 31 , 4 , 4 , 4 ' replace ? with number (0-7)
            A(1) = 0
            A(2) = 0
            Dim Sum As Long


            Main:

            Do


            Keypad = Getkbd()
            Keypad = Lookup(keypad , Key)

            If Keypad < 10 Then
            A(1) = A(1) * 10
            A(1) = Keypad + A(1)
            Cls : Home : Lcd A(1)
            Waitms 100
            Goto Main
            End If

            If Keypad = 11 Then Return

            If Keypad = 12 Then
            Locate 2 , 4 : Lcd Chr(0)
            Waitms 100
            A(2) = A(1)
            A(1) = 0
            Gosub Main
            Sum = A(1) + A(2)
            Cls : Home : Lcd "SUM is " ; Sum
            Waitms 200
            End If


            Loop

            Key:
            Data 1 , 2 , 3 , 12 , 4 , 5 , 6 , 13 , 7 , 8 , 9 , 14 , 10 , 0 , 11 , 15

            دیدگاه


              #7
              پاسخ : ماشین حساب

              من با CodeVision برنامشو نوشتم اگه به دردت می خوره بذارم توی سایت

              [hr]عید نوروز نمایانگر فرهنگ و تمدن اصیل ایرانی بر تمامی ایرانیان گرامی باد
              دوستان! مدتی کمتر به سایت میام ..

              دیدگاه


                #8
                پاسخ : ماشین حساب

                یه چیزی رو فراموش کردی. جدول لوک پت باید 17 تا دیتا داشته باشه. 16 تا برای کلیدا( که نوشتی) و هفدهمی که باید برای فشرده نشدن کلید در نظر بگیری.
                یه عدد 16 تو انتهای لوک پت اضافه کن.

                return رو هم نباید بنویسی. اگه می خوای نتیجه نشون داده بشه باید مجموع رو حساب کنی و اون رو نمایش بدی

                دیدگاه


                  #9
                  پاسخ : ماشین حساب

                  نوشته اصلی توسط حسام الدین
                  من با CodeVision برنامشو نوشتم اگه به دردت می خوره بذارم توی سایت

                  [hr]عید نوروز نمایانگر فرهنگ و تمدن اصیل ایرانی بر تمامی ایرانیان گرامی باد
                  سلام
                  والا کد ویژن بلد نیستم ولی اگه با کمی توضیح قرار بدین شاید چیزی متوجه شدم
                  بازم ممنون

                  دیدگاه


                    #10
                    پاسخ : ماشین حساب

                    نوشته اصلی توسط حامد جعفری
                    یه چیزی رو فراموش کردی. جدول لوک پت باید 17 تا دیتا داشته باشه. 16 تا برای کلیدا( که نوشتی) و هفدهمی که باید برای فشرده نشدن کلید در نظر بگیری.
                    یه عدد 16 تو انتهای لوک پت اضافه کن.

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

                    دیدگاه


                      #11
                      پاسخ : ماشین حساب

                      من برنامه رو یه تغییراتی دادم. اینو امتحان کن:

                      $regfile = "m32def.dat"
                      $crystal = 8000000
                      Config Kbd = Portc , Delay = 250
                      Dim Keypad As Byte
                      Dim A(2) As Word
                      Deflcdchar 0 , 32 , 4 , 4 , 4 , 31 , 4 , 4 , 4 ' replace ? with number (0-7)
                      A(1) = 0
                      A(2) = 0
                      Dim Sum As Long


                      Main:
                      Cls
                      Do
                      Keypad = Getkbd()
                      Keypad = Lookup(keypad , Key)
                      If Keypad < 10 Then
                      A(1) = A(1) * 10
                      A(1) = Keypad + A(1)
                      Lcd A(1)
                      Waitms 100
                      Goto Main
                      End If

                      If Keypad = 11 Then
                      Sum = A(2) + A(1)
                      Locate 2 , 1
                      Lcd "SUM is " ; Sum
                      End If


                      If Keypad = 12 Then
                      Locate 1 , 4 : Lcd Chr(0)
                      Waitms 100
                      A(2) = A(1)
                      A(1) = 0
                      Sum = A(1) + A(2)
                      Waitms 200
                      End If


                      Loop

                      Key:
                      Data 1 , 2 , 3 , 12 , 4 , 5 , 6 , 13 , 7 , 8 , 9 , 14 , 10 , 0 , 11 , 15 , 16

                      دیدگاه


                        #12
                        پاسخ : ماشین حساب

                        سلام آقای مهندس جعفری

                        ضمن تبریک عید نوروز و تشکر به خاطر عنایتی که به بنده داشتید

                        فقط یک مشکل در اجرای برنامه به وجود می یاد

                        و آن با تاخیر عمل کردن کلید هاست

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

                        اگه ممکن است در این مورد هم مرا یاری کنید


                        با تشکر

                        دیدگاه


                          #13
                          پاسخ : ماشین حساب

                          سال نو تو هم مبارک
                          یه کاری کن.
                          Wait ها رو تو برنامه حذف کن.
                          تو پیکربندی صفحه کلید این دوتا عدد رو تغییر بده تا به نتیجه دلخواه برسی.
                          Config kbd=portc , delay=250, debounce=100

                          دیدگاه


                            #14
                            پاسخ : ماشین حساب

                            سلام

                            بازم ممنون از کمکتون

                            پیشنهاد شما رو انجام دادم

                            وضعیت بهتر شد ولی یک مشکل دیگه هنوز رفع نشده

                            و اون اینکه بعضی مواقع عددی را که فشار میدم اشتباه رو lcd نشان می ده

                            و متعاقبا نتیجه اشتباه میشه

                            بازم ممنون

                            دیدگاه


                              #15
                              پاسخ : ماشین حساب

                              خب این دیگه برمیگرده به برنامه.
                              این برنامه ای که نوشتی فقط قابلیت جمع دو عدد یک رقمی رو داره. برای همین اگه در دریافت دومین کلید اشتباه کنی( + رو نزنی) مجبوری میکرو رو ریست کنی.
                              باید برنامتو کامل کنی

                              دیدگاه

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