|
发表于 2005-11-10 17:33:19
|
显示全部楼层
下面是m8电话拨号的源文件:
Config Kbd = Portd , Delay = 1 '使用端口D建立简易键盘,延时100毫
秒去除按键抖动。
Dim A As Byte , B As Byte '定义全局变量A和B为字节型变量,其中
A保存上次的键值,B保存当前的键值。
Enable Interrupts '打开全局中断。
Config Portb = Output '配置端口B为输出。
Portb = &H00 '设端口B初始值为0,即所有IO线为低电平。
Cursor Off '关闭LCD的光标。
Cls 'LCD清屏。
Do 'DO……LOOP之间无条件循环。
B = Getkbd() '读取键盘值,将其赋给变量B。
If B < 12 And A <> B Then '判断,如果B的值小于16和变量A的值不
等于变量B的值就执行以下语句,以此判断是否有键被按下,和被按下的是新的键还是
旧键连击。
Select Case B '状态机:根据B的值选择分支。
Case Is < 10 '如果B的值小于10则说明按下的是数字键,键
值转换为字符后在LCD显示出来。
Lcd Str(b)
Case 10 '如果B等于10就在LCD显示“*”。
Lcd "*"
Case 11 '如果B为11就在LCD上显示“#”。
Lcd "#"
Case Else '对于未列举的情况则清除LCD并显示“ERROR
”
Cls
Lcd "ERROR"
End Select '状态机结束标志。
Dtmfout B , 100 '在OC1A脚输出DTMF信号,信号值为变量B
的值,信号时间为100毫秒。
End If '判断结束标志。
A = B '将此时的变量B的值暂存到变量A。
Loop 'DO……LOOP之间无条件循环。
End
*************************************************************************************
我觉得程序好像有点错误(可能是我自己的错觉)
我觉得里面的:
If B < 12 And A <> B Then
应改为:
if b <16 and a<>B then
还有,我不明白他为什么还要加一条语句 "A<>B"
如果我的电话号码有连续几个相同的数字的话,那号码岂不是输不进? |
|