随着现代技术的发展,电与我们生活的关系越来越密切,从工业生产到居家生活的每一个细节都离不开电。但令人头疼的是却有许多人在偷电漏电,盗用别人的电源使用,给别人造成了经济上的损失。现在,在同一间办公室办公的情况越来越普遍了,为了使非法用户在不知道密码的情况下,无法使用电源,笔者在这里设计了一个密码电源开关,它是基于微控制芯片A T89C51 的一项新的具有实用价值的系统。这个系统结构简单,保密性好,可以同时控制多路电源,具有输入错误密码告警,输入正确密码开、关电源,用电器关电后自动启动保护延时等功能。
工作原理及硬件结构
利用89C51 设计的密码电源开关原理如图1所示,系统以89C51 为核心,89C51 是Intel公司的一款集CPU 、RAM、ROM、I/ O 接口、定时器/ 计数器、中断系统为一体的单片机, 片上带有4 K 的ROM 和128 ×8 位的RAM。系统中按键采用查询方法与单片机连接,可以实现输入正确密码开电源,输入正确密码关电源,修改密码,修改延时等功能。8 路继电器全部连接在P0口,通过P0口的电平变化来控制继电器,进而控制电源的开关,为了节省端口,L ED 显示连在普通口,因为要在关电后保证密码不丢失,利用I2 C 技术在单片机外部扩展了一个E2 PROM(A T24C02) ,来存储正确的密码。
单片机最小系统
如图2 所示,89C51 的外部通过18 ,19 脚连接一个晶振和两个电容,构成振荡电路,可以为单片机提供时钟频率。9 脚通过一个10kΩ 电阻和一个10μF 的电容构成了一个简单的复位电路, EA 接高电平,AL E、PSEN 信号不用,这样就构成了一个单片机最小系统。这个最小系统未设复位键,系统加电时自动复位。
继电器电路
本系统中要实现用弱电去控制强电,所以我们使用了继电器,用以对电源通断的控制,如图3 所示,继电器通过一个三极管直接连接到P0 口,当P0口为高电平时,继电器导通,接通外部电源,反之,断开外部电源。
外部存储器的扩展
为了把修改后的正确密码保存起来,不至于在断电后密码丢失,所以在设计中通过I2 C 技术扩展了一个外部存储器。I2 C 总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA ,另一根是时钟线SCL 。如图4 所示,因为89C51 没有直接的I2 C 接口,所以使用模拟I2 C 技术,SDA 连接在P2. 3 口,SCL 连接在P2. 2 口,用软件程序控制数据的输入输出。
在I2 C 总线上传送的一个数据字节由8 位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB) ,首先由主机发出启动信号“S”(SDA 在SCL高电平期间由高电平跳变为低电平) ,然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高7 位是从机的地址,第8 位是传送方向位,0 表示主机发送数据(写) ,1 表示主机接收数据(读) 。被寻址到的从机设备按传送方向位设置为对应工作方式。标准I2 C 总线的设备都有一个七位地址,所有连接在I2 C 总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第9 位应答时钟脉冲时向SDA 线送出低电平作为应答。除了第一字节是通用呼叫地址或十位从机地址之外,第二字节开始即数据字节。数据传送完毕,由主机发出停止信号“P”( SDA 在SCL 高电平期间由低电平跳变为高电平) 。A T24CX 系列串行E2 PROM 具有I2 C 总线接口功能,功耗小,宽电源电压(根据不同型号2. 5V~6. 0V) ,工作电流约为3mA ,静态电流随电源电压不同为30μA~110μA ,所以在本系统中使用A T24C02 作为外部存储器。
其他硬件电路
本系统中的使用到的按键较少,只有4 个,分别是通道选择,功能切换,数字切换/ 修改延时,确认/修改密码。为了简化电路结构,节省成本,在系统中未使用扫描键盘的连接思路,而是采用了图5 的连接方法。
按键一端接P3 口,一端接地,当有按键按下时,相应口的电平就会被拉低。然后用软件程序就可以检查出是哪个键按下,随后执行相应的功能。因为P3 口全做了I/ O 口使用,所以在连接硬件的时候,每一个口上都接了一个上拉电阻。L ED 显示部分通过模拟串行口来进行显示,时钟线和数据线连接到单片机的普通口。电源电路使用典型的电源电路,一个整流桥加一个稳压管,就可以构成一个电源电路。为了增加系统的可操作性,特加了三个L ED 指示灯,分别是修改延时指示灯、修改密码指示灯、告警灯,都直接连接在P1 口,用程序控制。
控制软件设计
结合设计的要求和电路要实现的功能,系统的主要程序流程如下:
主程序
这个程序采用了数枝状的结构,这样比较适合于此硬件电路,也容易实现系统的功能。在主程序中,反复查询与按键相连的端口,一但发现有按键按下,迅速判断出来是哪个按键按下,然后调用相应的子程序,并执行功能,待执行完后,又返回主程序等待。
输入数字子程序
输入数字键可以实现两个功能,一个是单纯的输入数字,从0 到9 循环,每修改一次,数字都要保存到显示缓冲区中,以便打开电源,关闭电源,修改密码时使用。输入数字键一般是和确认键配合使用的,因为在这个系统中采用的是串行显示,所以每次只能显示一位,共有四位数字,从低位到高位显示的时候,当每一位上的数字选好后,都要确认一下,才能移到下一位显示。如图7 所示在每一次输入完数字以后,都要查询一下是否有修改延时的要求,如果有,那么就要执行修改延时的功能,在本系统中,最大延时取了5 分钟,这个值到实际中是可以修该的。修改后的延时值存在一个特定的存储区中,以备触发定时器时使用。本系统中采用延时的功能主要是为了保护用电器,例如冰箱之类的大功率用电器,它要求在每次关电和开电之间应该有一定的延时,以保护用电器,延长寿命。而这个设计就恰恰满足了这种要求,它可以在你关闭电源时自动启动定时器延时,如果定时时间未结束,即使密码输入正确,也无法开机。
选路子程序
选路子程序比较简单,通过反复循环来实现路数的选择,选好的路数存到特定的存储单元中,作为判断条件供其他程序使用。
确认子程序
确认程序主要实现对输入数字的确认及判断系统是否有延时要求。
修改延时/ 修改密码子程序
程序主要作用就是实现修改密码和修改延时,可以通过外部按键来切换,在外部各有一个指示灯,来显示现在处于什么状态。修改延时时只要修改延时灯点亮,就可以通过输入数字键来修改延时。当修改密码指示灯亮时,就可以修改密码。修改好的密码通过特定的端口送到外部存储器AT24C02 保存起来。
比较子程序
比较子程序主要实现对输入的密码和原始密码进行比较的作用,可以实现对继电器的开与关的控制及控制延时的打开的控制。延时的关闭是在定时器里完成的,在这里就不再过多的阐述了。
部分程序如下:
MAIN :
MOV SP , # 60H
MOV TMOD , # 01H ;设置定时器T0
MOV TH0 , # 3CH
MOV TL0 , # 0B0H ;100 毫秒初值
SETB EA
MOV DINGSHI_CZ , # 01H ;存计数次数
MOV XGMM_PASS , # 00H ;修改密码允许标志清0
MOV 0CH , # 0C8H ;循环200 次
MOV 0DH , # 0C8H ;循环200 次
MOV 0EH , # 0C8H ;循环200 次
; ....................
MOV 4AH , # 00H
MOV 4BH , # 00H
MOV 4CH , # 00H
MOV 4DH , # 00H ;清显示屏的代码
LCALL CL EAR ;清显示器
MOV A , # 00H
MOV P0 ,A
MOV R4 , # 08H ;控制路数的次数
MOV R3 , # 00H ;控制路数,默认第1 路
MOV R0 , # 30H ;密码缓存首地址
MOV R5 , # 00H
MOV R7 , # 05H ;控制定时次数,最大5 分钟
MOV A , # 01H
MOV 38H ,A
MOV OPEN_SHU T1 , # 00H ;控制各路的开与关
MOV OPEN_SHU T2 , # 00H
MOV OPEN_SHU T3 , # 00H
MOV OPEN_SHU T4 , # 00H
MOV OPEN_SHU T5 , # 00H
MOV OPEN_SHU T6 , # 00H
MOV OPEN_SHU T7 , # 00H
MOV OPEN_SHU T8 , # 00H
MOV YANSHI , # 00H ;关延时标志位
; ........查询是否有键按下........
START :
SETB P3. 2
SETB P3. 3
SETB P3. 4
SETB P3. 5
LCALL DL10_MS
MOV A ,P3
JNB ACC. 2 ,FUN0
JNB ACC. 3 ,FUN1
JNB ACC. 4 ,FUN2
JNB ACC. 5 ,FUN3
LCALL DL10_MS
LJMP START ;查询是否有键按下
FUN0 : LJMP XUANLU ;调用选路子程序
FUN1 : LJMP INPU T_SZ ;调用输入数字子程序
FUN2 : LJMP YES_MOVE ;调用确认子程序
FUN3 : LJMP GNQH ;调用功能切换子程序
结束语
本文较为详细地介绍了以单片机为核心的密码电源开关的设计,使51 系列单片机充分应用在了控制系统中。该系统实现简单,结构灵活(按键部分也可以采用中断的连接方法) ,开发经济,具有一定的市场前景。