×
اطلاعات بیشتر باشه، مرسی برای ارائه بهترین تجربه کاربری به شما، ما از کوکی ها استفاده میکنیم
× ...........................
×

آدرس وبلاگ من

mostafams.goohardasht.com

آدرس صفحه گوهردشت من

goohardasht.com/8712081353

rfid پروژه

 
 
 
 
 
 
 
 
 
 
 
 
پایان نامه دوره کارشناسی
      
عنوان پروژه :
RFID سیستم کارت خوان
                              
 
 
 
استاد پروژه : جناب آقای دکتر نبوی 
 
استاد دفاع : جناب مهندس سالارعابدی
 
 
با آرزوی موفقیت برای شما
                                                                         تابستان 1389
 
 
 
 
 
سپاس یگانه خالق هستی که ما را با تمامی نعمت های زیبای خود در این دنیای پر وسعت
محشور  کرد و سایه سار بلند و آرامش بخش خانواده مان را چون چتری بر سرمان
گسترانید.
 
 
سپاس خدایی را که از روح خود در وجود ما دمید و افتخار انسان بودن را نصیبمان کرد ،
باشد که  بتوانیم به پاس شکر گزاری از او در بستر انسانیت زندگی کنیم .
 
 
 
با تقدیر و تشکر :
با قدر دانی از استاد بزرگوار و ارجمند  جناب آقای دکتر نبوی 
و تمام عزیزانی که ما را در انجام این پروژه یاری کرده اند .  
 
 
 
 
 
فهرست مطالب
 
مقدمه  --------------------------------------------------------------------------------------------------------- 6
 
  ------------------------------------------------------------------------------------- 6RFIDمعرفی تکنولوژی
 
 -------------------------------------------------------------------- 7RFID معرفی تجهیزات مورد استفاده  در
  7-------------------------------------------------------------------------------------  RFID  الف �  برچسب
 ----------------------------------------------------------------------------------- 8RFID ب � کارت خوان   
    -------------------------------------------------------------------------------- 9  ج � آنتن و سیستم رادیویی
 -------------------------------------------------------------------------------------- 9   RFID   د � شبکه های
 
 ------------------------------------------------------------------------------------------  10 RFID کاربرد های
 
 ----------------------------------------------------------------------  10 RF01Dآشنایی با ماژول کارت خوان
 
  ----------------------------------------------------------------------- 14 code visionبرنامه پروژه در محیط      
سخت افزار پروژه -----------------------------------------------------------------------------  31                  
قطعات اصلی پروژه  -------------------------------------------------------------------------- 36  
                                              RF01D ماژول کارت خوان  الف -
                                                                                   ATMEGA 16میکرو کنترلر استفاده شده :   ب -
مقدمه :
 در این پروژه درباره یکی از روشهای مهم شناسایی بحث می کنیم . به هر سیستمی که قادر به دریافت اطلاعات  ازافراد یا
کالایی باشد  سیستم شناسایی  گویند در حالت کلی ، شناسایی خودکار و نگهداری داده ها بدون کمک گرفتن از انسان روشی
برای حذف خطاهای فردی و افزایش سرعت دریافت اطلاعات به شما می رود . سیستمهای مبتنی براثر انگشت ،  بار کدها
کد- برچسبهای دو بعدی ،  سیستمهای شناسایی با استفاده از صدا یا چهره وغیره... از این جمله می باشند. یکی از جدیدترین
مباحث مورد توجه دانشمندان برای شناسایی افراد یا کالاها به کار گیری سیستمهای شناسایی  با استفاده اموج رادیویی  یا به
          است .RFIDاختصار
 وچگونگی عملکرد آنها رامعرفی می کنیم ودرنهایت با معرفی کارت RFIDدراین پروژه ابتدا سیستمهای مبتنی بر فناوری
. وساخت یک در باز کن خودکار پروژه را به پایان می رسانیم RF01D خوان
 
  :RFID معرفی تکنولوژی
 به سیتم شناسایی رادیویی،که توسط بمب افکنهای متفقین درجنگ جهانی دومRFID مهمترین تاریخچه وزمان آغاز فناوری
 استفاده شد ، بر می گردد . سیستم تشخیص دوست یا دشمن این امکان را برای آنان میسر می ساخت  تا هواپیمای باز گشتی
