我正在尝试mega16
在BASCOM
上运行一个简单的计算器。因此我编写了以下代码,并在Proteus
$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 Digit As Byte
Dim Num As Byte
Dim Keypad As Byte
Dim Lable As Byte
Dim Result As Byte
Digit = 0
Num = 0
Result = 0
Scan:
Waitms 200
Keypad = Getkbd()
If Keypad > 15 Then Goto Scan
Lable = Lookup(keypad , Data_caculatorkeypad)
If Lable < 10 Then
Digit = Lable
Num = Num * 10
Num = Num + Lable
Lcd Digit
End If
If Lable = 15 Then
Result = Result + Num
Num = 0
Cls
Lcd Result ; "+"
End If
If Lable = 12 Then
Result = Result - Num
Num = 0
Cls
Lcd Result ; "-"
End If
If Lable = 11 Then
Result = Result * Digit
Num = 0
Cls
Lcd Result ; "*"
End If
If Lable = 10 Then
Result = Result / Digit
Num = 0
Cls
Lcd Result ; "/"
End If
If Lable = 13 Then
Num = 0
Result = 0
Cls
Lcd "simple calc"
Waitms 500
Cls
End If
Goto Scan
Data_caculatorkeypad:
Data 7 , 8 , 9 , 10 , 4 , 5 , 6 , 11 , 1 , 2 , 3 , 12 , 13 , 0 , 14 , 15
在Proteus上运行时,我看到了这个结果
我不知道为什么它不能正常工作,我还读过this code关于Proteus
上键盘的另一个问题,然后我使用了电阻,但是它也不起作用,我认为我不需要电阻,因为我在我的代码中使用了Debounce = 30
。 this code和我的(计算器或Data_caculatorkeypad
的数据)还有另外一个区别,我认为此data:7 , 8 , 9 , 10 , 4 , 5 , 6 , 11 , 1 , 2 , 3 , 12 , 13 , 0 , 14 , 15
的键盘从左上角开始工作,它也用在此example上。
任何帮助将不胜感激。