طراحی نرم افزار ساخت یک قفل الکترونیکی با استفاده از میکرو کنترلر AVR(ATMEGA8)

تعرفه تبلیغات در سایت
عنوان عکس
عنوان عکس
عنوان عکس
عنوان عکس
عنوان عکس

طراحی نرم افزار ساخت یک قفل الکترونیکی با استفاده از میکرو کنترلر AVR(ATMEGA8)

طراحی نرم افزار ساخت یک قفل الکترونیکی با استفاده از میکرو کنترلر AVR(ATMEGA8) 

 

 

چکیده :

در این پروژه پیرامون طراحی نرم افزار ساخت یک قفل الکترونیکی با استفاده از میکرو کنترلر AVR(ATMEGA8)  مطالبی چند به میان آمده است این قفل توانایی این را دارد که توسط سه نفر و با سه رمز رقمی متفاوت مورد استفاده قرار گیرد .

میکرو AVR  رمز را از یک صفحه کلید ماتریسی دریافت می کند و پس از نمایش برروی صفحه نمایشگر LCD  پس از مقایسه با رمز موجود در حافظه در صورت صحیح بودن رله ای را برای یک ثانیه فعال می کند و قفل باز می گردد هر یک از این کاربرها به راحتی

می توانند رمز مورد نظر خود را تغییر دهند و رمز دیگری را جایگزین آن کنند .

یک رمز 5 رقمی نیز به عنوان رمز SUPERVISER  تعریف شده است که در صورتی که یکی از کاربرها رمز خود را فراموش کرد می تواند با وارد کردن آن سه رمز دیگر را صفر کند و کاربرها می توانند با مراجعه  دوباره رمز مورد نظر خود را وارد کنند و پیغام های میکرو نیز در هر مرحله با توجه به کلید فشار داده شده بر روی صفحه نمایشگر LCD  نمایش داده

می شود .

در این پروژه در معرفی به نحوه کار با میکرو کنترلر AVR پرداخته شده است و سپس طراحی مدار و نرم افزار قفل آمده است که در آن نحوه عملکرد مدار ، نقشه شماتیک  مدار معرفی زیر برنامه ها و در نهایت مجموعه متن نرم افزار بیان گردیده است .

 

مقدمه :

مختصری راجع به AVR

زبانهای سطح بالا یا همان HLL (HIGH Level Language) به سرعت در حال تبدیل شدن به زبان برنامه نویسی استاندارد برای میکرو کنترلرها (MCU) حتی برای میکروهای 8 بیتی کوچک هستند زبان برنامه نویسی C و BASIC  بیشترین استفاده را در برنامه نویسی میکروها دارند ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید می کنند .   

ATMEL  ایجاد تحولی در معماری جهت کاهشی کد به مقدار مینیمم را درک کرد که نتیجه این تحول میکروکنترلرهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در یک کلاک سیکل توسط معماری RISC انجام می دهند و از 32 رجیستر همه منظوره استفاده می کنند که باعث شده 4 تا 12 بار سریعتر از میکروهای مورد استفاده کنونی باشند .

تکنولوژی حافظه کم مصرف غیر مدار شرکت ATMEL  برای برنامه ریزی AVR ها مورد استفاده قرار گرفته است در نتیجه حافظه های FLASH و EEPROM  در داخل مدار قابل برنامه ریزی (ISP) هستتد میکرو کنترلرهای اولیه AVR  دارای 1 و 2 و3 کیلوبایت حافظه FLASH  و به صورت کلمه 16 بیتی سازماندهی شده بودند .

AVR ها به عنوان میکرو RISC  با دستورات فراوان طراحی شده اند که باعث می شود حجم کد تولید شده کم و سرعت بالاتری بدست آید .

 

خصوصیات (ATMEGA 8) 

-       از معماری AVR RISC  استفاده می کند .

-       دارای 16 دستورالعمل با کارآیی بالا که اکثرا ً تنها در یک کلاک سیکل اجرا می شوند

-       8*32  رجیستر کاربردی

-       سرعتی تا 6m/ps ( در فرکانس 6mhz)

-       حافظه ، برنامه و داده غیر فرار