خودی را از هواپیمای جنگنده دشمن تشخیص دهد .عملکرد این سیستم ( و سیستم های مشابه امروزی آن ) به گونه ای است
 که سیگنال های رادیویی کد شده به  سوی هواپیما ارسال می شوند و در صورت دریافت پاسخ صحیحی از سوی هواپیما ،
مشخص می گردد که هواپیما  خودی است. 
کمی پس از پایان جنگ ، دانشمندی به نام هری استوکمن دریافت که می توان انرژی مورد نیاز یک فرستنده رادیویی را به
طور کامل از انرژی دریافتی از سیگنا ل رادیویی تامین کرد .وی یافته های خود را در مقاله ای به عنوان ارتباط با استفاده
از انرژی باز تابیده شده منتشر نمود .
 ،به شکلی که امروزه شناخته می شوند به طور جدی در دهه 1970میلادی آغاز شده در سال  RFID کار روی سیستمهای
1972 ، کریوفشی و کاپلن اختراعی با عنوان فرستنده - گیرنده القایی کوپل شده به ثبت رساندند این سیستم  از  دو سیم پیچ
 جداگانه ،  یکی برای دریافت توان و دیگری  برای ارسال  سیگنال رادیویی  بازگشتی استفاده می کرد .
شخصی دیگری به نام  بیگل توانست ، با ترکیب این دو سیم پیچ مسیررا برای هرچه کوچک تر کردن     در سال  1972 ،
و رسیدن به سیستم های امروزی هموار کرد  . RFID سیستمها ی 
 همچنین دردهه 1970، گروهی از دانشمندان درآزمایشگاهی دریافتند که یک گیرنده دستی وتحریک شونده با یک فرستنده
قدرت سیگنال رادیویی ،  می تواند یک سیگنال رادیویی کد شده را باز گرداند . 
چنین سیستمی ، با اتصال به یک کامپیوتر ساده ، برای کنترل دسترسی به محلهای امنیتی به کارمی رفت وآنها این سیستم را
برای کنترل دسترسی به مواد وتجهیزات حساس در سایتهای سلاح هسته ای استفاده کردند .
چند سال بعد ، این  دانشمندان کمپانی شخصی خودشان را تاسیس کردند تا  این تکنولوژی را به  صورت تجاری در آورند .
سر انجام ،  اولین سیستم ورود به ساختمان ، که بر تکنولوژی مجاورت استوار بود ساخته شد  این اولین استفاده  تجاری از
 بود .RFID  تکنولوژ
 
 :RFID تجهیزات مورد استفاده در
 از چهار بخش عمده تشکیل شده اند : RFID  سیتمهای مبتنی بر فناوری
کارت یا برچسب  -1
- کارت خوان  2
- آنتن وسیستم رادیویی 3
- شبکه کامپیوتری4
در ادامه هر یک از این بخش ها را بررسی می کنیم .
:RFID برچسب
برچسب ها ، مهمترین بخش این سیستم به شمار می روندهر بر چسب ازیک آنتن ویک تراشه کوچک سیلیکونی تشکیل شده
 است .  تراشه موجود در بر چسب ها شامل یک گیرنده ، یک  مدولاتور رادیویی برای ارسال پاسخ به کارت خوان  ، مدار
