اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه نویس دکمه های تنظیم دما

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

    مشکل در برنامه نویس دکمه های تنظیم دما

    سلام دوستان
    دارن برنامه ایی مینویسم که بتونم دما را با این کلید ها کم وزیاد کنم ولی برنامه کار نمیکنه یعنی اون قسمتی که قرمز رنگه تا وقتی من عبارت until نیاوردم خوبه ولی به محض اوردن هر عبارتی بعد از لوپ چه درت چه نادرست از حلقه خارج میشه
    کد:
    $regfile = "m32def.dat"
    $crystal = 4000000
    
     Config Porta.0 = Output
      Config Porta.1 = Input
      Config Porta.2 = Input
      Config Porta.3 = Input
      Dim Temp1 As Byte
      Dim Hum1 As Byte
    Dim Etemp1 As Eram Byte
    Dim Ehum1 As Eram Byte
    Dim Temp2 As Byte
    Dim Hum2 As Byte
    Dim Etemp2 As Eram Byte
    Dim Ehum2 As Eram Byte
    Dim A As Byte
    Dim B As Byte
    Dim Ea As Eram Byte
     Dim D As Byte
     D = 0
      Config Int0 = Rising
    Enable Interrupts
    Enable Int0
    On Int0 Menu
    Config Debounce = 30
    
      Config Timer0 = Timer , Prescale = 8
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = Pinc.0 , E = Pinc.4 , Rs = Pinc.5
    Cursor Off
    Deflcdchar 0 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32
    Deflcdchar 1 , 226 , 230 , 238 , 254 , 238 , 230 , 226 , 224
    Dim T1 As String * 16
    Dim Code As Byte
    Dim H1 As String * 16
    Dim T2 As String * 16
    Dim H2 As String * 16
    Dim C As Byte
    C = 1
    A = 1
     Do
     Incr C
     Cls
     Lcd C
     Waitms 200
     Loop
     End
    
    Menu:
    Cls
    Lcd "select parameter"
    Waitms 1000
    Cls
    Locate 1 , 1
    Lcd "temp1?"
    Locate 2 , 1
    Lcd "temp2?"
    Locate 1 , 10
    Lcd "hum1?"
    Locate 2 , 10
    Lcd "hum2?"
    
    Gosub Submenu
    Return
    Submenu:[color=red]
    Do[color=red]
    
    Debounce Pina.3 , 1 , Down
    Debounce Pina.1 , 1 , Khoroj
    Loop Until D = 1
    D = 0[/color][/color]
    
    If A = 1 Then
    Gosub Temp1t
    
    Elseif A = 2 Then
    Gosub Temp2t
    Elseif A = 3 Then
    Gosub Hum1t
    Elseif A = 4 Then
    Gosub Hum2t
    End If
    Return
    
    
    
    
    
    '-----------------------------------------------------------------------------
    Down:
    
    If A = 1 Then
    Incr A
    Locate 2 , 7
    Lcd " "
    Locate 1 , 15
    Lcd " "
    Locate 2 , 15
    Lcd " "
    Locate 1 , 7
    Lcd Chr(1)
    
    Elseif A = 2 Then
    Incr A
    Locate 1 , 7
    Lcd " "
    Locate 1 , 15
    Lcd " "
    Locate 2 , 15
    Lcd " "
    Locate 2 , 7
    Lcd Chr(1)
    
    Elseif A = 3 Then
     Incr A
    
    Locate 1 , 7
    Lcd " "
    Locate 2 , 7
    Lcd " "
    Locate 2 , 15
    Lcd " "
    Locate 1 , 15
    Lcd Chr(1)
    
    Elseif A = 4 Then
    Incr A
    Locate 1 , 7
    Lcd " "
    Locate 1 , 15
    Lcd " "
    Locate 2 , 7
    Lcd " "
    Locate 2 , 15
    Lcd Chr(1)
    Elseif A > 4 Then
    A = 1
    End If
    Goto Submenu
    '-------------------------------------------------------------------------
    Temp1t:
    Temp1 = Etemp1
    Cls
    Lcd "temp1="
    Lcd Temp1
    
    Do
    Debounce Pina.2 , 1 , Afzayesh
    Debounce Pina.3 , 1 , Kahesh
    Loop Until Pina.1 = 1
    
     Return
    
    
     Afzayesh:
    Incr Temp1
    Etemp1 = Temp1
    Cls
    Lcd "temp1="
    Lcd Temp1
    Return
    
    
    
    Kahesh:
    Decr Temp1
    Etemp1 = Temp1
    Cls
    Lcd "temp1="
    Lcd Temp1
    Return
    
    '-----------------------------------------------------------------------
    Temp2t:
    Temp2 = Etemp2
    Cls
    Lcd "temp2="
    Lcd Temp2
    
    Do
    Debounce Pina.2 , 1 , Afzayesh2
    Debounce Pina.3 , 1 , Kahesh2
    Loop Until Pina.1 = 1
    
     Return
    
    Afzayesh2:
    Incr Temp2
    Etemp2 = Temp2
    Cls
    Lcd "temp2="
    Lcd Temp2
    Return
    
    Kahesh2:
    Decr Temp2
    Etemp2 = Temp2
    Cls
    Lcd "temp2="
    Lcd Temp2
    Return
    
          '----------------------------------------------
    
    Hum1t:
    Hum1 = Ehum1
    Cls
    Lcd " hum1="
    Lcd Hum1
    
    
    Do
    Debounce Pina.2 , 1 , Afzayesh3
    Debounce Pina.3 , 1 , Kahesh3
    
    Loop Until Pina.1 = 1
    C = 0
    Waitms 100
     Return
    
    Afzayesh3:
    
    Incr Hum1
    Ehum1 = Hum1
    Cls
    Lcd "hum1="
    Lcd Hum1
    Return
    
    Kahesh3:
    Decr Hum1
    Ehum1 = Hum1
    Cls
    Lcd "hum1="
    Lcd Hum1
    Ehum1 = Hum1
    
    Return
    
             '------------------------------------------------
    
    Hum2t:
    Hum2 = Ehum2
    Cls
    Lcd "hum2="
    Lcd Hum2
    
    Do
    Debounce Pina.2 , 1 , Afzayesh4
    Debounce Pina.3 , 1 , Kahesh4
    
    Loop Until Pina.1 = 1
    Waitms 100
     Return
    
    Afzayesh4:
    Incr Hum2
    Ehum2 = Hum2
    Cls
    Lcd "hum2="
    Lcd Hum2
    Return
    
    
    Kahesh4:
    Decr Hum2
    Ehum2 = Hum2
    Cls
    Lcd "hum2="
    Lcd Hum2
    Return
    Khoroj:
    Incr D
    Return

    #2
    پاسخ : مشکل در برنامه نویس دکمه های تنظیم دما

    شما از زیربرنامه اینتراپت به زیر برنامه submenu پرش کردی و از اونجا به زیربرنامه های دیگه ای پرش کردی این روش اشتباه هست تا حد امکان نباید از یک زیربرنامه
    به زیربرنامه دیگه پرش کرد این باعث به هم ریختن برنامه میشه

    ضمنا من نفهمیدم چرا توی برنامه برای ظاهر شدن منو باید اینتراپت بخوره
    منظورم اینه که اصلا لازم نیست برای نمایش منو از اینتراپت استفاده کرد
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    دیدگاه


      #3
      پاسخ : مشکل در برنامه نویس دکمه های تنظیم دما

      نوشته اصلی توسط S i l i c o n
      شما از زیربرنامه اینتراپت به زیر برنامه submenu پرش کردی و از اونجا به زیربرنامه های دیگه ای پرش کردی این روش اشتباه هست تا حد امکان نباید از یک زیربرنامه
      به زیربرنامه دیگه پرش کرد این باعث به هم ریختن برنامه میشه

      ضمنا من نفهمیدم چرا توی برنامه برای ظاهر شدن منو باید اینتراپت بخوره
      منظورم اینه که اصلا لازم نیست برای نمایش منو از اینتراپت استفاده کرد
      سلام
      ممنون که راهنمایی کردید والبته بسیار نتیجه بخش بود ...برنامه رو بنابر توصیه شما از اینتراپت در آوردم وبا دستور debounce در حلقه اصلی برنامه گذاشتم و زیر برنامه هاروتا حد امکان سادش کردم...دوستان این برنامه دارای منو هست برای تنظیمات مختلف و دارای سه دکمه
      اینم برنامه اصلاح شده که مثل ساعت کارمیکنه
      $regfile = "m32def.dat"
      $crystal = 4000000

      Config Porta.1 = Input
      Config Porta.2 = Input
      Config Porta.3 = Input
      Dim Temp1 As Byte
      Dim Hum1 As Byte
      Dim H As Byte
      H = 0
      Dim Etemp1 As Eram Byte
      Dim Ehum1 As Eram Byte
      Dim Temp2 As Byte
      Dim Hum2 As Byte
      Dim Etemp2 As Eram Byte
      Dim Ehum2 As Eram Byte
      Dim A As Byte
      Dim B As Byte
      Dim Ea As Eram Byte
      Dim D As Byte
      Config Debounce = 30

      Config Timer0 = Timer , Prescale = 8
      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Db4 = Pinc.3 , Db5 = Pinc.2 , Db6 = Pinc.1 , Db7 = Pinc.0 , E = Pinc.4 , Rs = Pinc.5
      Cursor Off
      Deflcdchar 0 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32
      Deflcdchar 1 , 226 , 230 , 238 , 254 , 238 , 230 , 226 , 224
      Dim C As Byte

      A = 0
      D = 0
      Main:
      Do
      Incr C
      Cls
      Lcd C
      Debounce Pina.2 , 1 , Menu
      Loop
      End




      Menu:
      Cls
      Lcd "select parameter"
      Waitms 1000
      Cls
      Locate 1 , 1
      Lcd "temp1?"
      Locate 2 , 1
      Lcd "temp2?"
      Locate 1 , 10
      Lcd "hum1?"
      Locate 2 , 10
      Lcd "hum2?"
      Gosub Down
      Gosub Submenu
      Goto Main






      Submenu:
      If A = 1 Then
      Temp1 = Etemp1
      Cls
      Lcd "temp1="
      Lcd Temp1
      Do
      Debounce Pina.2 , 1 , Afzayesh
      Debounce Pina.3 , 1 , Kahesh
      Debounce Pina.1 , 1 , Khoroj1
      Loop Until D = 1
      D = 0

      Elseif A = 2 Then
      Temp2 = Etemp2
      Cls
      Lcd "temp2="
      Lcd Temp2
      Do
      Debounce Pina.2 , 1 , Afzayesh2
      Debounce Pina.3 , 1 , Kahesh2
      Debounce Pina.1 , 1 , Khoroj2
      Loop Until D = 1
      D = 0
      Elseif A = 3 Then
      Hum1 = Ehum1
      Cls
      Lcd " hum1="
      Lcd Hum1
      Do
      Debounce Pina.2 , 1 , Afzayesh3
      Debounce Pina.3 , 1 , Kahesh3
      Debounce Pina.1 , 1 , Khoroj3
      Loop Until D = 1
      D = 0
      Elseif A = 4 Then
      Hum2 = Ehum2
      Cls
      Lcd "hum2="
      Lcd Hum2
      Do
      Debounce Pina.2 , 1 , Afzayesh4
      Debounce Pina.3 , 1 , Kahesh4
      Debounce Pina.1 , 1 , Khoroj4
      Loop Until D = 1
      D = 0
      End If
      Return





      '-----------------------------------------------------------------------------
      Down:
      Do
      Debounce Pina.3 , 1 , Down1
      Debounce Pina.1 , 1 , Khoroj


      If A = 1 Then
      Locate 2 , 7
      Lcd " "
      Locate 1 , 15
      Lcd " "
      Locate 2 , 15
      Lcd " "
      Locate 1 , 7
      Lcd Chr(1)

      Elseif A = 2 Then

      Locate 1 , 7
      Lcd " "
      Locate 1 , 15
      Lcd " "
      Locate 2 , 15
      Lcd " "
      Locate 2 , 7
      Lcd Chr(1)

      Elseif A = 3 Then

      Locate 1 , 7
      Lcd " "
      Locate 2 , 7
      Lcd " "
      Locate 2 , 15
      Lcd " "
      Locate 1 , 15
      Lcd Chr(1)

      Elseif A = 4 Then
      Locate 1 , 7
      Lcd " "
      Locate 1 , 15
      Lcd " "
      Locate 2 , 7
      Lcd " "
      Locate 2 , 15
      Lcd Chr(1)
      Elseif A > 4 Then
      A = 0
      End If
      Loop Until D = 1
      D = 0
      Return
      '-------------------------------------------------------------------------



      Afzayesh:
      Incr Temp1
      Etemp1 = Temp1

      Goto Submenu


      Kahesh:
      Decr Temp1
      Etemp1 = Temp1
      Goto Submenu

      '-----------------------------------------------------------------------

      Afzayesh2:
      Incr Temp2
      Etemp2 = Temp2
      Goto Submenu

      Kahesh2:
      Decr Temp2
      Etemp2 = Temp2
      Goto Submenu

      '---------------------------------------------

      Afzayesh3:
      Incr Hum1
      Ehum1 = Hum1
      Goto Submenu

      Kahesh3:
      Decr Hum1
      Ehum1 = Hum1
      Goto Submenu

      '------------------------------------------------


      Afzayesh4:
      Incr Hum2
      Ehum2 = Hum2
      Goto Submenu


      Kahesh4:
      Decr Hum2
      Ehum2 = Hum2
      Goto Submenu



      Khoroj1:
      Incr D
      Goto Submenu


      Khoroj2:
      Incr D
      Goto Submenu

      Khoroj3:
      Incr D
      Goto Submenu

      Khoroj4:
      Incr D
      Goto Submenu




      Khoroj:
      Incr D
      Goto Submenu

      Down1:
      Incr A
      Goto Down

      دیدگاه

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