ايران ويج

نسخه‌ی کامل: سئوال در رابطه با برنامه نویسی یک قفل رمزدار
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
در سایت جستجو کردم از دوستان هم کمک گرفتم ولی مشکلم حل نشد به همین خاطر این پست را زدم .

دوستان من یک مدار شامل
1 کیپد 3*4
1 میکروکنترل اتمگا 16
2 ال ئی دی

دارم در میکرو برنامه ای بار گذاری میشود که حاوی یک رمز 5 رقمی است .
در صورتی که کاربر رمز صحیح را بزند چراغ سبز و در صورت درج رمز بصورت اشتباه چراغ قرمز روشن می شود .

من برای این پروسه برنامه ای نوشتم که از نظر منطقی بنظر اشتباه نیست ولی وقتی در شبیه ساز روی مدار بارگیری میشود جواب نمی دهد .

ممنون میشم اگر برنامه را نگاه کنید و ایراداتش را بگید .
متاسفانه در فروم های ایرانی زیاد دیدم که کاربری میاد و یک جمله می گه و فکر می کنه که مشکل دوستش را حل کرده ! واقعا اینطور نیست کسی که میاد مشکلی مطرح می کنه مطمئن باشید خیلی گشته و از این نظرات یک خطی و برنامه های جور وا جور دیده ولی نتیجه نگرفته چون میشه گفت انقدر تسلط روی موضوعی که در فورم مطرح می کند ندارد که با یک سرنخ به مقصد برسد .


ممنون از لطفتون
کد:
$regfile = "m16def.dat"
$crystal = 8000000

Config Kbd = Portb
'Porta.0 cheragh ghermez (Khata)
Config Porta.0 = Output
'Porta.1 cheragh sabz (Sahih)
Config Porta.1 = Output

'LED TEST
Set Porta.0
Set Porta.1
Waitms 50

'khamosh kardan LED ha
Reset Porta.0
Reset Porta.1

'Moteghaieri ke vorodi ha ra az keypad migirad
Dim Key As Byte
'Password delkhahi ke bar gozari mikonim
Dim Pass(5) As Byte
'Moteghaieri ke meghdarash ra az jadval estekhraj mikonim
Dim Number As Byte
'Input Password
Dim I_pass(5)as Byte
'shomarandeh
Dim C As Byte

'Password = 12345
For C = 0 To 4
Pass(c) = C + 1
Next C

C = 0

Do
Key = Getkbd()
Number = Lookup(key , Keypad_table)

Select Case Number
Case 0 To 9 :
I_pass(c) = Number
Incr C

Case 10:
C = 0
Reset Porta.0
Reset Porta.1

Case 20:
If C = 4 Then
For C = 0 To 4
If I_pass(c) <> Pass(c) Then
Set Porta.0
C = 0
Exit For

'agar halghe ta akharin dor iani c=4 shekaste
'nashod iani tamame char ha ba ham barabarand
Elseif C = 4 Then
C = 0
Set Porta.1
End If
Next C
Else
Set Porta.0
C = 0
End If
End Select

Loop

End 'end program

'10 reset
'20 Enter
'12 zamani ast ke kelidi zade nashodeh

'Keypad Table
Keypad_table:
Data 1 , 2 , 3
Data 4 , 5 , 6
Data 7 , 8 , 9
Data 10 , 0 , 20 , 12
سلام.
دوستان اینجا اگه کمکی از دستشون بر بیاد دریغ نمی کنند...
یعنی نمی خواین ال سی دی داشته باشه؟
بله بله حتما همین طوره دوست عزیز

نه دوست عزیز فقط همین قطعات بالا در مدار است ، رمز از قبل بار گذاری شده و فقط چک می شود .
برنامه را که چک می کنم بیشتر مشکل را در قسمت خواندن دیتا از کیپد توسط تابع کامپایلر می بینم ، بنظر می رسد دیتای خوانده شده 0-12 نیست ! نحوه ی اتصال سیم های کیپد به میکرو را به شکل زیر گذاشتم
PBD0=1
PBD1=2
PBD2=3
PBD3=A
PBD4=B
PBD5=C
PBD6=D
من یه برنامه میزارم ببینید و ازش بهره بگیرین -البته برنامه کار خودم نیست
برنامه خودتون رو هم بعد از ظهر براتون یه نگاهی میکنم
سلام
دوست عزیز به فروم خوش اومدید
در صورت امکان شبیه ساز مدار و هم بذارید تا بررسی بشه
آقا میکاییل اون برنامه ای که من به شما دادم مشکلی که نداشت.
شما فقط دستورات ال سی دی رو حذف کن همونی میشه که میخواستی دیگه
مهندس برنامت کمی شلوغ بود حوصلم نکشید ایرادش و چک کنم
واست یه برنامه ساده نوشتم که شاید مشکلت و حل کنه
پسورد پیش فرض همون 12345 که درصورت صحت یه led سبز و عدم صحت قرمز روشن میشه.


