اطلاعیه

Collapse
No announcement yet.

کیپد 4*4 نمایش اعداد چند رقمی

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

    کیپد 4*4 نمایش اعداد چند رقمی

    سلام
    من میخوام با استفاده از کیپد 11 رقم بنویسم (همون شماره ی موبایل)
    که اون رو بریزم تو یک متغیر و روی lcd نشون بدم و به اون شماره sms بفرستم
    خودم یک برنامه نوشتم ولی فکر می کنم اشتباهه اگه میشه بگین اشتباهش کجاست
    لطفا کمکم کنید.
    کد:
    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Pina.0 , Db5 = Pina.1 , Db6 = Pina.2 , Db7 = Pina.3 , Rs = Pinb.5 , E = Pinb.4
    Config Kbd = Portc , Debounce = 50 , Delay = 1
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte
    Dim F As Byte
    Dim G As Byte
    Dim H As Byte
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    Dim L As Long
    Dim U As Byte
    Declare Sub Send
    L = 0
    Cursor Off
    Home
    Lcd "ENTER NUMBER:"
    Do
    Kbd1:
    A = Getkbd()
    A = Lookup(a , Mb)
    If A > 16 Then Goto Kbd1
    Kbd2:
    B = Getkbd()
    B = Lookup(b , Mb)
    If B > 16 Then Goto Kbd2
    Kbd3:
    C = Getkbd()
    C = Lookup(c , Mb)
    If C > 16 Then Goto Kbd3
    Kbd4:
    D = Getkbd()
    D = Lookup(d , Mb)
    If D > 16 Then Goto Kbd4
    Kbd5:
    E = Getkbd()
    E = Lookup(e , Mb)
    If E > 16 Then Goto Kbd5
    Kbd6:
    F = Getkbd()
    F = Lookup(f , Mb)
    If F > 16 Then Goto Kbd6
    Kbd7:
    G = Getkbd()
    G = Lookup(g , Mb)
    If G > 16 Then Goto Kbd7
    Kbd8:
    H = Getkbd()
    H = Lookup(h , Mb)
    If H > 16 Then Goto Kbd8
    Kbd9:
    I = Getkbd()
    I = Lookup(i , Mb)
    If I > 16 Then Goto Kbd9
    Kbd10:
    J = Getkbd()
    J = Lookup(j , Mb)
    If J > 16 Then Goto Kbd10
    Kbd11:
    K = Getkbd()
    K = Lookup(k , Mb)
    If K > 16 Then Goto Kbd11
    A = A * 10000000000
    B = B * 1000000000
    C = C * 100000000
    D = D * 10000000
    E = E * 1000000
    F = F * 100000
    G = G * 10000
    H = H * 1000
    I = I * 100
    J = J * 10
    L = A + B
    L = L + C
    L = L + D
    L = L + E
    L = L + F
    L = L + G
    L = L + H
    L = L + I
    L = L + J
    L = L + K
    Locate 2 , 2
    Lcd L
    Loop
    Mb:
    Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 0 , 14 , 15

    #2
    پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

    کسی نظری نداره

    دیدگاه


      #3
      پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

      واقعا کسی با کیپد کار نکرده

      دیدگاه


        #4
        پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

        سلام.
        به نظر من بهتره که عددت رو توی یه آرایه ذخیره کنی:
        کد:
        	if(key<10){
        		lx[p++]=key+0x30;}
        تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

        دیدگاه


          #5
          پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

          سلام

          علت اینکه برنامه درست کار نمیکنه:
          متغییر ها از نوع Byte تعریف شدن ولی در پایین برنامه این متغییر ها در یک عدد خیلی بزرگ ضرب شده که این باعث سر ریز شدن متغییر و از دست رفتن اطلاعات میشه.
          Dim A As Byte
          ...
          A = A * 10000000000

          الگوریتمی که برای خواندن یه عدد 11 رقمی اجرا کردی شاید جواب بده ولی روش مناسبی نیست:
          1. از یه سری کد ثابت به تعداد دفعات زیاد تو برنامه کپی شده
          2. حجم فلش استفاده شده میره بالا
          3. رفع اشکال و تغییر در برنامه خیلی زمان بر میشه

          یه نمونه کد برات میزام شاید بتونه کمکت کنه:
          کد:
          Dim Key As Byte
          Dim Z As String * 16 : Z = ""
          Dim Phone_number As String * 11
          
          Do
            Key = Getkbd() : Key = Lookup(key , Converter_keypad)
            If Key < 16 Then
             Select Case Key
               Case 0 To 9:
                Z = Z + Str(key)
                Locate 2 , 1 : Lcd "        "
                Locate 2 , 1 : Lcd Z
               Case 10:
                Phone_number = Z : Z = ""
             End Select
            End If
          Loop
          امیدوارم با کمی تغییر تو این کدا بشه ازش تو برنامه خودت استفاده کنی

          دیدگاه


            #6
            پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

            نوشته اصلی توسط علیرضا جودی
            سلام

            علت اینکه برنامه درست کار نمیکنه:
            متغییر ها از نوع Byte تعریف شدن ولی در پایین برنامه این متغییر ها در یک عدد خیلی بزرگ ضرب شده که این باعث سر ریز شدن متغییر و از دست رفتن اطلاعات میشه.
            Dim A As Byte
            ...
            A = A * 10000000000

            الگوریتمی که برای خواندن یه عدد 11 رقمی اجرا کردی شاید جواب بده ولی روش مناسبی نیست:
            1. از یه سری کد ثابت به تعداد دفعات زیاد تو برنامه کپی شده
            2. حجم فلش استفاده شده میره بالا
            3. رفع اشکال و تغییر در برنامه خیلی زمان بر میشه

            یه نمونه کد برات میزام شاید بتونه کمکت کنه:
            کد:
            Dim Key As Byte
            Dim Z As String * 16 : Z = ""
            Dim Phone_number As String * 11
            
            Do
              Key = Getkbd() : Key = Lookup(key , Converter_keypad)
              If Key < 16 Then
               Select Case Key
                 Case 0 To 9:
                  Z = Z + Str(key)
                  Locate 2 , 1 : Lcd "        "
                  Locate 2 , 1 : Lcd Z
                 Case 10:
                  Phone_number = Z : Z = ""
               End Select
              End If
            Loop
            امیدوارم با کمی تغییر تو این کدا بشه ازش تو برنامه خودت استفاده کنی
            خیلی ممنون از این که جواب دادبد
            میشه این برنامه رو توصیح بدید من یکم تو keypad تازه کارم
            بازم ممنونم

            دیدگاه


              #7
              پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

              با سلام و تشکر فراوان از اساتید
              من این برنامه رو نوشتم ولی بازم نتیجه نگرفتم .تو پروتیوس برنامه رو run کردم ولی درست کار نمیکنه و هر سطر کیپد فقط یک عدد رو نشون میده مثلا اگه سطر اول کیپد دکمه بالا سمت چپ رو بزنم عدد 1 دکمه ی بعدی عدد 1 و.... تا آخر سطر دوباره سطر دوم عدد 5 تا آخر سطرو.............
              نمی دونم مشکل از برنامه هست یا پروتیوس به هر حال من برنامه رو قرار می دم
              با تشکر
              کد:
              $regfile = "m32def.dat"
              $crystal = 8000000
              Config Lcd = 20 * 4
              Config Lcdpin = Pin , Db4 = Pina.0 , Db5 = Pina.1 , Db6 = Pina.2 , Db7 = Pina.3 , Rs = Pinb.5 , E = Pinb.4
              Config Kbd = Portc , Debounce = 50 , Delay = 1
              Declare Sub Send
              Dim Key As Byte
              Dim Z As String * 16 : Z = ""
              Dim Phone_number As String * 11
              Cursor Off
              Lcd "Enter Number:"
              Do
              Key = Getkbd() : Key = Lookup(key , Converter_keypad)
              If Key < 16 Then
              Select Case Key
              Case 0 To 9:
              Z = Z + Str(key)
              Locate 2 , 1 : Lcd "        "
              Locate 2 , 1 : Lcd Z
              Case 10:
              Phone_number = Z : Z = ""
              End Select
              If Pinb.0 = 1 Then
              Call Send
              End If
              End If
              Loop
              Send:
              Print "AT"
              Waitms 500
              Print "AT+CMGF=1"
              Waitms 500
              Print "AT+CMGS=" ; Chr(34) ; Phone_number ; Chr(34)
              Waitms 500
              Print "WWW.ECA.IR" ; Chr(26)
              Waitms 600
              Converter_keypad:
              Data 1 , 2,3,4,5,6,7,8,9,10,11,12,13,14,15

              دیدگاه


                #8
                پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

                مشکل از شبیه سازی پروتیوس هستش
                قبلا واسه حلش یه متن تو این صفحه نوشتم
                http://projects.m32.ir/1122/
                ان شاء الله که با توضیحاتی که تو این صفحه داده شده مشکل شبیه سازی کیپد حل میشه

                دیدگاه


                  #9
                  پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

                  کیپد من تو شبیه سازی درست کار می کنه! اما عملی که بستم بدون وصل کردن کیپد به میکرو دائما عدد 11 را بر می گردونه! کسی می دونه قضیه چیه؟ اتصال ها رو هم چک کردم...

                  دیدگاه


                    #10
                    پاسخ : کیپد 4*4 نمایش اعداد چند رقمی

                    سلام
                    من به کتابخانه کیپد 4 در 4 در التیوم نیاز دارم کسی این کتابخانه رو داره ؟؟

                    دیدگاه

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