-       BK  بایت حافظه FLASH  داخلی قابل برنامه ریزی

-       پایداری  حافظه FLASH  : قابلیت 1000 بار نوشتن و پاک کردن

-       1024 بایت حافظه داخلی SDRAM

-       512 بایت حافظه EEPROM  داخلی قابل برنامه ریزی

-       پایداری حافظه EEPROM : قابلیت 10000 بار نوشتن و پاک کردن

-       قفل برنامه FLASH  و حفاظت EEPROM

 

خصوصیات جانبی

-       دو تایمر – کانتر 8 بیتی با PRESCALER  مجزا و دارای مد COMPARE

-       یک تایمر – کانتر 16 بیتی با PRESCALER  مجزا و دارای COMPARE و CAPTURE

-       3 کانال PWM

-       3 کانال مبدل ، آنالوگ به دیجتال در بسته بندی های TQFP و MLF

-       6 کانال با دقت 10 بیتی

-       2 کانال با دقت 8 بیتی

-       6 کانال مبدل آنالوگ به دیجیتال در بسته بندی های PDIP

-       4 کانال با دقت 10 بیتی

-       2 کانال با دقت 8 بیتی

-       دارای RTC  با اسیلاتور مجزا

-       یک مقایسه کننده آنالوگ داخلی

-       USART سریال قابل برنامه ریزی

-       WATCHDOG  قابل برنامه ریزی با اسیلاتور داخلی

-       ارتباط سریال SPT  برای برنامه ریزی داخل مدار

-       قابلیت ارتباط با پروتکل سریال دو سیمه

-       قابلیت ارتباط سریال SPI به صورت MASTER یا SLAVE

 

خصوصیات ویژه میکروکنترلر

-       POWER – ON RESET CIRCUIT

-       دارای 5 حالت Sleep (ADC Noise و IDEL و STANDBY  و POWER DOWN  و POWER – SAVE  و REDUCTION )

-       منابع وقفه ( INTERRUPT) داخلی و خارجی

-       دارای اسیلاتور RC  داخلی کالیبره شده

-       عملکرد کاملا ً ثابت

-       توان مصرفی پایین و سرعت بالا توسط تکنولوژی CMOS

-       توان مصرفی در 25a,3V,4MHZ

-       حالت فعال 3.6 MA

-       در حالت غیر فعال 1.0MA

-       ولتاژهای عملیاتی ( کاری )

2.7V  تا 5.5  برای (ATMEGA 8L)

4.5V  تا 5.5  برای (ATMEGA8)

-       فرکانس کاری

0MHZ تا 8MHZ برای (ATMEGA 8L)

0MHZ تا 16MHZ برای (ATMEGA8)

-       خطوط I/O و انوع بسته بندی

23 خط ورودی / خروجی قابل برنامه ریزی

28 پایه PDIP و 32 پایه TQFP و MLF

 

بخش دوم / عملکرد قفل :

این قفل بوسیله سه رمز پنج رقمی که از صفحه کلید دریافت می کند عمل می کند چناچه رمز صحیح باشد یعنی با رمز موجود در حافظه EEPROM  برابر باشد کاربر می تواند با انتخاب گزینه مورد نظر رمز خود را تغییر دهد یا قفل را باز کند کلیه مراحل کار با دستگاه ، متناسب با کلید فشار داده شده بر روی صفحه نمایشگر LCD  نمایش داده می شود .

اگر در هنگام روشن شدن دستگاه کلید Ok گرفته شود دستگاه از کاربر یک رمز که مربوط به SUPERVISER است درخواست می کند که با وارد کردن آن و در صورت درست بودن ، میکرو کلیه رمزها را صفر می کند این برای این است که اگر یکی از کاربرها رمز خود را فراموش کرد با استفاده از این روش بتواند دوباره رمز خود را وارد کند .