[attachment=8738]
بله از لطفتون ممنونم ولی من باید این را روی یک مدار فیزیکی که فقط همین قطعات را که در بالا گفتم دارد بار گذاری کنم . حتی بعد از حذف نمایشگر مدار شما قطعات بیشتری دارد و عملا روش خواندن کیپد شما برای مدار من امکان پذیر نیست .

کل مدار مثل عکس زیر است :
http://photos.uvs.ir/img/fd5a10c877af.jpg
مهندس عکسی که گذاشتید سایزش خیلی بزرگه بهتر بود تو خود سایت آپلود میکردید.
نقل قول: بله از لطفتون ممنونم ولی من باید این را روی یک مدار فیزیکی که فقط همین قطعات را که در بالا گفتم دارد بار گذاری کنم . حتی بعد از حذف نمایشگر مدار شما قطعات بیشتری دارد و عملا روش خواندن کیپد شما برای مدار من امکان پذیر نیست .
خب شما فقط کافیه جای مگا 32 رو با مگا16 عوض کنید...همین
مهندس R0b0 پاسخ قبلی من به آقای h.unique بود در حین پاسخ من شما پست گذاشتید به همین خاطر من ندیدم پست شما را ، واقعا ببخشید .
عکس را ویرایش می کنم .

دوست عزیز واقعا ممنونم از برنامه ی شما ، کاملا منطبق با مداری است که می خواهم فقط امیدوارم با تغییر میکرو باز هم به همین شکل اعداد را بگیره ، ممنون میشم اگر نحوه ی خواندن اعداد را بگید ، من فکر می کردم (یعنی خوانده بودم در سایت ها برای حل این مشکلم) یک کیبورد 3*4 از 0 تا 12 اندیس گذاری شده به شکل زیر
اندیس 0= عدد 1 روی کیبورد
اندیس 1 = عدد 2 روی کیبورد
و ...
و 12 هم برای زمانیست که عددی وارد نشده .
ممنون میشم اگر ساختار
کد:
A = Getkbd()
Select Case A

Case 8 : Lcd "1"
S = S + 10000
Case 9 : Lcd "2"
S = S + 2000
Case 10 : Lcd "3"
S = S + 300
Case 4 : Lcd "4"
S = S + 40
Case 5 : Lcd "5"
S = S + 5
Case 6 : Lcd "6"
S = Rnd(x)
Case 0 : Lcd "7"
S = Rnd(x)
Case 1 : Lcd "8"
S = Rnd(x)
Case 2 : Lcd "9"
S = Rnd(x)

End Select
را یک توضیح مختصر بدهید ، ساختار سویچ کیس را میدانم ، فقط فلسفه و نحوه ی خواندن اعداد کیپد را نیم دانم !

باز هم از لطف شما متشکرم .
مهندس جان نمی دانم چرا روی مگا 16 دقیقا مشکل کد خودم را دارد یعنی اعدادی که از کیپد بدست می اید اشتباه هستن ، به هر سطر یک عدد میدهد ، مثلا یک سطر 1 یک سطر 4 و دیگری 9 ؟؟؟ من کد شما را بعد از حدف نمایش گر بر روی هر دو میکرو تست کردم ولی مگا 16 نمی تواند مثل مگا 32 اعداد را بگیرد !
برنامه ی خودتان را با حذف نمایشگر در زیر قرار میدهم (بر روی هر دو میکرو) .
امکان دارد که بفرمایید چرا مگا 16 نمی تواند مثل مگا 32 اعداد را بخواند !!!
برای مگا 16 راهی هست که درست اطلاعات را از کیپد بگیرد یا باید میکرو را عوض کنم !!؟؟
ممنون میشم دوستان بتونن کمکم کنند .

لینک
لینک
لینک
صفحه‌ها: 1 2