免电源的电话使用计时器

2007-03-09 19:03:27来源: 互联网
前言: 在通讯沟通频繁的今日,相信家家户户都有一台以上的电话机,您家必定发生过打完电话后未挂好而造成电话无法打进的困扰吧。或者您的家人或同事或朋友打电话一打就打了许久又不自知吧。 下面为您介绍一款DIY制作「免电源电话使用计时器」供您避免上述现象之产生,总共才用了12个元件(单片机1个,LED七字显示数码管2个,电容3个,电阻1个,桥式整流子1个,电感1个,石英晶体1个,稳压二极管1个,按键1个),相信只需要20多元及1个休息日即可组装完成做出一个前所未有的趣味电子产品了。  特点说明: DIY制作基本上要有着三个特点: 一看就懂:指电路简单明了。 一买就有:指电路容易取得。 一做就成:指制作成功率高。 当您看完本篇文章之后一定会有种跃跃欲试的感觉,那么请跟着感觉走是不会错的。整个DIY制作虽然小小的,不过特点倒是挺多项。 免用外部电源,整个DIY电子产品是利用电话线电压来工作的,故可免除许多烦人的事(指怕停电,浪费电,体积大,成本高,配线难),在使用上没有任何不适的感觉,也不须担心电信局测试。 对通话品质无影响,所谓的无影响其实有着二个含意,一为无杂讯干扰,一为通话音量不增减。大家都知道多位数的LED七段显示得用扫描方式,如此一来会有脉冲电流杂讯产生,这点对听觉灵敏的耳朵而言是不可忽视的。另外整个电路的AC阻抗得非常的低,以免除声音的衰减。针对这二个要求,这里介绍一个简单又实用的电源取得电路供您参考。 LED七段显示,非常适合夜晚来使用,同时由于亮度很够,即使在白天也是清清楚楚,这点就是LCD显示望尘莫及的。 LED显示不但能做使用时间的显示之外,也能表示电话线正被使用中,故可当未挂好话筒之提醒指示之用。 LED显示采用最省元件的互补式,即一个LED七段显示器为共阴,另一为共阳,如此即可直接用单片机四个I/O直接推动而得到最高亮度了。 利用OTP型单片机EM78P156来做核心控制,整个程序小小的,若您想更改或增加功能都是非常容易的。  功能说明: 当您的电话使用后没有放置好,或者是打电话聊长天的时候给您显示通话使用时间给予心理压力。基本上可算是有提醒指示及显示二大功能。  提醒指示: 只要LED七段显示器点亮则表示电话线正被使用,此时不是您正在打电话就是话筒未被放置好。  显示: 只要话筒一被拿起,电话回路被建立后单片机开始做计时及显示动作,以分为单位,最大可显示99分,之后又从0开始。若您要有精准的计时时可在电话通之后按CLR键,此时单片机清除计数从新开始计数显示。  线路图: 图1线路说明: 整个线路说实在的,太小了,不过增一分则肥,减一分则瘦。还是老老实实的交待清楚吧,那么您要购买或更换电路时才不会走冤枉路。 直接从电话线路取得工作电源,见图2 : 图2 为一简单的检波器π型滤波器及基纳稳压器所构成,经过这5个元件的打点而得到从电话端看到的是一个AC低阻抗,同时隔离了单片机扫描LED七段显示器所衍生的杂音。另外5V的稳压二极管更提供了很稳定的电源供电路使用。有二个地方需注意的是5V稳压二极管得选购5W以上的比较不会过热,同时电感得选购直流内阻低的,愈低愈不会发热。 LED七段显示器采用一共阴极,一共阳极的,故颜色及亮度最好选相近的。 见图3 图3 当PORT5输出为HIGH时,共阳极的LED七段显示器被选到,此时PORT6输出为LOW时LED被点亮,反之LED不会亮。当PORT5输出为LOW时,共阳极的LED七段显示器被选到,此时PORT6输出为HIGH时LED被点亮,反之LED不会亮。之所以要四个I/O都并联在一起是要保证有50mA的输出显示电流,不是四个并联使用的话则显示亮度会打折扣。 单片机部份,图4 图4 选用 台湾EMC 公司的EM78P156 OTP或8位单片机,不但指令少,程序撰写容易外,所需外部元件也是精简得很,我们不妨看看只需一个32768Hz的石英晶体及一个助振电容就行了,另外的1K电阻是关机泄放电流用的,可避免重置失效,而CLR按键是用来清除显示时间的。若您不再乎那拨号时间的误差则可以不用此元件的。  程序列: ; ; FILE NAME:T_CARE0.DT ; DATE :1999,5,5 ; BY :HWANG JYN_GUO ; CIRCUIT :T_CARE0.321 ; ; FUNCTION DESCRIPTION: ; USING TCC TO GET 1 SEC INTERRUPT ; 32768/(2*64*256)= 1 SEC ; CRYSTAL MODE 32768 Hz ; 2 CYCLE AND 2 CLOCK MODE ; PC == 02 RF == 03 ;STATUS FZ == 02 ;FLAG OF ZERO FC == 00 ;FLAG OF CARRY P5 == 0X05 ;PORT 5 P6 == 0X06 ;PORT 6 DL == 0X10 ;DELAY LOOP MIN == 0X11 ;MINUTE SEC == 0X12 ;SECOND DD == 0X13 ;DISPLAY DIGIT DDH == 0X14 ;DISPLAY DIGIT HIGH AB == 0X15 ;A BACK_UP RFB == 0X16 ;RF BACK_UP ORG 0 0000 JMP INIT ;PROGRAM START ORG 8 ;TCC INTERRUPT--------------------------------------------- TCCI: 0008 MOV AB,A ;AB <- A 0009 SWAP AB ;AB <- BA 000A SWAPA RF 000B MOV RFB,A ;RFB<- FR 000C INC SEC CHECK: 000D MOV A,SEC 000E SUB A,@59 ;59-SEC=A 000F JBC RF,FC 0010 JMP C_MIN 0011 CLR SEC 0012 INC MIN C_MIN: 0013 MOV A,MIN 0014 SUB A,@99 ;99-MIN=A 0015 JBS RF,FC 0016 CLR MIN TCCE: 0017 SWAPA RFB 0018 MOV RF,A ;RF<- RFB 0019 SWAPA AB ;A <- BA 001A BC 0X0F,0 ;CLEAR TCC_INT 001B RETI ;TABLE 7 SEGEMENT------------------------------------------------------ T7: 001C ADD PC,A ; GFE DCBA 001D RETL @0B01000000 ;0 0100 0000 001E RETL @0B01111001 ;1 0111 1001 001F RETL @0B00100100 ;2 0010 0100 0020 RETL @0B00110000 ;3 0011 0000 0021 RETL @0B00011001 ;4 0001 1001 0022 RETL @0B00010010 ;5 0001 0010 0023 RETL @0B00000010 ;6 0000 0010 0024 RETL @0B01011000 ;7 0101 1000 0025 RETL @0B00000000 ;8 0000 0000 0026 RETL @0B00010000 ;9 0001 0000 ;DELAY ------------------------------------------------------------------------ DELAY: 0027 MOV P5,A 0028 MOV A,@20 0029 MOV DL,A D_1: 002A DJZ DL 002B JMP D_1 002C MOV A,@0XFF 002D IOW P6 002E RET ;INIT ------------------------------------------------------------------------------ INIT: 002F MOV A,@0X00 0030 MOV MIN,A 0031 MOV SEC,A 0032 IOW 0X0E ;DISABLE WDT 0033 IOW P5 ;PORT 5 OUTPUT 0034 IOW P6 ;PORT 6 OUTPUT 0035 MOV A,@0X01 0036 IOW 0X0F ;ENABLE TCC_INT 0037 MOV A,@0X05 ;1/64 0038 CONTW 0039 ENI ;SCAN --------------------------------------------------------------------------- SCAN: 003A MOV A,MIN HTD: 003B CLR DDH H_H: 003C ADD A,@246 ;A=A-10 003D JBS RF,FC 003E JMP H_L 003F INC DDH 0040 JMP H_H H_L: 0041 ADD A,@10 0042 CALL T7 0043 IOW P6 0044 MOV P6,A 0045 MOV A,@255 ;DISPLAY DIGIT 0 0046 CALL DELAY 0047 MOV A,DDH 0048 CALL T7 0049 IOW P6 004A XOR A,@0XFF 004B MOV P6,A 004C MOV A,@00 ;DISPLAY DIGIT 1 004D CALL DELAY 004E JMP SCAN 程序说明: 程序就像日常说话一样,只要能够表达清楚意思,那么,愈短愈受人欢迎(当然得在保证有正常功能的情况下而言)。此次DIY制作的软件程序长度仅有78个指令,够短了吧,相信看懂也不难。整个程序可以分成5个段落来做说明,寄存器使用说明: DL ----- 子程序用寄存器 MIN ----- 存放分钟资料寄存器 SEC ----- 存放秒钟资料寄存器 DD ----- 存放显示位数资料寄存器 DDH ----- 存放显示资料寄存器 AB ----- 存放ACC的副本 RFB ----- 存放STATUS的副本 TCC中断子程序: 从0000--001B行为每秒发生一次的TCC中断子程序,其中0008--000B及0017--0019行为进入及离开中断子程序的ACC及STATUS保留动作。其中000C为每进入一次中断子程序就将SEC这寄存器予以进位。其中000D--0012为判断SEC寄存器是否大于59,是则将MIN寄存器予以进位并清除SEC寄存器。其中0013--0016为判断MIN寄存器是否大于99,是则将MIN寄存器予以清除,其中001A为清除TCC中断旗标。 LED字型转换程序: 从001C--0026行存放了字型转换表,可将0--9的数字转成相对的LED七字显示器的资料。 显示时间长度延