اطلاعیه

Collapse
No announcement yet.

تغییر شماره تلفن روی lcd کاراکتری توسط سوئیچ &#

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

    #16
    پاسخ : تغییر شماره تلفن روی lcd کاراکتری توسط س

    سلام دوستان
    مشکل حل کردم :wow:
    مشکل از ایجاد زیر برنامه های Calcnum11 و Calcnum12 و Calcnum13 بود، چون اگر وقفه میکردیم در کلیک روی کلیدها همه این زیر برنامه ها به دلیل وجود نداشتن Return زیر برنامه بعدی اجرا میشد و این مشکل به وجود میومد
    خب من کلا این 3 زیر برنامه برداشتم و دستوراتش رو به زیر if مربوطه بردم و حل شد
    اینم از برنامه :
    [code=vb]$regfile = "m8def.dat"
    $crystal = 8000000
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Config Pinb.2 = Input
    Config Pinb.3 = Input

    Dim F As Byte , W As Word , Atl As Long , Btl(10) As Long , Ctl As Long , A_tell As Long , B_tell As Long
    Dim Num(10) As Byte , Enum(10) As Eram Byte
    Dim Ttimer As Byte
    Const T1 = 100

    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
    Config Lcd = 16 * 2
    Cursor Off

    A_tell = 21
    B_tell = 1

    For W = 1 To 10
    Num(w) = Enum(w)
    Next W

    Config Timer2 = Timer , Async = On , Prescale = 32
    Enable Interrupts
    Enable Timer2
    On Timer2 Togglelc

    If Num(1) > 9 Then Num(1) = 9
    If Num(2) > 9 Then Num(2) = 1
    If Num(3) > 9 Then Num(3) = 8
    If Num(4) > 9 Then Num(4) = 4
    If Num(5) > 9 Then Num(5) = 5
    If Num(6) > 9 Then Num(6) = 0
    If Num(7) > 9 Then Num(7) = 1
    If Num(8) > 9 Then Num(8) = 5
    If Num(9) > 9 Then Num(9) = 3
    If Num(10) > 9 Then Num(10) = 8
    Locate 1 , 1
    'Lcd "0" ; Num(1) ; Num(2) ; Num(3) ; Num(4) ; Num(5) ; Num(6) ; Num(7) ; Num(8) ; Num(9) ; Num(10)
    Lcd "09184501538"

    Startm:
    F = 0 : Waitms T1
    Do
    Debounce Pinb.3 , 1 , Nset
    Loop

    Nset:
    For W = 0 To 40000
    Waitus 63
    Next
    If Pinb.3 = 1 Then
    Goto Tellnum1
    Else
    Goto Startm
    End If

    Togglelc:
    Select Case Ttimer
    Case 0
    Gosub Lcdclear
    Case 1 :
    Gosub Lcdwrite
    Case 2 :
    Gosub Lcdclear
    Case 3 :
    Gosub Lcdwrite : Ttimer = 255
    End Select
    Incr Ttimer ': Locate 2 , 20
    Return

    Tellnum1:
    F = A_tell : Waitms T1
    Do
    If Pinb.1 = 1 Then
    Waitms 300
    Locate 2 , 7
    Num(b_tell) = Num(b_tell) + 1 : If Num(b_tell) > 9 Then Num(b_tell) = 0
    While Pinb.1 = 1 : Wend : Goto Tellnum1
    End If

    If Pinb.2 = 1 Then
    Waitms 300
    Num(b_tell) = Num(b_tell) - 1 : If Num(b_tell) = 255 Then Num(b_tell) = 9
    While Pinb.2 = 1 : Wend : Goto Tellnum1
    End If

    If Pinb.0 = 1 Then
    Waitms 300
    While Pinb.0 = 1 : Wend
    B_tell = B_tell + 1
    A_tell = A_tell + 1
    If B_tell > 10 Then
    Enum(b_tell) = Num(b_tell)
    A_tell = 21
    B_tell = 1
    Gosub Lcdwrite
    Goto Startm
    Else
    Goto Tellnum1
    End If
    End If
    Loop

    Lcdclear:
    For Atl = 1 To 10
    Btl(atl) = 20 + Atl
    If F = Btl(atl) Then
    Ctl = Atl + 1
    Locate 1 , Ctl
    Lcd " "
    End If
    Next Atl
    Return

    Lcdwrite:
    If F > 20 And F < 31 Then
    Locate 1 , 1 : Lcd "0"
    Locate 1 , 2 : Lcd Num(1)
    Locate 1 , 3 : Lcd Num(2)
    Locate 1 , 4 : Lcd Num(3)
    Locate 1 , 5 : Lcd Num(4)
    Locate 1 , 6 : Lcd Num(5)
    Locate 1 , 7 : Lcd Num(6)
    Locate 1 , 8 : Lcd Num(7)
    Locate 1 , 9 : Lcd Num(8)
    Locate 1 , 10 : Lcd Num(9)
    Locate 1 , 11 : Lcd Num(10)
    End If
    Return
    End[/code]

    حالا روش کار میکنم باز و بهینه تز میکنم اگر تونستم
    الان فقط تنها یک مورد میمونه، اگر بشه کلیدها رو به 3 تا کاهش بدیم عالی میشه، یعنی کلید Edite و Move یکی کنیم و با یک کلید کار این دو تا انجام بدیم (با دستور Debounce که در سورسهای اول استفاده کردم راحت میشد و انجامک دادم اما با if نمیدونم چطوری این کارو انجام بدم).
    اگر روش دیگه ای هم نوشتید یا داشتید بزارید که شاید از مال من بهتر باشه و استفاده کنیم
    با تشکر از دوستان

    دیدگاه


      #17
      پاسخ : تغییر شماره تلفن روی lcd کاراکتری توسط سوئیچ &#

      الحمدلله درست شد ... :applause:

      پس من فعلا بیخیالش میشم . چون یه پروژه اورژانسی مال یه بنده خدا اومده دستم . فعلا رو اون کار میکنم . تموم که شد برنامه خودمو واسه همین دفترچه تلفن تکمیل میکنم . :nerd:
      بر زنده باد گفتن این مردم خوش گریز

      دل بر مَنه که یک تنه در سنگرت کنند ...

      دیدگاه

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