مقدار a2 مثلا 5 هستش این کد میاد از برچسب 7سگمنت خط 5 رو روی پورت b میذاره.(از این راحت تر نمیتونم بگم)
:angry:
دلا یاران سه قسمند ار بدانی
زبانی اند و نانی اند و جانی
به نانی نان بده از در برانش
محبت کن به یاران زبانی
و لیکن یار جانی را به دست آر
به جانش جان بده تا می توانی
در مورد استفاده از کلید در دو حالت من تا حالا این کار رو می کردم:
یه تایمر می ذاشتم و هر بار که کلید فشار داده میشد یکی به مقدار یک متغیر اضافه می رکدم. حالا اگه فشردن کلید مربوط به قسمت اول باشه( یعنی فقط یک بار فشردن کلید) به محضی که مقدار اون متغیر به یک می رسید عملیات مربوطه انجام میشه و در غیر این صورت این قدر این مقدار تو تایمر زیاد میشه تا به حد 5 ثانیه برسه. وقتی به اون حد رسید عملیات مربوطه انجام میشه. مقدار اون متغیر هم در سه حالت صفر میشه. اول وقتی در وضعیت تک حالته هستیم . دوم وقتی هنوز به زمان 5 ثانیه نرسیده باشیم و دست از روی کلید برداشته باشیم. سوم زمانی که عملیات مربوط به فشرده شده گکلید بعد از 5 ثانیه انجام شد. ( چقدر سخت گفتم!!!)
در مورد جدول لوک پ ( Look up) هم تو تاپیک های مستقل دیگه بحث شده. حتما سرچ کنین.
7segment:
Data &B11000000 'number 0'
Data &B11111001 'number 1'
Data &B10100100 'number 2'
Data &B10110000 'number 3'
Data &B10011001 'number 4'
Data &B10010010 'number 5'
Data &B10000010 'number 6'
Data &B11111000 'number 7'
Data &B10000000 'number 8'
Data &B10010000 'number 9'
اینا برای 7سگمنت آند مشترک هستش.(اگه بخوای برای کاتد مشترک استفاده کنی کافیه 0 رو به 1 و 1 رو به0 تبدیل کنی)
یک سوال. این که همزمان هر دوتا حالت امکان وقوع داشته باشن هست؟
یعنی دوتا برداشت میشه کرد:
1- تو یک موقعیت ختما باید مشخص بشه که 5 ثانیه نگه داشته شده در غیر این صورت به منزله به صورت فشردن لحظه ای هست.
2- در هر موقعیت تنها یکی از حالت های لحظه ای یا 5 ثانیه ای امکان وقوع داره.
اینو بگو چجوریه تا یه کم فکر ( :surprised: ) کنم
نه نباید 2 تا موقعیت با هم اتفاق بیفته.
اگه کلید رو یه بار بزنه که یه شخص بیشتر 1 ثانیه دستش روی کلید نیستش که من تا 3.6 ثانیه رو به منزله یه بار فشار دادن قرار دادم.
و اگه بیشتر از 5 ثانیه فشار بده باید تمام متغییر های مورد نظر رو صفر کنه.در واقع این کار به منزله ریست هستش.
برای این کار من با زدن کلید تایمر 0 رو استارت کردم. و در هر بار سرریز شدن تایمر یکی به متغییر OP1 اضافه میکنم و دوباره با برنامه Return میشه اگه مقدار OP1 کمتر از 120 باشه یعنی 120 بار تایمر سرریز شده و زمان 3.6 سپری یا کمتر از آن گذشته که در این حالت به برچسب مورد نظر میپره.
و اگه مقدار OP1 بیشتر از این باشه به منزله ریست در نظر گرفتم .
البته یکمی برنامه رو تغییر دادم و تست کردم. 1 بار بیشتر کار نمیکنه .یعنی وقتی متغییر کمتر از 120 هستش و به برچسب مورد نظر میپره دیگه کلید کار نمیکنه در واقع تایمر دیگه کار نمیکنه.تایمر هم دوباره پر میکنم.نمیدونم چرا؟؟؟
Dim Op1 As Integer
Dim Op2 As Integer
Dim Op As Word
Dim Lop As Word
Dim A1 As Word
Dim A2 As Word
Dim A3 As Word
Dim A4 As Word
Dim A5 As Word
Dim A6 As Word
Dim A7 As Word
Dim A8 As Word
Dim Clik As Bit
Dim Selec As Byte
Dim X As Integer
If Pind.5 = 1 Then
Waitms 20 'Debounce giri baraye klid
If Pind.5 = 1 Then 'mitoonid meghdare debounce ra taghir bedid
For X = 0 To 800
If Pind.5 = 0 Then Goto Cheng
Waitms 5
Next X
For X = 0 To 1000
If Pind.5 = 0 Then
Op2 = 0
Op1 = 0
End If
Waitms 3
Next X
End If
End If
Debounce Pind.6 , 1 , Down
Debounce Pind.7 , 1 , Up
Loop
Cheng:
Toggle Clik
jmp milad
Down:
If Clik = 0 Then
Decr Op2
Writeeeprom Op2 , 0
Waitms 4
End If
If Clik = 1 Then
Decr Op1
Writeeeprom Op1 , 10
Waitms 4
End If
jmp milad
Up:
If Clik = 0 Then
Incr Op2
Writeeeprom Op2 , 0
Waitms 4
End If
If Clik = 1 Then
Incr Op1
Writeeeprom Op1 , 10
Waitms 4
End If
jmp milad
'......zamane sar riz shodane TIMER0......'
Timer1rutin:
If Clik = 0 Then
Select Case Selec
Case 1 To 4 : Reset Portd.4
Case Else : Set Portd.4
End Select
End If
If Clik = 1 Then
Select Case Selec
Case 5 To 8 : Reset Portd.4
Case Else : Set Portd.4
End Select
End If
If Selec = 1 Then
Reset Portc.3
Set Portd.0
Portb = Lookup(a1 , 7segment)
End If
If Selec = 2 Then
Reset Portd.0
Set Portc.0
Portb = Lookup(a2 , 7segment)
End If
If Selec = 3 Then
Reset Portc.0
Set Portc.1
Portb = Lookup(a3 , 7segment)
End If
If Selec = 4 Then
Reset Portc.1
Set Portc.4
Portb = Lookup(a4 , 7segment)
End If
If Selec = 5 Then
Reset Portc.4
Set Portd.1
Portb = Lookup(a5 , 7segment)
End If
If Selec = 6 Then
Reset Portd.1
Set Portd.2
Portb = Lookup(a6 , 7segment)
End If
If Selec = 7 Then
Reset Portd.2
Set Portc.2
Portb = Lookup(a7 , 7segment)
End If
If Selec = 8 Then
Reset Portc.2
Set Portc.3
Portb = Lookup(a8 , 7segment)
End If
Incr Selec
If Selec = 9 Then Selec = 1
Op = Op1
A1 = Op Mod 10
Op = Op / 10
A2 = Op Mod 10
Op = Op / 10
A3 = Op Mod 10
A4 = Op / 10
Lop = Op2
A5 = Lop Mod 10
Lop = Lop / 10
A6 = Lop Mod 10
Lop = Lop / 10
A7 = Lop Mod 10
A8 = Lop / 10
Incr X
If X = 35 Then
Incr Op1
Incr Op2
X = 0
End If
If Op1 = 9999 Then
Op1 = 0
Op2 = 0
End If
Timer0 = 238
Return
7segment:
Data &B11000000 'number 0'
Data &B11111001 'number 1'
Data &B10100100 'number 2'
Data &B10110000 'number 3'
Data &B10011001 'number 4'
Data &B10010010 'number 5'
Data &B10000010 'number 6'
Data &B11111000 'number 7'
Data &B10000000 'number 8'
Data &B10010000 'number 9'
این سرور که خراب شد 70 تا از تایپک های من کم شده :agree:
دیدگاه