سلام رسول جان
به این سادگی که این برنامه رو نوشتی نیست
من خودم قبلا تقریبا شبیه به این رو انجام دادم
که 3 تا کلید داشت: اولی که میزدی بعدش باید کارت میکشیدی تا ذخیره بشه
دومی که میزدی بعدش باید کارت میکشیدی تا کارت ذخیره شده پاک بشه
سومی که میزدی کل حافظه پاک میکرد.
عکسشو زیر گذاشتم
یکی از حافظه های eeprom رو برای تعداد کارتهای ذخیره شده در نظر بگیر ( سعی کن حافظه صفرم باشه )
اول این حافظه رو چک میکنی ، ببین کارتی ذخیره شده یا نه. مثلا اگر صفر بود یعنی کارتی ذخیره نیست و اگر 4 بود مثلا 4 تا کارت ذخیره کردی
بعدش به همون تعداد کارت ذخیره شده، اونا داخل متغیر مثلا num(10) as string*10 قرار میدی . این از زمان شروع برنامه
خب حالا میریم سرغ ذخیره سازی
یه کلید باید به اینتراپت وصل باشه و داخل زیر برنامه وقفه اش یه وضعیت تعریف میکنی . مثلا هر وقت اینتراپت مربوطه فعال شد متغیر state = 1 کنه. بعدش داخل حلقه اصلی برنامه یه شرط برای state = 1 میزاری که کارت ذخیره کنه. بدین صورت :
کد php:
Incr Conter1
Num(conter1) = D
Conter2 = Conter1 * 35
Writeeeprom D , Conter2
Writeeeprom Conter1 , 0
State = 0
conter1 تعداد کارت های ذخیره شده است که تو حافظه صفر ذخیره میکنه
و conter2 شماره حافظه جدید برای کارتی که کشیده شده هست
ضربدر 35 بخاطر تعداد کارکتر کارت هست چون از نوع string هستش.
در آخر هم متغیر state باید صفر بشه
اگر مقدار state = 0 بود باید کارت ها چک بشه
دقیقا بصورت زیر:
کد php:
Do
Cls
Home
Lcd "Searching Card: "
Call Em18
If State = 0 Then
If D = Num(1) Or D = Num(2) Or D = Num(3) Or D = Num(4) Or D = Num(5) Or D = Num(6) Or D = Num(7) Or D = Num(8) Or D = Num(9) Or D = Num(10) Then
Ledg = 1
Relay = 1
Waitms 500
Ledg = 0
Relay = 0
Else
Buz = 0
For Count = 1 To 6
Toggle Ledr
Toggle Buz
Waitms 300
Next
Ledr = 0
Buz = 0
End If
Elseif State = 1 Then
Incr Conter1
Num(conter1) = D
Conter2 = Conter1 * 35
Writeeeprom D , Conter2
Writeeeprom Conter1 , 0
State = 0
Elseif State = 2 Then
.
.
.
.
.
State = 0
End If
Loop
برای نشون دادن تگ ها ، یک کلید به اینتراپت دومی وصل میکنی و در زیربرنامه اش تعداد کارت های ذخیره شده رو میخونی که چند تا کارت ذخیره داری و با هر بار فشار دادن کلید یک واحد با متغیرت اضافه بشه و در 35 ضرب کن و حافظه مربوطه بخون که خود شماره کارت هست
برای پاک کردن هم ، چون 2 تا اینتراپت داریم پس یکی دیگه از کلیدها رو تو حالت تایمر چک میکنیم مثلا هر 64ms کلید سوم چک بشه، اگر کلید فشرده شد و برنامه در حالت نمایش دادن کارت ها بود ، کارت مورد نظر پاک کنه
و مهمترین قسمت برنامه اینجا هست که :
مثلا شما 6 عدد کارت ذخیره داشتی و کارت دومی رو پاک کردی
در اینجا شما اگر کارت بعدی رو بکشی در حافظه هفتم ذخیره میشه
بنابراین باید کارت سوم رو در کارت دوم، کارت چهارم رو در کارت سوم و کارت پنجم رو در کارت چهارم و کارت ششم رو در کارت پنجم قرار بدی
بدین ترتیب زمانیکه کارت جدید کشیدی در حافظه ششم قرار میگیره
کد php:
Num(1) = Num(2)
Num(2) = Num(3)
Num(3) = Num(4)
Num(4) = Num(5)
Num(5) = Num(6)
Num(6) = ""
امیدوارم که منظورمو رسونده باشم
موفق باشی ....