کنترلی ، مقدار مشخصی حافظه و مدا رتغذیه می باشد . گاهی اوقات ممکن است مدا رتغذیه، انرژی مورد نیاز تراشه را به
طور کامل از سیگنال رادیویی دریافتی از کارت خوان تامین کند که  در این صورت  بر چسب را غیر فعال می گوئیم . در
مقابل اگر مدار تغذیه ،  انرژی لازم را از یک باتری تامین کند ، بر چسب را برچسب فعال می نامیم  .
مهمترین ویژگی بر چسب های فعال ، امکان بر قراری ارتباط مطمئن در فواصل زیاد است ؛ چراکه در آنها نیاز به سیگنال
رادیویی  پیوسته  برای تامین انرژی الکتریکی  نیست . برای مثال می توان  بر چسب فعال  را در صورتی  که از یک آنتن
در بر چسب و کارت خوان استفاده می شود ، در فواصل 30 متری و حتی بیشتر به کار برد .
بر چسبهای غیر فعال ، به دلیل عدم استفاده از باتری، بسیار کوچکتروارزانتر ازنوع فعالند. ویژگی دیگر آنها ، داشتن طول
عمر بالاست در مقایسه با بر چسبهای فعال که طول عمر باتری آنها ، حداکثر چند سال است بر چسبهای غیر فعال چند دهه
پس از تولید استفاده می شوند .
علاوه بر دونوع بر چسب ذکر شده ، دسته ای دیگر از بر چسبها وجود دارند که با عنوان بر چسبهای نیمه غیر فعال شناخته
می شوند . این نوع از برچسبها دارای باتری می باشند ؛ باوجود این برای ارسال اطلاعات از انرژی بدست آمده از سیگنال
رادیویی که توسط  کارت خوان ارسال می شود استفاده می کنند .این گونه از برچسبها از قابلیت اطمینان بر چسبهای فعال و
برد برچسبهای غیر فعال بر خوردار هستند . طول عمر آنها نیز از بر چسبهای فعال  بیشتر است .  برچسبها در شکل ها  و
اندازه های گوناگو ن ساخته می شوند . برای نمونه بر چسبهایی مانند کارت های اعتباری که معمو لا آنها را کارت هوشمند
بدون تماس می نامند یا بر چسبهایی به صورت لایه های کاغذی با قابلیت چسباندن به اشیاء که به آنها برچسب های هوشمند
می گویند . گاهی اوقات ممکن است برچسبها به دلیل داشتن مصارف خاص ،مقاوم درمقابل رطوبت سا خته شوند که در این
صورت تراشه  و مدارات الکترونیکی در داخل یک محفظه  شیشه ای قرار می گیرند .  برخی از بر چسبها را می توان  با
توجه  به ساختارشان در داخل اشیای عمومی مثل لباس ، کفش  و غیره جاسازی  کرد  .
امروزه برچسب های بسیار کوچک نیز ساخته میشوند که می توان آنها را در بدن انسان یا حیوانات قرار داد .کوچک ترین
برچسبی که تا به حال ساخته شده است بر چسب مو- چیپ  با ابعاد کمتر از 0.4  میلیمتر می باشد که برای جاسازی دریک
تکه کاغذ به منظور رهگیری پرونده های اداری طراحی شده است . حداکثر  فاصله  خواندن این  بر چسب غیر فعال ، چند
سانتیمتر بیشتر نیست  . نمونه دیگر این بر چسب های کوچک ، برچسب کوچکی به اندازه یک دانه برنج می باشد که برای
جاسازی زیر پوست طراحی شده است. ساده ترین بر چسبها دارای یک شناسه 64 یا 96 بیتی می باشند . معمولا این شناسه
درکار خانه سازنده ، روی تراشه داخل بر چسب نوشته می شود و تغییر پذیر نیست. بر چسبهایی نیز وجود دارند که کار بر
 می تواند شناسه آنها را به دلخواه تغییر دهد. برنامه ریزی شناسه برخی از بر چسبها ، تنها یک بار و برخی دیگر به دفعات
 ممکن است . برچسبهای پیچده تری وجود دارند که می توان شناسه آنها را با استفاده از کار ت خوان تغییر داد .دسته ای از
بر چسبها ،  قابلیت خود تخریبی دارند ؛  به این معنی که اگر کار ت خوان کد ویژه ای را که در این بر چسب ها وجود دارد
ارسال کند ، بر چسبها از آن پس به فرمان های دریافتی پاسخ نمی دهند یا به اصطلاح می سوزند . ممکن است بر چسب ها
علاوه بر شناسه ، کلمه عبور داخلی داشته با شند که در این صورت کار ت خوان باید برای بر قراری ار تباط ،ابتدا ی کلمه
عبور را ارسال کند و بر چسب ، تنها در صورت درستی کلمه عبور ، شناسه خود را در اختیار کارت خوان قرار می دهد .
  :RFID کارت خوان
