اطلاعیه

Collapse
No announcement yet.

کمک درباره ی برنامه نویسی

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

    کمک درباره ی برنامه نویسی

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


    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    کد:
    $regfile = "m32def.dat"
    $crystal = 1000000
    
    Config Lcdpin = Pin , Rs = Pina.0 , E = Pina.2 , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    
    Dim I As Byte
    Dim Z As Single
    
    Dim Data_byte As Byte
    Dim Data_msb As Byte
    Dim Data_lsb As Byte
    Dim Data_word As Word
    Dim Crc As Byte
    
    Dim Temp As Single
    Dim Rh_liner As Single
    Dim Command As Byte
    
    Sck Alias Portc.1
    Dataout Alias Portc.0
    Datain Alias Pinc.0
    
    Config Portc.1 = Output
    Config Portc.0 = Output
    
    Gosub Display_lcd_start_text
    Gosub Signal_reset : Waitms 10
    
    Do
      Command = &B00000101 : Gosub Get_sht10
      Gosub Calcula_rh_liner_12bit
    
      Command = &B00000011 : Gosub Get_sht10
      Gosub Calcula_temp_14bit
    
      Gosub Display_lcd
    
      Wait 1
    Loop
    
    End
    
    '**********************************************
    Display_lcd_start_text:
      Cls :
      Locate 1 , 1 : Lcd "  www.M32.ir"
      Locate 2 , 1 : Lcd "AVR  PIC  8051"
      Wait 2 : Cls : Waitms 200
    Return
    
    '*******************************************
    Status_register_write:
      Gosub Signal_start
      Command = &B00000110 : Shiftout Dataout , Sck , Command , 1
      Gosub Signal_ack
      Command = &B00000000 : Shiftout Dataout , Sck , Command , 1
      Gosub Signal_ack
    Return
    
    '*******************************************
    Status_register_read:
      Gosub Signal_start
      Command = &B00000111
      Shiftout Dataout , Sck , Command , 1
      Gosub Signal_ack
      Gosub Read_byte : Data_msb = Data_byte
      Gosub Signal_ack
      Gosub Read_byte : Crc = Data_byte
      Print "Status Register=" ; Data_msb
      Print "Checksum=" ; Crc
      Print
    Return
    
    '*******************************************
    Setting_default:
      Gosub Signal_start
      Command = &B00011110 : Shiftout Dataout , Sck , Command , 1
      Gosub Signal_ack
      Waitms 100
    Return
    
    '*******************************************
    Get_sht10:
      Gosub Signal_start
      Gosub Send_command
      Gosub Signal_ack
      Gosub Wait_for_data_ready
      Gosub Read_byte : Data_msb = Data_byte
      Gosub Signal_ack
      Gosub Read_byte : Data_lsb = Data_byte
      Gosub Signal_ack
      Gosub Read_byte : Crc = Data_byte
      Gosub Signal_end
      Data_msb = Data_msb And &B00111111
      Data_word = Makeint(data_lsb , Data_msb)
    Return
    
    '*******************************************
    Signal_reset:
      Config Portc.1 = Output                 ': Portc.1 = 1
      Config Portc.0 = Output                 ': Portc.0 = 1
      Reset Sck : Set Dataout : Waitus 1
      For I = 1 To 9
       Set Sck : : Waitus 1 :
       Reset Dataout : Waitus 1
      Next I
    Return
    
    '*******************************************
    Signal_start:
      Config Portc.1 = Output                 ': Portc.1 = 1
      Config Portc.0 = Output                 ': Portc.0 = 1
      Reset Sck : Set Dataout : Waitus 1
      Set Sck : : Waitus 1 :
      Reset Dataout : Waitus 1
      Reset Sck : Waitus 1
      Set Sck : Waitus 1
      Set Dataout : : Waitus 1
      Reset Sck : Waitus 1
      Crc = 0
    Return
    
    '*******************************************
    Send_command:
      Config Portc.1 = Output : Portc.1 = 0
      Config Portc.0 = Output : Portc.0 = 0
      Shiftout Dataout , Sck , Command , 1
    Return
    
    '*******************************************
    Wait_for_data_ready:
      Config Portc.1 = Output                 ': Portc.1 = 0
      Config Portc.0 = Input                  ': Portc.0 = 0
      Set Dataout
      For I = 1 To 255
       If Dataout = 0 Then Exit For
       Waitms 1
      Next
    Return
    
    '*******************************************
    Read_byte:
      Config Portc.1 = Output : Portc.1 = 0
      Config Portc.0 = Input : Portc.0 = 1
      Shiftin Datain , Sck , Data_byte , 1
    Return
    
    '*******************************************
    Signal_ack:
      Config Portc.1 = Output                 ': Portc.1 = 0
      Config Portc.0 = Output                 ': Portc.0 = 0
      Reset Dataout : Reset Sck
      Set Sck : Waitus 1
      Reset Sck
    Return
    
    '*******************************************
    Signal_end:
      Config Portc.1 = Output                 ': Portc.1 = 1
      Config Portc.0 = Output                 ': Portc.0 = 1
      Set Dataout : Waitus 1
      Set Sck : Waitus 1
      Reset Sck : Waitus 1
    Return
    
    '*******************************************
    Calcula_rh_liner_12bit:
      Rh_liner = Data_word * Data_word
      Rh_liner = Rh_liner * -0.0000015955
      Z = 0.0367 * Data_word
      Rh_liner = Rh_liner + Z
      Rh_liner = Rh_liner - 2.0468
    Return
    
    '*******************************************
    Calcula_temp_14bit:
      Temp = 0.01 * Data_word
      Temp = Temp - 40.1
    Return
    
    '*******************************************
    Display_lcd:
      Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
      Locate 1 , 1 : Lcd "RH: " ; Fusing(rh_liner , "#.#") ; "% "
      Locate 2 , 1 : Lcd "Temp: " ; Fusing(temp , "#.#") ; Chr(0) ; "C "
    Return
    سجاد
لطفا صبر کنید...
X