در حالت عادی با روشن شدن دستگاه بر روی صفحه نمایش عبارت ENTER USER NUMBER  نقش می بندد و از کاربر می خواهد USER خود را وارد کند وقتی  USER وارد شد از او می خواهد PASSWORD  را وارد کند با وارد کردن هر عدد بر روی صفحه نمایش یک * ظاهر می شود و در پایان با فشار دادن کلید OK اگر رمز درست بود بر روی صفحه نمایشگر عبارت WELCOM USER  نقش می بندد و سه گزینه EXIT/CHANGE/OPEN  برای کاربر نشان داده می شود که با انتخاب OK می تواند در را باز کند و با انتخاب CHANGE می تواند رمز را تغییر دهد و با انتخاب ESC  از صفحه MENU خارج می شود .

 

تشریح سخت افزار مدار :

نحوه اتصال پورتها :

PB.1 : متصل به بوبین رله

PD.0 : و PD.1 :  و PD.2 : و PD.3 : (متصل به چهار ستون صفحه کلید )

PD.4 : و PD.5 : و PD.6 : و  PD.7: ( متصل به چهار سطر صفحه کلید )

 

PC.5 : متصل به پایه RS صفحه نمایشگر LCD

PC.4 : متصل به پایه E  صفحه نمایشگر LCD

PC.3 : متصل به پایه DB7 صفحه نمایشگر LCD

PC.2  : متصل به پایه DB6  صفحه نمایشگر LCD

PC.1 : متصل به پایه DB5 صفحه نمایشگر LCD

PC.0 : متصل به پایه DB4 صفحه نمایشگر LCD

 

قرار گرفتن ARMEGA 8  در مدار :

 

پایه 7 به ولتاژ مستیم پنج ولت وصل شده است وپایه های 22 و  8  به زمین متصل می  گردند وسایر پایه ها نیز مطابق آنچه در اتصال پورتها گفته شد به صفحه نمایشگر و صفحه کلید و بوبین رله متصل می شوند .

میکرو کنترلر AVR  برخلاف سایر میکرو کنترلرهای موجود دارای یک اسیلاتور RC داخلی می باشد در این مدار نیز از اسیلاتور داخلی میکروکنترلر استفاده شده است و به پایه های 10 و 9 که برای استفاده از اسیلاتور کریستال خارجی و اسیلاتور RC خارجی و ... است هیچ المانی متصل نگردیده است .

 

مدار تغذیه ورودی :

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

در این مدار از یک  رگلاتور 7805 استفاده شده است که این رگلاتور ، ولتاژهای بالاتر از پنج ولت را به گرما تبدیل می کند و به این ترتیب ولتاژ را تثبیت می نماید .

وجود خازنها هم برای آنست که از ورود نویزهای فرکانس بالای برق شهر و تأثیرگذاری بر روی ولتاژ ورودی مدار جلوگیری به عمل آید و همچنین برای تثبیت هر چه بیشتر ولتاژ به کار برده شده است .

 

اتصال صفحه کلید :

صفحه کلید ، یک صفحه کلید ماتریسی 4*4  است که ستونهای آن به پایه های PD.0 ، PD.1 ،PD.2 ، PD.3  متصل شده اند و چهارسطر آن به پایه های PD.6 ، PD.5 ، PD.4 ، PD.7  وصل گردیده اند .

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

 

اتصال رله :

رله استفاده شده در مدار یک رله 12 ولت است که جریان آن توسط یک مدار تقویت کننده جریان امیتر مشترک  ، تامین می گردد ولتاژ حدود 12 ولت مستقیما ً از خروجی به یک سر بوبین رله وصل می گردد و سر دیگر بوبین ، با یک شدن پایه میکرو ودر نتیجه روشن شدن ترانزیستور مذکور ، زمین می گردد و این به معنای روشن شدن رله است .

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

نوع این دیود از نوع ژرمانیوم می باشد تا ولتاژی که دو سر آن افت می کند ناچیز باشد و ترانزیستور روشن شود.

پس از شروع برنامه و معرفی IC  میکروکنترلر مورد استفاده در مدار و همچنین فرکانس کریستال داخلی میکرو کنترلر ، صفحه کلید و صفحه نمایشگر LCD  برای میکرو کنترلر تعریف می شود .

میکرو AVR  برخلاف میکروهای دیگر به خاطر استفاده از زبان سطح بالا دیگر نیاز به زیر برنامه ای مخصوص برای تعریف صفحه کلید و همچنین صفحه نمایشگر LCD  ندارد و به راحتی با تعیین پورت متصل به صفحه کلید  و تعیین پایه های مورد استفاده برای صفحه نمایشگر LCD  و همچنین نوع آن قادر به شناختن آن است وبا چند برنامه مختصر به راحتی می توان از آنها استفاده کرد .

 