کارت خوان دستگاهی است که سیگنال رادیویی دارای انرژی را به برچسب ارسال میکند و منتظر پاسخ می ماند. بر چسب
این  سیگنال انرژی را دریافت می کند و با ارسال شناسه  خود  به آن پاسخ می دهد . کارت خوان در سیستم های ساده تنها ،
پالسهای رادیویی دارای انرژی را به طور متناوب ارسال می کند ،اما درسیستمهای پیچیده تر ، سیگنال رادیویی ار سالی از
طرف کارت خوان ،علاوه بر انرژی ، دستورهایی را برای برچسب در بر می گیرد . این دستورها شامل خواندن از حافظه
بر چسب یا نوشتن در آن ، ارسال کلمه عبور و... می باشند .
در گذشته ،کارت خوان ها معمو لا برای بر قراری ارتباط با دسته ای خاصی از بر چسبها طرا حی می شدند ، ولی امروزه
کار ت خوان های چند حالته با قابلیت بر قراری ارتباط  با انواع مختلف بر چسب ها ، به طور چشم گیری در حال  گسترش
 می باشند . کارت خوان ها معمولا به طور مداوم روشن و منتظر پاسخ برچسبهایی می باشند که به محدوده کاری آنها وارد
می شوند. کار ت خوانها نیز مانند بر چسبها درابعاد واندازه های گوناگون ساخته می شوند . کوچکترین کار ت خوان که تا
به حال ساخته شده ، در ابعاد یک تمبر پستی و برای قرار گرفتن در تلفن های همرا ه طراحی شده است .
آنتن وسیستم رادیویی :
 از امواج رادیویی وآنتن تشکیل شده است که در حقیقت ارتباط بین کارت خوان و بر چسب را  RFIDلایه فیزکی یک سیتم
  از باند فرکانسی ای استفاده میکنند که به RFID  برای ا نتقال اطلاعات بین آنها امکان پذیر میسازد. تقریبا تمام سیستمهای
دریافت مجوز نیاز ندارد . این گونه باندها را باندهای بدون مجوز می گویند . باندهای بدون مجوز عبارتند از باند فرکانسی
  درفرکانس  uhf درفرکانس مر کزی 13.56 مگاهرتز،باند hfبا محدوده فرکانسی بین 125تا 134.4 کیلو هرتز، باند  Lf
فرکانس مرکزی 2.4 گیگا هرتز .  در ism  مرکزی 915 مگا هرتز  و باند
 :RFIDشبکه های
 ،تنها یک کد شناسایی یا شناسه ارسال  می کنند . حال سوال این جاست که کارت خوان با این کد RFID اغلب بر چسبهای
چه می کند ؟ کارت خوان در اغلب موارد این شناسه را به یک کا مپیوتر یا مدار میکرو کنترلری منتقل می کند . در حقیقت
 وظیفه کارت خوان ، تنها دریافت شناسه از بر چسب است و این که کامپیوتر با شناسه چه می کند ، به نوع کار برد بستگی
دارد.برای مثال دریک سیتم کنترل دسترسی،کامپیوتر باید برسی کند که شناسه دریافتی درفهرست شناسه هایی که می توانند
 به مکان مشخصی  دسترسی داشته باشند ، موجود است یا خیر .اگر شناسه در این فهرست مو جود باشد ، ممکن است برای
 مثال کامپیوتر با فرمان به یک سیم پیچ الکترومغناطیس ، در را باز کند .
گاهی اوقات ممکن است سیستم به سادگی سیستم ارائه شده در مثال قبل نباشد . در سیستم های بزرگ برای برسی شناسه ها
 ،RFID  از شبکه های کامپیوتری گسترده استفاده می شود . برای مثال در سیستم پرداخت بلیط مترو با استفاده از فناوری
ایستگاه های متعدد مترو با یک شبکه  کامپیوتری به یکدیگر متصل شده اند و مسافر می تواند با کشیدن کارت  در ایستگاه
مبدا وارد وبا کشیدن آن درایستگاه مقصد خارج شود . شبکه کا مپیوتری استفاده شده این امکان را فراهم میسازد تا علاوه بر
کنترل درهای ورود و خروج مسافر ، هزینه سفر با توجه به مسافت بین دو ایستگاه مبدا و مقصد از کارت مسافر کسر شود.
 :RFID برخی از کاربردهای
 تقریبا درهمه جا ؛ از سیستم خودکار پرداخت بلیط  مترو تا کنترل ساعت ورود و خروج کار کنان RFID امروزه فناوری
سازمانها به چشم می خورد .سیستمهای ضدسرقت درفروشگاههای بزرگ  ، سیستمهای امنیتی هوشمند ، سیستمهای خودکار
 رزرو غذا ، در باز کن ها ی خودکار و ...  تنها برخی از موارد  کاربرد این  فناوری به شمار می روند . درادامه به  چند
 نمونه از آنها اشاره می کنیم  :
