PDA

View Full Version : سوال: برنامه ماشین حساب با bascom



nilofar9925
جمعه 24 اردیبهشت 1389, 09:36 صبح
سلام بر دوستان عزیز میخاستم ببینم کسی برنامه ماشین حساب اعشاری رو نداره من خودم یه معمولیش رو دارم که اینجا میذارم


$[
regfile = "m16def.dat"
$crystal = 1000000

Config Kbd = Portd , Debounce = 30
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.3 , E = Portb.2

Dim A As Byte
Dim B As Byte
Dim Key As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim F As Byte

Cls
Cursor Off
Locate 2 , 1
Lcd "avrprojects.info"
E = 0
B = 0

Q:
Waitms 200
'B = 0
A = Getkbd()
If A > 15 Then
Goto Q
Else
Key = Lookup(a , Dta)
If Key <= 9 Then
D = 0
B = 10 * B
B = B + Key
If E = 0 Then C = B
If E = 1 Then D = B
Cls : Lcd B
Elseif Key = 10 Then
Cls
F = 1
E = 1
B = 0
Elseif Key = 11 Then
Cls
E = 1
F = 2
B = 0
Elseif Key = 12 Then
Cls
E = 1
F = 3
B = 0
Elseif Key = 15 Then
Cls
E = 1
F = 4
B = 0
Elseif Key = 13 Then
Cls
E = 0
B = 0
Elseif Key = 14 Then
If E = 1 Then
Cls
Select Case F
Case 1 :
B = C / D
Case 2:
B = C * D
Case 3:
B = C - D
Case 4:
B = C + D
End Select
Lcd B

End If
End If
End If
Locate 2 , 1
Lcd "avrprojects.info"

Goto Q
End
Dta:
Data 7 , 8 , 9 , 10 , 4 , 5 , 6 , 11 , 1 , 2 , 3 , 12 , 13 , 0 , 14 , 15

nilofar9925
جمعه 07 خرداد 1389, 16:40 عصر
سلام من این برنامه رو به اعشاری تغییر دادم ولی مشکلی که داره اینه که به جای 3.2
3.1999 نشون میده کسی نمیدونه چیکار کنم درست بشه





$regfile = "m16def.dat"
$crystal = 1000000

Config Kbd = Portd , Debounce = 30
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.3 , E = Portb.2

Deflcdchar Print , 16 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0)

Dim A As Byte
Dim B As Single
Dim Key As Byte
Dim C As Single
Dim D As Single
Dim E As Byte
Dim F As Byte
Dim Flag As Byte
Dim H As Single
Dim H2 As Single

Cls
Cursor Off
Locate 2 , 1
Lcd "avrprojects.info"
E = 0
B = 0
Flag = 0
H = 1
H2 = 0

Q:
Waitms 200
'B = 0
A = Getkbd()
If A > 15 Then
Goto Q
Else
Key = Lookup(a , Dta)
If Key <= 9 And Flag = 0 Then
D = 0
B = 10 * B
B = B + Key
If E = 0 Then C = B
If E = 1 Then D = B
Cls : Lcd B

Elseif Key <= 9 And Flag = 1 Then
Cls
H = H * 0.1
H2 = H * Key

B = B + H2

Lcd B
If E = 0 Then C = B

If E = 1 Then D = B

Elseif Key = 10 Then
Cls
Flag = 0
F = 1
E = 1
B = 0
Elseif Key = 11 Then
Cls
Flag = 0
E = 1
F = 2
B = 0
Elseif Key = 12 Then
Cls
Flag = 0
E = 1
F = 3
B = 0
Elseif Key = 15 Then
Flag = 1

Elseif Key = 13 Then
Cls
Flag = 0
E = 0
B = 0
H = 1

Elseif Key = 14 Then
If E = 1 Then
Cls
Select Case F
Case 1 :
B = C / D

Case 2:
B = C * D

Case 3:
B = C - D


End Select
Lcd B

End If
End If
End If
Locate 2 , 1
Lcd "avrprojects.info"

Goto Q
End
Dta:
Data 7 , 8 , 9 , 10 , 4 , 5 , 6 , 11 , 1 , 2 , 3 , 12 , 13 , 0 , 14 , 15

