سلام
برنامه ماشین حسابی که 2 عدد را گرفته و 4 عمل اصلی را انجام دهد.
اگر هم تقسیم بود فرض که عدد اول بزرگتر از عدد دوم می باشد
کامپیتور هستیم
برنامه ماشین حساب
شماتیک:
برنامه:
1) $regfile = "m16def.dat"
2) $crystal = 1000000
3) Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , Rs = Portc.0 , E = Portc.1
4) Config Lcd = 16 * 2
5) Cursor Off
6) Config Timer0 = Timer , Prescale = 8
7) Enable Interrupts
8) Enable Ovf0
9) On Ovf0 _keypad
10) Config Portd = Output
11) Config Kbd = Portd , Debounce = 50
12) Dim Alfa As Long , A As Byte , B As Byte
13) Dim Beta As Long , Delta As Long
14) Dim Final As Single
15) Dim Pad As Byte , Cheker As Byte , Ejaze As Bit
16) Dim X As String * 1
17) Declare Sub Adder
18) Declare Sub Part1
19) Deflcdchar 1 , 32 , 32 , 4 , 32 , 31 , 32 , 4 , 32
20) Deflcdchar 2 , 32 , 32 , 32 , 17 , 10 , 4 , 10 , 17
21) Main:
22) Alfa = 0 : Beta = 0 : Delta = 0
23) A = 1 : Cheker = 0 : Final = 0
24) Pad = 16 : Ejaze = 0
25) Cls
26) Home : Lcd "0"
27) Do
28) Select Case Pad
29) Case Is < 10
30) Call Adder
31) Case 10
32) jmp main
33) Case 12
34) Call Part1 : Cheker = 1 : X = Chr(1(
35) Locate 1 , 16 : Lcd X
36) Case 13
37) Call Part1 : Cheker = 2 : X = Chr(2)
38) Locate 1 , 16 : Lcd X
39) Case 14
40) Call Part1 : Cheker = 3 : X = "-"
41) Locate 1 , 16 : Lcd X
42) Case 15
43) Call Part1 : Cheker = 4 : X = "+"
44) Locate 1 , 16 : Lcd X
45) End Select
46) If Pad = 11 Then
47) Select Case Cheker
48) Case 1
49) Final = Delta / Beta
50) Case 2
51) Final = Delta * Beta
52) Case 3
53) Final = Delta - Beta
54) Case 4
55) Final = Delta + Beta
56) End Select
57) If Final > 999999999 Then
58) Cls : Locate 1 , 7 : Lcd "error"
59) Do
60) Loop Until Pad = 10
61) jmp main
62) End If
63) Cls
64) Home : Lcd Delta ; X ; Beta ; "="
65) Home L
66) Lcd Fusing(final , "#.&&&")
67) Set Ejaze
68) Delta = Final
69) Waitms 500
70) End If
71) Loop
72) End
73) Adder:
74) B = Pad
75) Alfa = Beta * A
76) Beta = Alfa + B
77) Waitms 200
78) A = 10
79) Home : Lcd " "
80) Home
81) Lcd Beta
82) Return
83) Part1:
84) If Ejaze = 0 Then
85) Delta = Beta : End If
86) Waitms 150 : A = 1 : Alfa = 0 : Beta = 0 : Home
87) Return
88) _keypad:
89) Pad = Getkbd()
90) Pad = Lookup(pad , Dat)
91) Return
92) Dat:
93) Data 7 , 4 , 1 , 10 , 8 , 5 , 2 , 0 , 9 , 6 , 3 , 11 , 12 , 13 , 14 , 15
توضیحات برنامه:
درخط1 تراشه مورد نظرمعرفی شده.درخط2مقدارکریستال.خط3پیکربندی ال سی دی که به پورت سی وصل شده درخط4نوع ال سی دی مشخص شده که ال سی دی 2*16 می باشددرخط5کرزرال سی دی خاموش می شود.درخط6پیکربندی تایمر0می باشد که تقسیم فرکانس آن 8 می باشد این دستورمقدار کریستال برنامه را به 8تقسیم می کند زمانی که ازاین تایمربدست میآید256میلی ثانیه است علت استفاده تایمربه این خاطراست که هر256 میلی ثانیه به برچسب کی پد پرش کرده وکی پد فراخوانی شده وورودی را میگیردتوسط دستورگت کی پد .سپس توسط جدول خط 90عددموردنظربرگشت داده می شودمثلااگرکی پدعدد0 رابرگشت دهدجدول لوک آپ عدد7رابرگشت می دهدجدول موردنظربه برچسب دت پرش کرده وعددرابرگشت داده مثلا همان عدد7 را.این مرحله ی پرش به برچسب توسط دستورخط9مشخص شده.چون این پرش توسط آورفلوی تایمر0 انجام می شود بایدابتداوقفه ی سراسری فعال شود درخط7 سپس فعال سازی آورفلو یاهمان سرریزتایمر0 که درخط8 انجام شده.درخط10پیکربندی پورت دی به عنوان خروجی است.درخط بعد(11)پیکربندی کی پد می باشدکه به پورت دی متصل است ازخط12 تا16تعریف متغیرهای برنامه می باشد.خط 17 معرفی یک زیر برنامه به نام ادرمی باشد ای زیر برنامه تشخیص یکان ودهگان و...اعداد وارد شده می باشدکه درجای خودتوضیح داده خواهد شد کلا زیر برنامه هابعدازپایان برنامه روتین آن هامعرفی می شود.خط18 هم معرفی زیر برنامه است به نام پارت1.این زیر برنامه مقادیروارد شدهی اولیه راقبل از وارد شدن عملگری وارد متغیرجدیدی می کند.زمان اجرای آن درپایین توضیح داده خواهد شد.خط19 و20 فارس ساز کردن2 دستورتقسیم وضرب می باشدکه باشماره ی1 یعنی تقسیم و2 ضرب مشخص شده است.خط21 تا24روتین برچسب مین اجرامی شودکه مقداردهی متغیرهاست این برچسب 1باراجرامیشود چون قبل ازحلقه ی تکرار است مگراینکه دوباره صدازده شود.خط25 دستورش صفحه ی ال سی دی راپاک می کندخط26درسطراول ستون اول کاراکتر0 رانمایش می دهد.خط 27 اجرای حلقه ی ابداست که با دستور خط71 پایان می پذیرد روتینی که بین این 2 دستور قرار می گیردهمیشه اجرا خواهد شد.خط 28تا45 بدنه ی دستورکنترلی سلکت است در این بدنه مقدارگرفته شده توسط کی پد که در متغیر پد ریخته شده را چک می کنداگرمقدارپد0تا9 باشد زیربرنامه ادر اجرا میشودکه عمل تشخیص یکان ودهگان و...اعداد وارد شده می باشد(خط29و30)اگرپد10 باشد پرش می کند به برچسب مین.مقدار10 یعنی همان کلید صفرکردن ماشین حساب که همه ی متغیرهامقداراولیه می گیرند.اگرپد12 باشدعمل تقسیم می باشد ودرال سی دی نمایش داده می شوددراین حال متغیری به نام چکر مقدارمیگیرد این برای تشخیص عمل دردستورسلکت بعدی است واگرپد13 یا14 یا15 باشد به ترتیب عمل ضرب سپس تفریق سپس جمع طی مراحل گفته شده انجام میشود.درهرمرحله متغیرچکرمقدار متفاوتی میگیردمثلادر کیس 14 مقدارش 3 می باشد.بعدازتمام شدن سلکت درخط45دستورایف بررسی می شودکه میگویداگرمقدارمتغیرپد11بودسلکت زیر راانجام بده.پد11 همان کلید مساوی درروی ماشین حساب است که بافشاردادن آن بایدعملیات آخرراانجام دهداین سلکت عملیات مورد نظررا توسط مقدارچکرکه درسلکت قبلی مقداردهی شده بود راتشخیص داده وجواب نهایی رامحاسبه می کند.خط47 تا56 بدنه ی این سلکت است.لازم به ذکراست که اولین مقدار وارد شده در متغیردلتا ودومین عدد وارد شده در بتا ریخته می شودوحاصل مورد نظر درمتغیرفینال.خط48 میگوید اگر مقدارچکر1بود عمل تقسیم راانجام بده اگر2بودضرب اگه 3 بودمنها اگه 4 بودجمع راانجام بده.خط57میگویداگرمقدارجواب بزگترازمقدارگفته شده شد کلمه ی ارور رانمایش بده سپس دریک حلقه ی ابد افتاده وتازمانی که کلید صفرکردن ماشین حساب فشرده نشده خارج نشو وهمچنان ارور را نمایش بده(خط 57تا62).درخط63 ال سی دی پاک شده ودر64کل عبارت چاپ میشود مثلا: 6=2+4
درخط66نوع فرمت نمایش خروجی مشخص شده که تا3 رقم اعشار می باشد.درخط72برنامه به پایان میرسدازخط73 تا93زیربرنامه ها می باشد که در بالا توضیح داده شد.
موفق باشین