برچسب SUPERVISER :

این برچسب برای SUPERVISER  تعریف شده است بدین صورت که اگر استفاده کنندگان رمز مورد نظر خود را فراموش کردند می توانند در هنگام روشن شدن قفل کلید OK  را فشار داده تا بدین صورت وارد برچسب SUPERVISER  شوند .

رمز تعریف شده برای SUPERVISER  یعنی P=12345  وقتی که رمز مورد نظر وارد شد هر سه رمز سه استفاده کنندگان برابر صفر می گردد که آنها می توانند با تغییر رمز خود ، رمز مورد دلخواه خود را وارد کنند .

در حالت عادی برنامه از برچسب STARTTCLS  شروع می شود و پس از پاک کردن صفحه نمایشگر LCD ، بر روی صفحه نمایش از استفاده کننده می خواهد USER مورد نظر خود را انتخاب کند در برچسب CHEKEY1 ، USER  مربوطه ای که از صفحه کلید انتخاب شده مورد بررسی قرار می گیرد و رمز مربوط به USER  انتخاب شده در PASSWORD  قرار می گیرد سپس در برچسب ENTPASS  از USER می خواهد تا PASSWORD  خود را وارد کند اگر PASSWORD  اشتباه بود تا سه بار می تواند PASSWORD  صحیح را وارد کند ولی اگر PASSWORD   درست بود به برچسب WELCOM می رود و بر روی صفحه نمایشگر LCD ضمن خوشامدگویی به USER سه گزینه برای وی نمایش می دهد :

(EXIT/CHANGE/OPEN)

چنانچه USER  کلید EXIT  را بزند به ابتدای برنامه یعنی برچسب STARTTCLS  می رود ولی اگر USER  کلید CHANGE  را بزند به زیربرنامه CHANGE می رود و در آنجا USER می تواند رمز خود را تغییر دهد اگر USER کلید Ok  را فشار دهد پس از رفتن به زیربرنامه BEUTIFULER  و بازگشت از آن به مدت یک ثانیه رله را وصل می نماید وقفل باز می گردد .

بخش سوم / تشریح زیربرنامه ها :

زیربرنامه BEUTIFULER :

این زیربرنامه فقط برای زیبایی طرز کار قفل در نظر گرفته شده است بدین صورت که پس از انتخاب گزینه OPEN برای باز کردن قفل مورد نظر قفل بلافاصله باز نمی شود بلکه پس از یک مکث چند ثانیه ای و نمایش دادن چند نقطه بر روی صفحه نمایشگر LCD  قفل باز می شود .

زیربرنامه LOGO  :

قبل از اجرای  زیربرنامه یک خط برنامه برای تبدیل اعداد صفحه کلید به اعداد دلخواه ما  نوشته شده است زیرا میکروی AVR اعداد صفحه کلید را به ترتیب از 15-0 در نظر می گیرد و برای تبدیل شدن به فرم دلخواه ما باید ابتدا این خط برنامه نوشته شود .

این زیربرنامه برای گرفتن PASSWORD   مورد استفاده  قرار می گیرد یعنی هر جا که از USER خواسته شد PASSWORD  خود را وارد کند به این زیر برنامه می آید  و در آن پس از تبدیل کلید های زده شده به فرم دسیمال ( دهدهی ) آن ، عدد وارد شده را نیز در یک متغیر ذخیره می کند .

زیربرنامه COMP :

این زیربرنامه برای مقایسه رمز وارد شده توسط USER بوسیله صفحه کلید و همچنین رمز ذخیره شده در هر یک از مکانهای حافظه ای که به هر USER اختصاص دارد به کار می رود چنانچه رمز مورد نظر اشتباه باشد به برنامه اصلی برگشته و در برنامه اصلی از USER می خواهد دوباره این رمز را وارد نماید چنانچه USER رمز را تا سه مرتبه اشتباه وارد نماید این زیربرنامه پس از نمایش SORRY!!  بر روی صفحه نمایشگر LCD  به ابتدای برنامه باز می گردد و چنانچه رمز درست بود نیز به برنامه اصلی باز می گردد و به برچسب WELCOM می رود .