کنترل ورود و خروج وسایل نقلیه :
از جمله کاربردهای این فناوری کنترل ورود و خروج  و سایل  نقلیه به محل هایی است که امنیت ورود و خروج از اهمیت
ویژه ای بر خوردار است . این کار با چسباندن  یک برچسب  بر روی وسیله  نقلیه و ثبت اطلاعات مر بوط به آن در پایگاه
اطلاعاتی انجا م می گیرد . کارت خوان ها  نیز در محل های مناسب ، قبل از ورود و خروج وسایل نقلیه نصب می شوند تا
اطلاعات آنها را از طریق بر چسب نصب شده دریافت کنند. به این تر تیب اگر وسیله نقلیه مجازبه عبور باشد،راه عبور باز
می شود در غیر این صورت از ورود وخروج آن جلوگیری می شود .
مدریت کتابخانه ها:
مدیریت کتا بخا نه های بزرگ ، از جمله کاربردهای جالب این فنا وری است . با چسباندن یک بر چسب روی کتاب و قرار
 دادن اطلاعات آن در پایگاه اطلاعاتی کتابخانه ،همین طور نصب دستگا های کارت خوان در محلهای مناسب ، می توان از
 مزایای زیر بهره مند شد .
جلوگیری از سرقت کتابها
اجرای سیتم خودکار تحویل کتاب و حتی خروج آنها از کتابخانه در کمترین زمان  
مدیریت و پیگیری چیدمان کتابها در قفسه ها و جلو گیری از قرار گرفتن نا مناسب
: RF01Dآشنایی با ماژول
همان طور که اشاره شد ،هدف ما دراین پروژه ساخت یک سیستم در باز کن خودکار با استفاده از این فناوری است . در این
سیستم ابتدا شناسه کارتها درسیستم ذخیره می گردد و پس از آن با قرار دادن کارت در مقابل دستگاه  ،  در به طور خودکار
  انجام میگیرد .این ماژول برای شناسایی کارتهای غیرفعا ل RF01D باز می شود.این کار با استفاده ازماژول کارت خوان
طراحی وساخته شده است در ادامه ویژگیها و نحوه را ه اندازی و استفاده از آن را برسی می کنیم :
  با فرکانس کاری 125 کیلو هرتز برای کارت های غیر  فعال 64  بیتی است . RF01D   این ماژول ،  یک  کارت خوان
آنتن در نظر گرفته شده اند .   برای اتصال  A1 و  A2   این ماژول مجموعا دارای 12  پایه است که پایه های
آنتن استفاده شده درحقیقت یک سم پیچ 345 میکرو هانری است که روی ماژول نصب شده است.سایر پایه ها برا ی تغذیه ،
ار تباط  با ماژول وتنظیم مد کاری در نظر گرفته شده است .
1
5VDC
INPUT
DC 5V  POWER  SUPPLY  INPUT
2
CLK
OUT PUT
WIEGAND  26=D1   RS232=NC
3
DAT
OUT PUT
WIEGAND  26=D0   RS232=TXT
4
CP
OUT PUT
ABA
5
SW1
INPUT
MODE  SELECT 1
6
SW2
INPUT
OUT PUT  MODE  SELECT 2
7
SW3
INPUT
OUT PUT  MODE  SELECT 3
8
SW4
INPUT
MODE  SELECT 4
9
LED
OUT PUT
LED  OUT PUT
10
GND
INPUT
GROUNAD  INPUT
A1
ANT
OUT PUT /INPUT
ANTENNA COIL CONNECTION
A2
ANT
OUT PUT /INPUT
ANTENNA COIL CONNECTION
 
 
 
برخی از ویژگیهای مهم این ماژول :
فرکانس کاری 125 کیلو هرتز
تغذیه 5 ولت
RS232   و WIEGAND   امکا ن ارسال اطلاعات با دو استاندارد
فاصله 5 تا 15 سانتیمتر  برای دریافت اطلاعات از کارت      
زمان لازم برای خواندن اطلاعت کارت معادل  100 میلی ثانیه
آنتن  345 میکرو هانری همراه ماژول
  ،اطلاعات دریافتی از کارت  را با دو استاندارد گفته شده ارسال می کند  با مقدار دهی مناسب پایه های   RF01D ماژول
  می توان یکی از این دو استاندارد را انتخاب نمود .  SW3 و SW2
 
