اطلاعیه

Collapse
No announcement yet.

چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

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

    چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

    درود برهمگی سومین تاپیکی هست که میزنم و جواب نمیده کسی :angry: :angry: خواهشا یکی بیاد این بحث تایمر در رفرش سون سگمنت رو بهم توضیح بده میخوام ساعت ثانیه دقیقه سال و ماه و روز رون نمایش بدم رو 12تا سون سگمنت کوچیک
    نمیدونم چه روشی استفاده کنم که خوب باشه روش شیفت رجیستر رو برنامه اش هست اما واسه کاتد من میخوام واسه اند استفاده کنم هرکی میتونه بیاد کمک کنه :angry:
    در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

    #2
    پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

    سلام. خیلی مبحث کلی رو مطرح کردی! اگر صرفا تغییر آند به کاتد هستش هرچی صفر داری به جاش یک بذار (توی باینری) درست میشه! برای مبحث تایمر هم به نظر من میشه یکی از تایمر ها رو برای زمان و یکی رو هم برای تاریخ استفاده کنی. استفاده از شیفت رجیستر دردسرش زیاده بهتره از ای سی شماره 7447 برای آندمشترک و 7448 برای کاتد مشترک استفاده کنی. اگر کلا راه اندازی تایمر رو هم بلد نیستی بگو تا یه نمونه برنامه (Basic) برات بذارم.

    موفق باشی
    STM32 واقعا یه چیز دیگه است...

    دیدگاه


      #3
      پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

      در مدار شکل زیر یک سون سگمنت کاتد مشترک 6 رقمی (که البته من به دلیل کمبود وقت دو رقمشو بیشتر استفاده نکردم :mrgreen: :mrgreen به یک ATMEGA32 متصل شده که نمایش اعداد توسط ای سی واسط 7448 انجام می شه. نحوه نمایش هم در برنامه مشخصه + کد راه اندازی تایمر 1 میکرو کنترلر



      کد بسکام

      کد:
      'In the name of ALLAH
      $regfile = "m32def.dat"
      $crystal = 8000000
      Config Portc = Output
      Config Portd = Output
      Dim H As Integer
      Dim M As Integer
      Dim S As Integer
      Dim I As Single
      Dim D As Single
      
      
      H = 0 : M = 0 : S = 0
      Config Timer1 = Timer , Prescale = 64
      Enable Interrupts
      Enable Timer1
      On Timer0 C
      Start Timer1
      
      Do
      If S <= 9 Then
      Portd = &B11111101
      Portc = S
      End If
      
      If S >= 10 Then
      I = S / 10
      I = Int(i)
      
      Portd = &B11111110
      Portc = I
      Waitms 10
      I = I * 10
      D = S - I
      Portd = &B11111101
      Portc = D
      Waitms 10
      End If
      
      
      Loop
      
      End
      C:
      If S < 60 Then Incr S
      Return
      STM32 واقعا یه چیز دیگه است...

      دیدگاه


        #4
        پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

        در این لینک هم می تونی آموزش کاملی از راه اندازی سون سگمت ببینی

        http://www.roboeq.ir/articles/detail/62/


        البته برای کار شما من پیشنهاد می کنم یک LCD 16*2 استفاده کن خودتو راحت کن چون سون سگمنت بعد از دردسر راه اندازی اگر بخوای PCB تولید کنی یه کم ممکنه اذیت بشی. کلا LCD بهتر و شیک تره! :biggrin:

        موفق و سربلند باشی
        STM32 واقعا یه چیز دیگه است...

        دیدگاه


          #5
          پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

          داداش ممنون بابت پاسخت.........من دارم با ds1307 کار میکنم و اطلاعات رو از اون میگیرم میخوام بدونم تایمرو چطوری استفاده کنم برای رفرش کردن سون سگمنت هام الان این یه نمونه هستش که از شیفت ریجستر استفاده کرده :
          کد:
          $regfile = "m8def.dat"
          $crystal = 4000000
          $lib "ds1307clock.lib"
          $lib "mcsbyteint.lbx"
          Config Timer0 = Timer , Prescale = 64
          Enable Timer0
          On Timer0 Tim0
          Start Timer0
          Enable Interrupts
          Config Portc.0 = Output
          Config Portc.1 = Output
          Config Portc.2 = Output
          Config Portb.0 = Output
          Config Portb.1 = Output
          Config Portb.2 = Output
          Config Portb.3 = Output
          Config Watchdog = 16
          Config Adc = Single , Prescaler = Auto
          Start Adc
          Data_74164 Alias Portb.5
          Clck_74164 Alias Portb.4
          's1307 config
          Config Scl = Portb.6
          Config Sda = Portb.7
          'addres hardware for ds1307
          Const Ds1307w = &HD0                    'for send
          Const Ds1307r = &HD1                    'for recive
          Dim W As Word , C As Byte , D As Byte , Seg As Byte
          Dim Segment1 As Byte , Segment2 As Byte , Segment3 As Byte , Segment4 As Byte , Segment5 As Byte
          Dim Segment6 As Byte , Segment7 As Byte , Segment8 As Byte , Segment9 As Byte , Segment10 As Byte
          Dim Segment11 As Byte , Segment12 As Byte , Segment13 As Byte , Segment14 As Byte , Segment15 As Byte , Segment16 As Byte
          Dim _sec As Byte , _min As Byte , _hour As Byte , _day As Byte , _month As Byte , _year As Byte
          Dim Weekday As Byte
          Config I2cdelay = 250
          
          Do
          Gosub Ds1307
          Segment1 = _sec
          Segment1 = _sec Mod 10
          Segment2 = _sec / 10
          Segment2 = Segment2 Mod 6
          Segment2 = Lookup(segment2 , Digi)
          Segment1 = Lookup(segment1 , Digi)
          '=========================================================seconde
          Segment3 = _min
          Segment3 = _min Mod 10
          Segment3 = Lookup(segment3 , Digi)
          Segment3 = Segment3 + 128
          Segment4 = _min / 10
          Segment4 = Segment4 Mod 6
          Segment4 = Lookup(segment4 , Digi)
          '==========================================================mine
          Segment5 = _hour
          Segment5 = _hour Mod 10
          Segment5 = Lookup(segment5 , Digi)
          Segment5 = Segment5 + 128
          Segment6 = _hour / 10
          Segment6 = Segment6 Mod 3
          Segment6 = Lookup(segment6 , Digi)
          '===========================================================
          Segment7 = _day Mod 10
          Segment7 = Lookup(segment7 , Digi)
          Segment8 = _day / 10
          Segment8 = Lookup(segment8 , Digi)
          
          Segment9 = _month Mod 10
          Segment9 = Lookup(segment9 , Digi)
          Segment9 = Segment9 + 128
          Segment10 = _month / 10
          Segment10 = Lookup(segment10 , Digi)
          
          Segment11 = _year Mod 10
          Segment11 = Lookup(segment11 , Digi)
          Segment11 = Segment11 + 128
          Segment12 = _year / 10
          Segment12 = Lookup(segment12 , Digi)
          '===============================
          W = Getadc(3)
          W = W / 2
          Segment13 = 99
          Segment15 = W / 10
          C = Segment15 * 10
          Segment14 = W - C
          D = Segment15 Mod 10
          Segment15 = Lookup(d , Digi)
          Segment14 = Lookup(segment14 , Digi)
          Segment16 = W / 100
          Segment16 = Lookup(segment16 , Digi)
          '===========================================
          Portc = Weekday
          If Weekday > 7 Then Weekday = 0
          If Pind.0 = 0 Then Gosub Dagige
          If Pind.1 = 0 Then Gosub Saeat
          If Pind.2 = 0 Then Gosub Dayy
          If Pind.3 = 0 Then Gosub Monthh
          If Pind.4 = 0 Then Gosub Yearr
          If Pind.5 = 0 Then Gosub Rooz
          Loop
          
          
          Ds1307:
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 0                        ' start address in 1307
          I2cstart                          ' Generate start code
           I2cwbyte Ds1307r                     ' send address
           I2crbyte _sec , Ack
           I2crbyte _min , Ack                    ' MINUTES
           I2crbyte _hour , Ack                   ' Hours
           I2crbyte Weekday , Ack                  ' Day of Week
           I2crbyte _day , Ack                    ' Day of Month
           I2crbyte _month , Ack                   ' Month of Year
           I2crbyte _year , Nack                   ' Year
           I2cstop
           _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
           _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
          Return
          
          '===================================================================================
          Dagige:
          Incr _min
          If _min > 59 Then _min = 0
          _min = Makebcd(_min)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 1
          I2cwbyte _min
          I2cstop
          Return
          
          Saeat:
          Incr _hour
          If _hour > 23 Then _hour = 0
          _hour = Makebcd(_hour)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 2
          I2cwbyte _hour
          I2cstop
          Return
          Return
          
          
          Dayy:
          Incr _day
          If _day > 31 Then _day = 0
          _day = Makebcd(_day)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 4
          I2cwbyte _day
          I2cstop
          Return
          
          
          
          Monthh:
          Incr _month
          If _month > 12 Then _month = 0
          _month = Makebcd(_month)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 5
          I2cwbyte _month
          I2cstop
          Return
          
          
          Yearr:
          Incr _year
          If _year > 99 Then _year = 0
          _year = Makebcd(_year)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 6
          I2cwbyte _year
          I2cstop
          Return
          
          Rooz:
          Incr Weekday
          If Weekday > 7 Then Weekday = 0
          Weekday = Makebcd(weekday)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 3
          I2cwbyte Weekday
          I2cstop
          Return
          
          
          
          
          
          
          
          Tim0:
          Timer0 = 210
          Portb = Seg
          Select Case Seg
          Case 0
          Shiftout Data_74164 , Clck_74164 , Segment1 , 1
          Case 1
          Shiftout Data_74164 , Clck_74164 , Segment2 , 1
          Case 2
          Shiftout Data_74164 , Clck_74164 , Segment3 , 1
          Case 3
          Shiftout Data_74164 , Clck_74164 , Segment4 , 1
          Case 4
          Shiftout Data_74164 , Clck_74164 , Segment5 , 1
          Case 5
          Shiftout Data_74164 , Clck_74164 , Segment6 , 1
          Case 6
          Shiftout Data_74164 , Clck_74164 , Segment7 , 1
          Case 7
          Shiftout Data_74164 , Clck_74164 , Segment8 , 1
          Case 8
          Shiftout Data_74164 , Clck_74164 , Segment9 , 1
          Case 9
          Shiftout Data_74164 , Clck_74164 , Segment10 , 1
          Case 10
          Shiftout Data_74164 , Clck_74164 , Segment11 , 1
          Case 11
          Shiftout Data_74164 , Clck_74164 , Segment12 , 1
          Case 12
          Shiftout Data_74164 , Clck_74164 , Segment13 , 1
          Case 13
          Shiftout Data_74164 , Clck_74164 , Segment14 , 1
          Case 14
          Shiftout Data_74164 , Clck_74164 , Segment15 , 1
          Case 15
          Shiftout Data_74164 , Clck_74164 , Segment16 , 1
          End Select
          Incr Seg
          If Seg >= 16 Then Seg = 0
          Return
          
          
          Digi:
          Data &B1111110
          Data &B0110000
          Data &B1101101
          Data &B1111001
          Data &B0110011
          Data &B1011011
          Data &B1011111
          Data &B1110010
          Data &B1111111
          Data &B1111011
          در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

          دیدگاه


            #6
            پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

            میخوام بدونم جز این روش بالا که شیفت ریجستر گذاشته و کاتد هم کار کرده بخوام آند کنم فقط باید label digi رو تغییر بدم؟چون تغییر دادم نشد
            اگه نخوام شیفت ریجستر بذارم چطوری رفرش کنم ؟من مثل برنامه زیر کار کردم چشمک میزنه این تیکه برنامه رو ببین:


            کد:
            Set Portd.3
            Reset Portd.4
            Reset Portd.5
            Reset Portd.6
            
            A = _sec
            C = A / 10
            
            Porta = Lookup(c , Hadi)
            
            
            Waitms 5
            
            Reset Portd.3
            Set Portd.4
            Reset Portd.5
            Reset Portd.6
            
            C = A Mod 10
            
            
            Porta = Lookup(c , Hadi)
            
            Waitms 5
            
            
            Reset Portd.3
            Reset Portd.4
            Set Portd.5
            Reset Portd.6
            
            
            
            D = Sh_year
            C = D Mod 10
            
            
            Porta = Lookup(c , Hadi)
            
            Waitms 5
            
            
            Reset Portd.3
            Reset Portd.4
            Reset Portd.5
            Set Portd.6
            
            
            E = D Mod 100
            C = E / 10
            
            
            Porta = Lookup(c , Hadi)
            
            
            Waitms 5
            
            
            Hadi:
            Data &B0000 , &B0001 , &B0010 , &B0011 , &B0100 , &B0101 , &B0110 , &B0111 , &B1000 , &B1001

            البته این قسمتی از برنامه است و فقط واسه تست....... ثانیه و سال رو به صورت bcd دادم به 7447 از اونورم با پایه های دیگه میکرو پایه مشترک سون سگمنت هامو فعال میکنم تایمر هم نداره ایرادش چیه که چشمک میزنه؟باید تایمرو چطوری استفاده کنم؟
            در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

            دیدگاه


              #7
              پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

              راستی برنامه بالارو کاملشو دارم فقط از قسمت label digi برای ایده استفاده کردم(اینکه bcd ارسال کنم البته اگه با ارسال abcdefg هم بتونم کار کنم مشکلی نیست فقط میخوام مشکل حل شه) نمیدونم تایمری که گذاشته و label ای که تایمر بعد از سرریز شدن میره انجام میده چه کاری انجام میده :

              کد:
              ''''''''''''''''''''''''''''in the name of GOD''''''''''''''''''''''''''''''''''
              '     Salam in yek barname saat ast ke ba 7segment kar mi konad      '
              ' Az emkanat in saat :nemayesh saat roye 7 segmen,nemayesh tarikh shamsi roye '
              '          7segment va hamchenin nemayesh dema ast          '
              '      Hadi KHosravi _ Kerman _ Bardsir 1391/06/31 "15:02:00"       '
              '''''''''''''''''''''''''''''hadikh73@yahoo.com'''''''''''''''''''''''''''''''''
              $regfile = "m32def.dat"
              $crystal = 500000
              $framesize = 128
              $hwstack = 128
              $swstack = 128
              $projecttime = 32
              $lib "ds1307clock.lib"
              Config Timer2 = Timer , Async = On , Prescale = 128
              Config Adc = Single , Prescaler = Auto , Reference = Off
              Config Porta.0 = Input
              Config Porta.1 = Output
              Config Porta.2 = Input
              Config Porta.3 = Input
              Config Porta.4 = Output
              Config Porta.5 = Output
              Config Porta.6 = Output
              Config Porta.7 = Output
              Config Portb = Output
              Config Portc = Output
              Config Portd = Output
              Config Portd.7 = Input
              Enable Interrupts
              Enable Ovf2
              Enable Adc
              Start Timer2
              On Timer2 Saneye
              '*******************************************************************************
              Config Sda = Portd.5 : Config Scl = Portd.4
              '*******************************************************************************
              Declare Sub Yekan
              Declare Sub Dahgan
              Declare Sub Indr
              Declare Sub Dedr
              Declare Sub Meno1
              Declare Sub Aadad
              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 S As Byte
              Dim S0 As Byte
              Dim H As Byte
              Dim H0 As Byte
              Dim W As Byte
              Dim I As Byte
              Dim J As Byte
              Dim Endm As Byte
              Dim Da As Byte
              Dim Da0 As Byte
              Dim Dy As Byte
              Dim Dy0 As Byte
              Dim Mo As Byte
              Dim Mo0 As Byte
              Dim Sa As Byte
              Dim De As Byte
              Dim Sa10 As Byte
              Dim Sa1 As Byte
              Dim Dem As Word
              Dim Dem0 As Single
              Dim Fasl As Bit
              Dim Meno As Byte
              Dp1 Alias Porta.4
              Demy Alias Porta.5
              Demd Alias Porta.6
              Dey Alias Portb.0
              Ded Alias Portb.1
              May Alias Portb.2
              Mad Alias Portb.3
              A1 Alias Portb.4
              A2 Alias Portb.5
              A3 Alias Portb.6
              A4 Alias Portb.7
              Dp Alias Porta.7
              Sy Alias Portc.0
              Sd Alias Portc.1
              My Alias Portc.2
              Md Alias Portc.3
              Hy Alias Portc.4
              Hd Alias Portc.5
              '*******************************************************************************
              aval:
              '*******************************************************************************
              I2cstart : I2cwbyte &HD0 : I2cwbyte 0 : I2cstart : I2cwbyte &HD1 : I2crbyte S0 , Ack
              I2crbyte Da0 , Ack : I2crbyte H0 , Ack : I2crbyte W , Ack : I2crbyte Dy0 , Ack
              I2crbyte Mo0 , Ack : I2crbyte Sa10 , Nack : I2cstop
              '*******************************************************************************
              S0 = Makedec(s0) : Da0 = Makedec(da0) : H0 = Makedec(h0)
              Dy0 = Makedec(dy0) : Mo0 = Makedec(mo0) : Sa10 = Makedec(sa10)
              '*******************************************************************************
              Dy = Dy0 : Mo = Mo0 : Sa1 = Sa10
              If Mo = 2 Then Dy = Dy + 31
              If Mo = 3 Then Dy = Dy + 59
              If Mo = 4 Then Dy = Dy + 90
              If Mo = 5 Then Dy = Dy + 120
              If Mo = 6 Then Dy = Dy + 151
              If Mo = 7 Then Dy = Dy + 181
              If Mo = 8 Then Dy = Dy + 212
              If Mo = 9 Then Dy = Dy + 243
              If Mo = 10 Then Dy = Dy + 273
              If Mo = 11 Then Dy = Dy + 304
              If Mo = 12 Then Dy = Dy + 334
              If Dy > 78 Then
              Sa1 = Sa1 + 79
              Dy = Dy - 78
              If Dy > 186 Then
              Dy = Dy - 186
              Mo = 7
              Else
              Mo = 1
              End If
              If Mo > 6 Then Endm = 30 Else Endm = 31
              Else
              Sa1 = Sa1 + 78
              Mo = 10
              If Dy =< 78 Then Dy = Dy + 11
              Endm = 30
              End If
              For J = 1 To 6
              If Dy > 30 Then Dy = Dy - Endm Else Exit For
              Mo = Mo + 1
              Next
              '*******************************************************************************
              S = S0 : Da = Da0 : H = H0 : Sa = 13 : Meno = 0
              '*******************************************************************************
              Do
              Debounce Pina.0 , 1 , Indr , Sub
              Debounce Pind.7 , 1 , Dedr , Sub
              Debounce Pina.2 , 1 , Meno1 , Sub
              '______________________________________
              S0 = S : Da0 = Da : H0 = H
              A = S
              Call Yekan : Call Dahgan
              Sy = 1
              Portd = D
              If Meno = 1 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              Sy = 0
              Sd = 1
              Portd = F
              Waitms 4
              Sd = 0
              '______________________________________
              A = Da
              Call Yekan : Call Dahgan
              My = 1
              Portd = D
              If Meno = 2 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              My = 0
              Md = 1
              Portd = F
              Waitms 4
              Md = 0
              '______________________________________
              A = H
              Call Yekan : Call Dahgan
              Hy = 1
              Portd = D
              If Meno = 3 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              Hy = 0
              Hd = 1
              Portd = F
              Waitms 4
              Hd = 0
              '______________________________________
              A = Dy
              Call Yekan : Call Dahgan
              Dey = 1
              Portd = D
              If Meno = 4 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              Dey = 0
              Ded = 1
              Portd = F
              Waitms 4
              Ded = 0
              '______________________________________
              A = Mo
              Call Yekan : Call Dahgan
              May = 1
              Portd = D
              If Meno = 5 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              May = 0
              Mad = 1
              Portd = F
              Waitms 4
              Mad = 0
              '______________________________________
              A = Sa
              Call Yekan : Call Dahgan
              A3 = 1
              Portd = D
              Dp = 1
              If Meno = 6 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              A3 = 0
              A4 = 1
              Portd = F
              Waitms 4
              A4 = 0
              '______________________________________
              A = Sa1
              Call Yekan : Call Dahgan
              A1 = 1
              Portd = D
              If Meno = 6 Then
              Dp = 0
              Else
              Dp = 1
              End If
              Waitms 4
              A1 = 0
              A2 = 1
              Portd = F
              Waitms 4
              A2 = 0
              '______________________________________
              A = Dem
              Call Yekan : Call Dahgan
              Demy = 1
              Portd = D
              Waitms 4
              Demy = 0
              Demd = 1
              Portd = F
              Waitms 4
              Demd = 0
              '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
              I = Timer2
              If I < 128 Then Dp1 = 1 Else Dp1 = 0
              If Meno > 0 Then
              If S > 59 Then S = 0
              If Da = 255 Then Da = 59
              If Da > 59 Then Da = 0
              If H = 255 Then H = 23
              If H > 23 Then H = 0
              If Dy = 0 Then Dy = 30
              If Dy > 31 And Mo < 7 Then Dy = 1
              If Dy > 30 And Mo => 7 Then Dy = 1
              If Mo = 0 Then Mo = 12
              If Mo > 12 Then Mo = 1
              If Sa1 = 255 Then : Decr Sa : Sa1 = 99 : End If
              If Sa1 > 99 Then : Sa1 = 0 : Incr Sa : End If
              If Dy0 = 0 Then Dy0 = 30
              If Dy0 > 31 And Mo0 < 7 Then Dy0 = 1
              If Dy0 > 30 And Mo0 => 7 Then Dy0 = 1
              If Mo0 = 0 Then Mo0 = 12
              If Mo0 > 12 Then Mo0 = 1
              If Sa10 = 255 Then Sa10 = 99
              If Sa10 > 99 Then Sa10 = 0
              Else
              If S > 59 Then : S = 0 : Incr Da : End If
              If Da = 255 Then Da = 0
              If Da > 59 Then : Da = 0 : Incr H : End If
              If H = 255 Then H = 0
              If H > 23 Then : H = 0 : Incr Dy : Incr Dy0 : End If
              If Dy = 0 Then Dy = 1
              If Dy0 = 0 Then Dy0 = 1
              If Dy > 31 And Mo < 7 Then : Dy = 1 : Incr Mo : End If
              If Dy > 30 And Mo => 7 Then : Dy = 1 : Incr Mo : End If
              If Mo = 0 Then Mo = 1
              If Mo > 12 Then : Mo = 1 : Incr Sa1 : End If
              If Sa1 = 255 Then : Decr Sa : Sa1 = 99 : End If
              If Sa1 > 99 Then : Sa1 = 0 : Incr Sa : End If
              If Dy0 > 31 And Mo0 < 7 Then : Dy0 = 1 : Incr Mo0 : End If
              If Dy0 > 30 And Mo0 => 7 Then : Dy0 = 1 : Incr Mo0 : End If
              If Mo0 = 0 Then Mo0 = 1
              If Mo0 > 12 Then : Mo0 = 1 : Incr Sa10 : End If
              If Sa10 = 255 Then Sa10 = 99
              If Sa10 > 99 Then Sa10 = 0
              If Mo = 5 Then Fasl = 1
              If S = 59 And Da = 59 And H = 23 And Dy = 30 And Mo = 6 And Fasl = 1 Then
              H = 22 : Fasl = 0 : End If
              If S = 59 And Da = 59 And H = 22 And Dy = 29 And Mo = 12 Then H = 23
              End If
              If Meno > 6 Then : Meno = 0 : Goto Save : End If
              If De > 4 Then : De = 0 : Start Adc : Dem = Getadc(3) : Dem0 = Dem * 0.48875855 : Dem = Dem0
               Stop Adc : End If
              If S = 0 Then Porta.1 = 1 Else Porta.1 = 0
              '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
              Loop
              End                             'end program
              '*******************************************************************************
              Hadi:
              Data &B0000 , &B0001 , &B0010 , &B0011 , &B0100 , &B0101 , &B0110 , &B0111 , &B1000 , &B1001
              '**************************************
              Saneye:
              Incr S
              Incr De
              Return
              '*******************************************************************************
              Sub Yekan
              B = A / 10
              B = B * 10
              C = A - B
              D = Lookup(c , Hadi)
              End Sub
              '**************************************
              Sub Dahgan
              C = A / 10
              F = Lookup(c , Hadi)
              End Sub
              '**************************************
              Sub Indr
              If Meno = 1 Then
              S = 0
              End If
              If Meno = 2 Then
              Incr Da
              End If
              If Meno = 3 Then
              Incr H
              End If
              If Meno = 4 Then
              Incr Dy
              Incr Dy0
              End If
              If Meno = 5 Then
              Incr Mo
              Incr Mo0
              End If
              If Meno = 6 Then
              Incr Sa1
              Incr Sa10
              End If
              End Sub
              '______________________________________
              Sub Dedr
              If Meno = 1 Then
              S = 0
              End If
              If Meno = 2 Then
              Decr Da
              End If
              If Meno = 3 Then
              Decr H
              End If
              If Meno = 4 Then
              Decr Dy
              Decr Dy0
              End If
              If Meno = 6 Then
              Decr Sa1
              Decr Sa10
              End If
              End Sub
              '______________________________________
              Sub Meno1
              Incr Meno
              End Sub
              '______________________________________
              Save:
              I2cstart
              I2cwbyte &HD0
              S0 = Makebcd(s0) : Da0 = Makebcd(da0) : H0 = Makebcd(h0) : W = Makebcd(w)
              Dy0 = Makebcd(dy0) : Mo0 = Makebcd(mo0) : Sa10 = Makebcd(sa10)
              I2cstart
              I2cwbyte &HD0
              I2cwbyte 0 : I2cwbyte S0 : I2cwbyte Da0 : I2cwbyte H0 : I2cwbyte W : I2cwbyte Dy0
              I2cwbyte Mo0 : I2cwbyte Sa10 : I2cstop : Goto Aval
              Goto Aval
              Return
              در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

              دیدگاه


                #8
                پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                الان فقط میخوام توجیح شم تایمرو چطور استفاده کنم نمیخوام برنامه آماده استفاده کنم میخوام بفهمم الگوریتم کار چیه البته با مثال ممنون میشم کمک کنید بلکه از این سر در گمی نجات بیابم :angry:
                در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

                دیدگاه


                  #9
                  پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                  ببین دوست عزیز تایمر یک قابلیت هستش در میکرو که به شما اجازه انجام پردازشهای آسنکرون (غیر همزمان) رو میده! :rolleyes:
                  خوب این یعنی چی؟ oo:

                  یعنی این که شما در حالت عادی نمی تونی یه دستور بیشتر رو در هر بازه زمانی اجرا کنی مثلا خط اول دو عدد رو با هم جمع کنی و همزمان یه داده رو بخونی اما تایمر به شما این اجازه رو میده و به طور مستقل یک دستور دیگه رو اجرا می کنه. این کار با پرش کردن سریع به زیر برنامه تایمر انجام میشه. یک مثال ملموس اینه که شما وقتی با کامپیوتر آهنگ گوش میدی و برنامه مینویسی CPU یه لحظه برنامه رو اجرا می کنه و یک لحظه موسیقی پخش می کنه اما چون سرعت خیلی بالاست شما متوجه مکث نمی شی.

                  STM32 واقعا یه چیز دیگه است...

                  دیدگاه


                    #10
                    پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                    نوشته اصلی توسط Atlantis Engineering
                    ببین دوست عزیز تایمر یک قابلیت هستش در میکرو که به شما اجازه انجام پردازشهای آسنکرون (غیر همزمان) رو میده! :rolleyes:
                    خوب این یعنی چی؟ oo:

                    یعنی این که شما در حالت عادی نمی تونی یه دستور بیشتر رو در هر بازه زمانی اجرا کنی مثلا خط اول دو عدد رو با هم جمع کنی و همزمان یه داده رو بخونی اما تایمر به شما این اجازه رو میده و به طور مستقل یک دستور دیگه رو اجرا می کنه. این کار با پرش کردن سریع به زیر برنامه تایمر انجام میشه. یک مثال ملموس اینه که شما وقتی با کامپیوتر آهنگ گوش میدی و برنامه مینویسی CPU یه لحظه برنامه رو اجرا می کنه و یک لحظه موسیقی پخش می کنه اما چون سرعت خیلی بالاست شما متوجه مکث نمی شی.
                    خب این درست الان من میخوام بدونم چطوری استفاده کنم ازش که این چشمک زدنه از بین بره چون خیلیا گفتن مشکل استفاده نکردن از تایمره
                    در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

                    دیدگاه


                      #11
                      پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                      الان من میام به ترتیب محاسبات ثانیه و دقیقه و ساعت و سال و ماه و روز رو انجام میدم همون تقسیم ها برای یکان و دهگان.......واسه هر کدوم مثلا یکان ثانیه و دهگان دقیقه یه پایه میکرو رو در نظر میگیرم و خاموش و روشن میکنم مثلا بعد از 1میلی ثانیه یا 4 میلی ثانیه بعد با همون دستور lookup اون label مربوط به دیتا رو فراخونی میکنم و میریزم داخل یکی از پورت ها اما چشمک میزنه الان تایمرو کجای دل این بذارم؟اینو یکی دقیق بگه برام :sad:
                      در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

                      دیدگاه


                        #12
                        پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                        الان امکان خوندن و تست کردن برنامه رو ندارم!
                        چی چشمک می زنه ؟ عدد روی سگمنت؟
                        STM32 واقعا یه چیز دیگه است...

                        دیدگاه


                          #13
                          پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                          نوشته اصلی توسط Atlantis Engineering
                          الان امکان خوندن و تست کردن برنامه رو ندارم!
                          چی چشمک می زنه ؟ عدد روی سگمنت؟
                          فایلشو قرار میدم ببینید..........آره خیلی ضعیف داخل پروتئوس چشمک میزنه اما وقتی لچ قرار میدم(از نوع 74hc573) چشمکش حل میشه و نشون میده اما باز قاطی داره اصلا اگه بخوام 12تا لچ بذارم واسه حل این مشکل یکم غیر اصولی oo:
                          در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

                          دیدگاه


                            #14
                            پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                            الان یه کم وقتم محدوده یه جمع بندی می کنم واست :rolleyes:

                            استفاده از تایمر میکروکنترلر در مدارات تاریخ و ساعت برای شمارش زمان هستش که به طور مستقل عمل کنه و تغییر نکنه. دستورات تایمر مستقل از wait و تاخیرات بدنه اصلی برنامه هستش. (دقت کن تو دستورات تایمر wait ندی چون کل برنامه مختل میشه تا wait به پایان برسه) :read:

                            شما کاری که باید بکنی برای راه اندازی تایمر و هرچی بخوای در مورد AVR بدونی کتاب توی این لینک رو دانلود کن و بخون :NO:
                            http://www.iranled.com/forum/thread-10869.html

                            برای نمایش هم باید عدد مورد نظر حالا ثانیه، ساعت یا ... یکان و دهگان رو جدا می کنی به صورت تک رقمی می دی به BCD و با اتصال پایه مشترک در سگمنت عدد رو نمایش می دی. تمام این ها به طور خلاصه در برنامه ای که گذاشتم اومده. برای این که رفرش هم دیده نشه باید سرعت رو ببری بالا. فرکانس رو روی 8 مگاهرتز (یا با کریستال خارجی) بالاتر ببر و بازه زمانی روشن بودن رو کم کن. فک کنم 30 میلی ثانیه مناسب باشه.

                            موفق باشی
                            STM32 واقعا یه چیز دیگه است...

                            دیدگاه


                              #15
                              پاسخ : چطوری برای 12 سون سگمنت رفرش انجام بدم؟؟؟؟؟؟؟(کمک کنید)

                              نوشته اصلی توسط Atlantis Engineering
                              الان یه کم وقتم محدوده یه جمع بندی می کنم واست :rolleyes:

                              استفاده از تایمر میکروکنترلر در مدارات تاریخ و ساعت برای شمارش زمان هستش که به طور مستقل عمل کنه و تغییر نکنه. دستورات تایمر مستقل از wait و تاخیرات بدنه اصلی برنامه هستش. (دقت کن تو دستورات تایمر wait ندی چون کل برنامه مختل میشه تا wait به پایان برسه) :read:

                              شما کاری که باید بکنی برای راه اندازی تایمر و هرچی بخوای در مورد AVR بدونی کتاب توی این لینک رو دانلود کن و بخون :NO:
                              http://www.iranled.com/forum/thread-10869.html

                              برای نمایش هم باید عدد مورد نظر حالا ثانیه، ساعت یا ... یکان و دهگان رو جدا می کنی به صورت تک رقمی می دی به BCD و با اتصال پایه مشترک در سگمنت عدد رو نمایش می دی. تمام این ها به طور خلاصه در برنامه ای که گذاشتم اومده. برای این که رفرش هم دیده نشه باید سرعت رو ببری بالا. فرکانس رو روی 8 مگاهرتز (یا با کریستال خارجی) بالاتر ببر و بازه زمانی روشن بودن رو کم کن. فک کنم 30 میلی ثانیه مناسب باشه.

                              موفق باشی
                              من کتاب کاهه رو چن سال پیش خوندم اون چیزی که تو کتاب ها و جزوات اومده کمکی بهم نمیکنه من میخوام تو این برنامه که گذاشتم مشکل رو حل کنم الان این برنامه رو ببین واسه ال سی دی نوشته شده من با همون روشی که گفتم بدون تایمر تونستم ثانیه و دقیقه و سال و هرکدوم رو که بخوام نوشن بدم منتهی بدون لچ ایراد داره

                              اینم فایلش ورژن پروتئوسم 8 هست امیدوارم مشکلی پیش نیاد واسه اجراش

                              http://www.uplooder.net/cgi-bin/dl.cgi?key=2afe60981cca696f6fdcb187a5982ced


                              در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

                              دیدگاه

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