زیربرنامه CHANGE :

این برنامه برای تغییر رمز مورد نظر USER  به کار می رود .

در مرحله اول از USER  خواسته می شود تا رمز قبلی خود را وارد کند چنانچه رمز اشتباه بود تا سه بار امکان وارد کردن رمز قبلی را دارد و اگر رمز درست بود از USER  خواسته می شود که رمز جدید خود را وارد کند و سپس دوباره از او خواسته می شود تا رمز جدید خود را تکرار نماید که اگر رمز تکرار شده با رمز جدید متفاوت بود بر روی صفحه نمایشگر LCD  عبارت DIFFERENT PASS !!  نمایش داده می شود و از USER  خواسته می شود تا رمز جدید خود را دوباره تکرار نماید  ولی اگر رمز تکرار شده با رمز جدید برابر بود رمز وارد شده در مکان حافظه اختصاص داده شده به USER مربوطه قرار می گیرد و رمز تغییر پیدا می کند .

 

$regfile = " m8def.dat"

$crystal = 1000000

Config Lcdpin = pin , db4=portc.3,db5=portc.2,db6=portc.1,-          

Db7=portc.0 , E= portc.4 , Rs= Portc.5

Config Lcd=16*2

Config kbd=portd,Debounce =1 , Delay = 1

Config pinb.1 = output

Declare Sub Comp

Declare Sub Logo

Declare sub change

Declare sub beutifuler

Dim A As Byte , number As  Byte , B As Byte , B1 As Byte , c As Byte , -

Length As Byte

Dim Password As Long , P0 As Eram Long , p1 As Eram Long , p2 As Eram Long , p3 As Eram Long

Dim E1 As Long , E As Long , G As Byte , Enew As Long , Key As Byte ,Comper As Byte

Dim Erep As Long

Relay Alias Portb.1

Reset Relay                                                       ‘relay off

Main:

P0=12345                                                ‘superviser password

Waitms 4                                                 ‘eeprom

Superviser :

A=Getbd( )

If A 15 Then Goto Starttcls                         ‘press Enter

Password=P0

Cls

Lcd “Superviser Pass: “

Locate 2,5

Cursor Blink

Call Logo

If Key = “esc” Then Goto Superviser                ‘Esc

Call Comp

 If comper = “ sorry “ Then                                ‘SORRY

 Goto Superviser

Elseif comper = “ invalid “ Then

Goto Superviser                                        ‘INVALID   

Else

Endif

P1=0

Waitms 4

P2= 0

Waitms 4

P3= 0

Waitms 4

Starttcls:

G= 0                                                                     ‘start & cls

 Cls                                                                      ‘ for no pet pet

Startt:

Cursor Noblink

Locate 1 , 7

Lcd “ Enter “

Locate 2 , 4

Lcd “ User Number”

Cursor off

Chekey1:

A= Getkbd( )

If A>15 Then Goto Chekey1

Select case A

Case 3:Number = 1

Password=P1                                           ‘user1

Case 7: Number =2

Password=P2                                           ‘user2

Case11:Number=3                                                                                          Password=P3                                            ‘user3

Case Else :jmp startt                                                                                End select                                                                                            

Entpass:                                                                                                   

 Cls                                                                                                          Locate 1,6                                                                                              Lcd “user” ; number

 Locate 2,1

 Lcd “password: “                                                                                Cursor Blink            

 Call Logo                                                                                                IF key = “esc” Then Goto Starttcls                       ‘ESC                   Call Comp                                                              ‘Ok                        IF COMPER = “SORRY “ Then                                                          Goto Starttcls                                                          ‘SORRY                    Elseif comper = “ invalid” Then                           ‘INVALID        Goto Entpass                                                                                           Else                                                                                                 

           Endif                                                                                                       Welcom:                                                                                                 

 Cls                                                                         ‘true                   Lcd “welcome user “ ; number

 Locate 2 , 1

 Lcd “Exit / change / open”