SW2
SW3
OUT PUT  MODE
0
1
RS 232
1
0
WIEGAND
 
 
 ، مدار زیر برای راه انداز ی ماژول به کار گرفته می شود  .RS232 در صورت استفاده از استا ندارد
 
، در این حالت ، اطلاعات  مربوط  به  شناسه  کارت را به شکل  یک  قاب داده  و آسنکرون ارسال می کند . RF01D
به این ترتیب با هربار کشیدن کارت ،یک بسته 14 بایتی شامل  10 بایت اطلاعات کارت یک بایت شروع ، یک بایت پایان
قبل از بایت پایانی ، ارسال می شود .  LF و CR دو بایت
 
STX   02H
DATA   )10BYTE(
CR  0DH
LF  0AH
ETX   03H
 
 میکرو کنترولر به راحتی می توان  اطلاعات  RXD  با استفاده از یک میکروکنترلر و اتصال پایه  دیتا از ماژول به  پایه
ارسالی توسط ماژول را دریافت کرد و عمل مناسب را انجام داد. نکته قابل توجه چگونگی تبدیل شناسه 64  بیتی کارت  به
یک شناسه 10 بایتی است . همانطور که اشاره شد ماژول  در نهایت یک بسته  10 بایتی را به عنوان شناسه کارت  ارسال
میکند؛حال آنکه شناسه کارتهای استفاده شده دراین پروژه،یک شناسه 64 بیتی است که مجموعا 8 بایت را شامل میشود. در
ادامه بامعرفی ساختار شناسه64 بیتی کارتها عملکردماژول رابرای تبدیل این شناسه به یک شناسه 10بایتی بررسی میکنیم.
شناسه 64 بیتی کار ت ها دارای ساختاری مطابق جدول زیر است ؛ 9  بیت اول آن همواره 1 می باشد و پس از آن 10خانه
5 بیتی قرار دارند که هر یک ، 4  بیت کد  ویک بیت توازن را در بر میگرند . در نهایت یک خانه 5 بیتی قرار دارد که به
طور کامل شامل بیت های توازن است . با توجه به این ساختار، شناسه اصلی این کارتها ، یک کد 40 بیتی است و می توان
از24 بیت دیگر( 9بیت اول  و15 بیت توازن ) پس از دریافت و بررسی صرف نظر کرد .
 
B0
B9
B14
B19
B24
B29
B34
B39
B44
B49
B54
B59-63
111111111     
10001
01001
11000
00101
10100
01100
11101
00011
10010
01010
11010
 
برسی بیتهای اول وبیتهای توازن بر عهده ماژول است . بیتهای اضافی پس از برسی حذف می شوند و40 بیت باقی مانده به
 0 استخرج می گردند. در نهایت هر یک از این 10 رقم به صورت یک کد اسکی   FH  صورت 10 رقم  4 بیتی بین 0 تا
یک بایتی ارسال می شوند . جدول زیر چگونگی این کار را نشان می دهد   .
 
1
1
1
1
1
1
1
1
1
ROW0=8
1
0
0
0
PD0=1
ROW1=4
0
1
0
0
PD1=1
ROW2=C
1
1
0
0
PD1=0
ROW3=2
0
0
1
0
PD3=1
ROW4=A
1
0
1
0
PD4=0
ROW5=6
0
1
1
0
PD5=0
ROW6=E
1
1
1
0
PD6=1
ROW7=1
0
0
0
1
PD7=1
ROW8=9
1
0
0
1
PD8=0
ROW9=5
0
1
0
1
PD9=0
 
PC1=1
PC1=1
PC2=0
PC3=1
0
 
میکروکنترلر  RXD استفاده شده است بنابراین پایه دیتا ازماژول به پایه  ATMEGA16  در این پروژه از میکرو کنترلر
متصل شده است .
    : code vision برنامه پروژه در محیط 
/*****************************************************
Project : RFID Door Opener
Version : 1
Author  : SMH
Chip type           : ATmega16
Program type        : Application
Clock frequency     : 12.000000 MHz
Memory model        : Small
Data Stack size     : 256
*****************************************************/
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <string.h>
#include <delay.h>
#include <stdio.h>
//------------------------------
#define door_open       PORTD.6
#define alarm           PORTD.7
#define yes_pin         PINC.2
#define no_pin          PINC.3
unsigned char s[15];
unsigned char s1[10];
unsigned char test[]="1400C0B82A";
unsigned char eeprom data_base[100]="0";
unsigned char valid_id;
int i=0;
int  j=0;
unsigned char yes_no_check;
bit start_flag=0,read_flag=0,up_down_flag=0,usart_flag=1;
//------------------------------------------------------
void show_eeprom(int block_number);
unsigned char  search_eeprom(void);
void check_in(void);
void set_up(void);
unsigned char delet_eeprom(int block_number);
unsigned char write_eeprom(int block_number);
unsigned char yes_no();
//-------------------------------------------
interrupt [USART_RXC] void usart_rx_isr(void)
{
  unsigned char usart_data;  
  usart_data=UDR;
  if(usart_flag)
  {
     if (usart_data==0x02) start_flag=1;
     if (start_flag&i<15)
        {  
         s[i]=usart_data;
         i++;
        }
     if (usart_data==0x03)
        {
         start_flag=0;
         read_flag=1;
         i=0;    
        }
  }     
}
//------------------------------------------
interrupt [EXT_INT0] void ext_int0_isr(void)
{
valid_id++;   
}
//-----------------------------------------
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTA=0x03;
DDRA=0x00;
PORTD=0x8C;
DDRD=0xC0;
//---------------------------
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;
TIMSK=0x00;
//---------------------------
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
for(j=0;j<10;j++)
{
   data_base[j+50]=test[j];    
}
check_in();
while (1)
  {
   if(read_flag)
   {      
    read_flag=0;
    usart_flag=0;
    //-----------------------------------------          
    switch(PINA&0x03)
     {
      //--------------------------Check in Mode              
      case 0:
            for(j=0;j<10;j++)
            {
             s1[j]=s[j+1]; 
            }
            valid_id=search_eeprom();       
            if(valid_id>=0&valid_id<10)
                {
                  door_open=1;
                  alarm=0;
                  lcd_clear();
                  lcd_putsf("Valid Card>NO.");
                  lcd_putchar(valid_id+0x30);
                  lcd_gotoxy(0,1);
                  for(j=0;j<10;j++)
                    {
                     lcd_putchar(s1[j]);
                    }   
                  delay_ms(100);      
                  alarm=1;
                  delay_ms(300); 
                  door_open=0;
                  check_in();     
                }
            else
                {
                  lcd_clear();
                  lcd_putsf("Invalid Card!");
                  delay_ms(200);
                  check_in();     
                }
      break;
      //------------------------------Setup Mode
      case 3: 
            for(j=0;j<10;j++)
            {
             s1[j]=s[j+1]; 
            }
            valid_id=search_eeprom();
            if(valid_id>=0&valid_id<10)
            {
              //------------------Exist Card
              lcd_clear();
              lcd_putsf("Already Exist:");
              delay_ms(300);
              lcd_gotoxy(0,1);
              lcd_putsf("NO.");
              lcd_putchar(valid_id+0x30);
              delay_ms(300);
              lcd_putsf("  ");
              for(j=0;j<10;j++)
                {
                 lcd_putchar(s1[j]);
                }      
              delay_ms(300);
              lcd_gotoxy(0,1);
              lcd_putsf("                 "); 
              lcd_gotoxy(0,1);
              lcd_putsf("Delete in ...");
              delay_ms(300);
              yes_no_check=yes_no();
              //yes_no_check=0;
              if(yes_no_check==0)
                  {
                   delet_eeprom(valid_id);
                   lcd_clear();
                   lcd_putsf("Block No: ");
                   delay_ms(300);
                  
                   lcd_putchar(valid_id+0x30);
                   delay_ms(300);
                   lcd_gotoxy(0,1);
                   lcd_putsf("Delete Complete!");
                   delay_ms(300);
                   set_up();
                  }
              else if(yes_no_check==1)
                  {
                   lcd_clear();
                   lcd_putsf("No delete!");
                   delay_ms(300);
                   set_up();
                  }     
            }
        else
            {
              //--------------------New Card
              lcd_clear();
              lcd_putsf("New Card:");
              delay_ms(300);
              lcd_gotoxy(0,1);
              lcd_putsf("Save in ...");
              delay_ms(300);
              yes_no_check=1;
  
              if(yes_no_check==1)
                  {
                   lcd_clear();
                   lcd_putsf("Select Block:");
                   delay_ms(300);
                   lcd_gotoxy(0,1);
                   valid_id=0;
                   lcd_putsf("Using UP ...");
                   delay_ms(500);
                   up_down_flag=1;
                   //valid_id=0;
                   show_eeprom(valid_id);
                   yes_no_check=1;
                   //yes_no_check=yes_no();
                   up_down_flag=0;
                   if(yes_no_check==1)
                       {
                        if(write_eeprom(valid_id))
                           {
                            lcd_clear();
                            lcd_putsf("Block No: ");
                            lcd_putchar(valid_id+0x30);
                            delay_ms(300);
                            lcd_gotoxy(0,1);
                            lcd_putsf("Save Complete!");
                            delay_ms(300);
                            set_up();
                           }
                       }
                   else if(yes_no_check==0)
                       {
                        lcd_clear();
                        lcd_putsf("No save!");
                        delay_ms(200);
                        set_up();
                       }   
                  }
              else if(yes_no_check==0)
                  {
                   lcd_clear();
                   lcd_putsf("No save!");
                   delay_ms(200);
                   set_up();
                  }                           
            }
      break;
      default:
              //------------------Not Allow Mode
              lcd_clear();
              lcd_putsf("Not Allow!");
              delay_ms(2000);
              check_in();                     
     }           
   }
   usart_flag=1;    
  };
}
//-------------------------------------
unsigned char search_eeprom()
{    
 unsigned char ret_val;
 int k,p;
 bit test_flag;
 for(p=0;p<10;p++)
     {
      ret_val=p;
      test_flag=1;  
      for(k=0;k<10;k++)
         if(s1[k]!=data_base[p*10+k])
            {
             ret_val=20;
             test_flag=0;
            }
      if(test_flag==1)
            break;                
     }                 
 return(ret_val);  
}
//-------------------------------------
void check_in(void)                    
{                                      
  lcd_clear();
  lcd_putsf("Welcome:");
  lcd_gotoxy(0,1);
  lcd_putsf(">>> Check in <<<");     
}
//-------------------------------------
void set_up(void)                    
{                                      
  lcd_clear();
  lcd_putsf("Setup:");
  lcd_gotoxy(0,1);
  lcd_putsf(">>Insert  Card<<");     
}
//-------------------------------------
unsigned char yes_no(void)
{        
 unsigned char yes_no_ret=0;
 while(yes_pin&no_pin)
     {
      delay_us(50);  
     }
 if(!yes_pin&no_pin)
     yes_no_ret=1;                    
 return(yes_no_ret);   
}
//-------------------------------------
unsigned char delet_eeprom(int block_number)
{   
 int i;
 for(i=0;i<10;i++)       
     {
      data_base[block_number*10+i]=0xFF;  
     }                                
 return(1);   
}
//-------------------------------------
unsigned char write_eeprom(int block_number)
{
 int i;
 for(i=0;i<10;i++)       
     {
      data_base[block_number*10+i]=0;  
     } 
 for(i=0;i<10;i++)       
     {
      data_base[block_number*10+i]=s1[i];  
     }                                
 return(1);
}
//-------------------------------------
void show_eeprom(int block_number)
{
 int i;
 lcd_clear();
 lcd_putsf("Block No>");
 delay_ms(300);
 lcd_putchar(block_number+0x30);
 delay_ms(300);
 lcd_gotoxy(0,1);
 lcd_putsf("ID>");
 for(i=0;i<10;i++)       
     {
      lcd_putchar(data_base[block_number*10+i]); 
     }
     delay_ms(200);                               
}
 
فلوچارت برنامه
 
سخت افزار پروژه :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
یکشنبه 18 اردیبهشت 1390 - 3:59:22 PM

ورود مرا به خاطر بسپار
عضویت در گوهردشت
رمز عبورم را فراموش کردم
آمار وبلاگ

20478 بازدید

4 بازدید امروز

2 بازدید دیروز

11 بازدید یک هفته گذشته

Powered by Gegli Social Network (Gohardasht.com)

آخرين وبلاگهاي بروز شده

Rss Feed

Advertisements