电话附加拨号器(以下简称拨号器),具体要求是:
该拨号器和家中的电话机并联在一起,平时处于关机状态,不影响电话机的正常使用,拨号器上有一个按钮,每当按压一下该按钮时,拨号器就自动拨出一个预先设定好的电话号码(比如13797130900),拨完后自动挂机,要求不能用电池,也不用交流电,只能用电话线路上的电源供电。
简要说一下原理:
1、V2是个开关,平时处于断开状态,整个系统不工作,也没有电,因此不影响电话机的使用;
2、每当按压一下按钮AN2时,电源系统立即工作,7805输出+5V电压,单片机立即复位,同时P3.2输出高电平,使开关V2得以维持导通,此后即便是将按钮抬起来,系统还是有电的,可以继续运行程序;
3、单片即复位后,开始运行程序:
延时等待拨号音/拨号/延时等待对方接受呼叫/完成后{zh1}让P3.2变为低电平,使开关V2断开,V2断开后,整个系统就没有电了,处于等待状态,等待下次再使用。
IC2是MK5087,将来拨号的用8脚的HT9200,节省资源。
程序清单:
J1 equ
0FE01H
;定义号码1
J2 equ
0FE02H
;定义号码2
J3 equ
0FE04H
;定义号码3
J4 equ
0FD01H
;定义号码4
J5 equ
0FD02H
;定义号码5
J6 equ
0FD04H
;定义号码6
J7 equ
0FB01H
;定义号码7
J8 equ
0FB02H
;定义号码8
J9 equ
0FB02H
;定义号码9
J0 equ
0F702H
;定义号码0
JT EQU
0FF00H
;禁止拨号
ORG
0000H
;以下程序从0000H单元开始执行
AJMP
S0
;跳转到S0处
ORG
30H
;以下程序从30H单元开始执行
S0:
;初始化模块
MOV
P0,#00H
;P0口置0
MOV
P2,#0FFH
;P2口置1
YS01:
;摘机后的延时处理,等待拨号音
MOV
R7,#3
;计数器赋初值
YS02:
;延时处理
DJNZ
R7,TO_DELAY ;R7减1,不为0时转TO_DELAY
LJMP
S1
;为0时执行S1
TO_DELAY:
;转去执行子程序
ACALL
DELAY
;转到延时模块
LJMP
YS02
;转回到YS1
S1:
;
MOV DPTR,
#J1
;拨第1位数1
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S2:
;
MOV DPTR,
#J3
;拨第2位数3
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S3:
;
MOV DPTR,
#J7
;拨第3位数7
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S4:
;
MOV DPTR,
#J9
;拨第4位数9
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S5:
;
MOV DPTR,
#J7
;拨第5位数7
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S6:
;
MOV DPTR,
#J1
;拨第6位数1
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S7:
;
MOV DPTR,
#J3
;拨第7位数3
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S8:
;
MOV DPTR,
#J0
;拨第8位数0
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S9:
;
MOV DPTR,
#J9
;拨第9位数9
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S10:
;
MOV DPTR,
#J0
;拨第10位数0
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
ACALL
DELAY
;转延时
S11:
;
MOV DPTR,
#J0
;拨第11位数0
MOV
P0,DPL
;
MOV
P2,DPH
;
ACALL
DELAY
;转延时
ACALL
JZBH
;停顿,禁止拨号
YS21:
;拨通后的延时处理,等待对方收铃
MOV
R7,#68
;计数器赋初值
YS22:
;延时处理
DJNZ
R7,TO_DELAY1 ;R7减1,不为0时转TO_DELAY1
LJMP
SKD
;为0时执行SKD
TO_DELAY1:
;转去执行子程序
ACALL
DELAY
;转到延时模块
LJMP
YS22
;转回到YS1
SKD:
;断开系统
CLR P3.6
STOP:
;暂停
JMP STOP
DELAY:
;延时模块
MOV
R1,#10
;
DEL0:
;
MOV
R2,#26
;
DEL1:
;
MOV
R3,#100
;
DJNZ
R3,$
;
DJNZ
R2,DEL1
;
DJNZ
R1,DEL0
;
RET
;
JZBH:
;禁止拨号
MOV
DPTR,#JT
;
MOV
P0,DPL
;
MOV
P2,DPH
;
RET
;
END
;