farzadsw
جمعه 07 خرداد 1389, 23:33 عصر
چه موقعی 3.1999 نشون میده ؟ بعد از عملیات که توش تقسیم داره یا همیشه؟

nilofar9925
شنبه 08 خرداد 1389, 23:23 عصر
همیشه این طوری نشون میده

mhmmdshirazi
یک شنبه 09 خرداد 1389, 13:49 عصر
چرا بسکام خوب بیسیک کلا زبان خوبی نیست و من هرچی تلاش می کردم یاد نگرفتم با c خیلی راحت میشه نوشت!!!!

farzadsw
یک شنبه 09 خرداد 1389, 17:33 عصر
این اشکال به خاطر خود زبان basic هست که برای اعداد ممیز شناور همیشه یه مقدار خطا ایجاد میکنه .
برای اطلاعات بیشتر ، تو لینک زیر ، از Floating-Point Complications به بعد رو بخونید :
http://avrhelp.mcselec.com/index.html?language_fundamentals.htm

nilofar9925
یک شنبه 09 خرداد 1389, 19:55 عصر
پس راه حلی برای رفعش نیست؟

mhmmdshirazi
دوشنبه 10 خرداد 1389, 21:35 عصر
پس راه حلی برای رفعش نیست؟

من که گفتم راه حلش رو با c بنویس!!!!

nilofar9925
سه شنبه 11 خرداد 1389, 10:56 صبح
نمیشه با ز c بنویسم چون این پروژه ازمایشگاه ریزپردازندس که از اول ترم با بسکام کار کردیم و باید با بسکام بنویسیم

nilofar9925
پنج شنبه 13 خرداد 1389, 14:09 عصر
سلام توی این لینک 2 تا ماشین حساب هست یکی معمولی با بسکام یکی مهندسی با کدویژن http://forum.elec4u.ir/thread-t-24.html

majbor1980
سه شنبه 02 آذر 1395, 23:10 عصر
مشکل اعداد داشت درست کردم فقط تا 1 رقم اعشار میشه اگه خواشتید بیشتر نشون بده دستور lcd fusing (b,"#.###")
بزنید پروتوس همون نقشه بالایی هست.موفق باشید
$regfile = "m16def.dat"
$crystal = 1000000

Config Kbd = Portd , Debounce = 30
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.3 , E = Portb.2

Deflcdchar Print , 16 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0)

Dim A As Byte
Dim B As Single
Dim Key As Byte
Dim C As Single
Dim D As Single
Dim E As Byte
Dim F As Byte
Dim Flag As Byte
Dim H As Single
Dim H2 As Single

Cls
Cursor Off
Locate 2 , 1
Lcd "adad ra vared konid"
E = 0
B = 0
Flag = 0
H = 1
H2 = 0

Q:
Waitms 200
'B = 0
A = Getkbd()
If A > 15 Then
Goto Q
Else
Key = Lookup(a , Dta)
If Key <= 9 And Flag = 0 Then
D = 0
B = 10 * B
B = B + Key
If E = 0 Then C = B
If E = 1 Then D = B
Cls : Lcd B

Elseif Key <= 9 And Flag = 1 Then
Cls
H = H * 0.1
H2 = H * Key

B = B + H2

Lcd Fusing(b , "#.#")
If E = 0 Then C = B

If E = 1 Then D = B

Elseif Key = 10 Then
Cls
Flag = 0
F = 1
E = 1
B = 0
Elseif Key = 11 Then
Cls
Flag = 0
E = 1
F = 2
B = 0
Elseif Key = 12 Then
Cls
Flag = 0
E = 1
F = 3
B = 0
Elseif Key = 15 Then
Flag = 1

Elseif Key = 13 Then
Cls
Flag = 0
E = 0
B = 0
H = 1

Elseif Key = 14 Then
If E = 1 Then
Cls
Select Case F
Case 1 :
B = C / D

Case 2:
B = C * D

Case 3:
B = C - D


End Select
Lcd B

End If
End If
End If
Locate 2 , 1
Lcd "adad ra vared konid"

Goto Q
End
Dta:
Data 7 , 8 , 9 , 10 , 4 , 5 , 6 , 11 , 1 , 2 , 3 , 12 , 13 , 0 , 14 , 15