Chekey2:                                                                      

A=Getbd( )

IF A>15 Then Goto chekey2

Select case A

Case 12: Goto starttcls                                        ‘Esc

Case15:                                                                ‘Ok

Call Beutifuler

Set Relay

Cls                                                               ‘open door

Lcd “ welcom !!!!  “

Wait 1

Reset Relay

Wait 2

Goto starttcls

Case 14: Call change                                              ‘change

Case Else :jmp Chekey2

End select

End

Sub change :

Cls

Cursor Blink

Lcd “ change password”

Locate 2, 1

Lcd “ old pass : “

Call Logo

IF Key =”esc” Then Goto Welcom                         ‘Esc

Call comp                                                                 ‘ok

If comper= “sorry” Then                                         ‘sorry

Goto starttcls

Elseif comper = “ invalid “ Then                             ‘INVALID

Goto change

Else

Endif

Newpass :

Cls                                                                            ‘True

Cursor Blink

Lcd “ new pass : “

Call Logo

Enew = E

IF key = “esc” Then Goto change                         ‘Esc

Reppass :

Cls

Cursor Blink

Locate 2 , 1

Lcd “ rep pass : “

Call Logo

Erep = E

IF key=”esc” Then Goto change                             ‘Esc

If Enew = Erep Then

Goto Truerep

Else

Cls

Lcd “different”

Locate “ pass !!!!”

Wait 1

Jmp reppass

Endif

Truerep :

If number = 1 Then

P1=E

Waitms 4                                                         ‘eeprom

Elseif  number = 2 Then

P2 =E

Waitms 4                                                         ‘eeprom

Else P3=E

Witms 4   ‘eeprom

End if

Cls

Lcd “changed”

Locate 2 ,7

Lcd “password!!!”

Wait 1

Goto welcom

End sub

Sub Beutifuler :

Cls                                                                             ‘open

Cursor Noblink                                                          ‘Beutifuler

Locate 1 , 6

Lcd “ .”

Waitms 200

Locate 1,6

Lcd “ ..             “

Waitms 200

Locate 1,6

Lcd “ …            “

Waitms 200

Locate 1,6

Lcd “ ….           “

Waitms 200

Locate 1,6

Lcd “ …..           “

Waitms 200

Cls

Locate 1,6

Lcd “.                 “

Waitms 200

Locate 1,6

Lcd “..                “

Waitms 200

Locate 1,6

Lcd”…                “

Waitms 200

Locate 1,6

Lcd “….             “

Waitms 200

Locate 1,6

Lcd “….. “

End sub

Keydata :

Data 1,2,3,10,4,5,6,11,7,8,9,12,13,0,14,15

Sub Logo:

Length = 0

Key=0

Chekey:

B=Getkbd( )

If B >15 Then Goto chekey

Rep:

C=Getkbd( )

If c>15 Then Goto Norep

Jmp Rep

Norep:

B1=Lookup(b,keydata)                          ‘convert key to standard

Select case B1

    Case 13:                                             ‘esc

Key = “esc”

Exit sub

      Case 15:                                           ‘ok

If Length

Key=”ok”

Exit sub                                                            

      Case 0 to 9:                                      ‘number 0-9

Incr Length

If Length>5 Then Goto chekey

Lcd “ * “

Select case Length                        ‘convert input key decimal

Case1:E=10000 *B1

Case2:E1=1000*B1

E=E+E1

Case3:E1=100*B1

E=E+E1

Case4:E1=10*B1

E=E+E1

Case Else : E=E+B1

Cursor Noblink

End select

Case Else :jmp chekey

Ens select

Goto chekey

End sub

Sub Comp:

‘I=0(SORRY),I=1(INVALID),I=2(TRUE)

‘compar input code by password

If E=password Then jmp True

Cls

Lcd “INVALID!!!”

Wait 1

Incr G

If G=3 Then                                               ‘exit  if false pass for time

Cls

Lcd “      sorry!”

Wait 1

Comper =”sorry”

Else

Comper =”invalid”

End if

Exit sub

True :

Comper = "True”

End sub

نویسنده : بازدید : 0 تاريخ : چهارشنبه 24 آبان 1396 ساعت: 12:57