红外遥控密码锁的设计与实现
红外遥控密码锁的设计与实现
班级:
姓名:
指导老师:
摘要
目前国内普遍使用的锁都是机械式的,这种锁结构简单、使用方便,但利用工具可轻易将其打开,这给用户带来极大的困扰和损失。为此,我们设计制作了红外遥控密码锁来解决这个问题。本设计提出以单片机为处理器,无线遥控与电子密码锁技术相结合的整体解决方案。采用单片机为遥控系统的设计,具有灵活多样的编程和结构清晰的电路。本设计由红外接收头hs0038和单片机STC89C52控制的的接收部分构成。此外,红外遥控密码锁可以进行近距离遥控,可以实现遥控开锁、修改密码等诸多功能,在密码外泄时可随时修改密码,具有简单易用、成本低廉、安全可靠、适用广泛的特点,十分适合小区、宾馆、仓库等场所。
关键词:红外遥控、红外接收、密码锁
ABSTRACT
At present, the widespread use of all mechanical locks, this lock structure is simple and easy to use, but easy to use tools to open it, which gives users a lot of confusion and loss. To this end, we designed and fabricated infrared remote control locks to solve the problem. The proposed single chip for the processor design, wireless remote control technology and electronic lock combination of the overall solution. For the remote control system using single chip design, with flexible programming and a clear structure of the circuit. The design of the infrared receiver and the microcontroller STC89C52 control hs0038 receiving parts. In addition, the infrared remote control can close remote locks, remote keyless entry can be achieved, change passwords, and many other functions, the password can be compromised at any time change your password, with easy to use, low cost, safe and reliable for a wide range of features, very Suitable for residential, hotels, warehouses and other places.
keywords:Infrared Remote Control,Infrared receiver,lock
目录
1 绪论...............................................................4
1.1设计的背景和意义...............................................4
1.2课题的市场前景.................................................4
1.3红外遥控技术的发展现状.........................................5
1.4本课题的主要研究内容...........................................5
1.4.1软件设计的研究内容........................................5
1.4.2硬件电路设计的研究内容....................................5
2 系统设计...........................................................6
2.1红外遥控系统结构...............................................6
2.2红外信号的编码与解码...........................................6
2.2.1编码.........................................................6
2.2.2调制.........................................................7
2.2.3解调.........................................................7
2.2.4解码.........................................................8
3 系统硬件的设计与实现...............................................8
3.1系统结构.......................................................8
3.2系统硬件结构...................................................9
3.2.1系统硬件原理图............................................9
3.2.2接收电路的设计...........................................10
3.2.3密码存储部分电路设计.....................................11
3.2.4单片机的控制.............................................17
3.2.5输出端电路...............................................23
4 系统的软件设计....................................................26
4.1软件设计......................................................26
4.1.1红外接收解码..............................................26
4.1.2按键控制设计..............................................27
4.1.3数据存储设计..............................................28
4.2Keil C..........................................................31
5 总结..............................................................31
致谢................................................................32
参考文献............................................................32
1 绪论
1.1设计的背景和意义
随着计算机的普及和信息技术的大力发展,人们对家庭和住宅小区提出更高的要求,智能化被引入家庭及住宅小区,并迅速在世界各地发展开来。
电子技术的飞速发展,给古老的锁具生产带来了巨大的变革,现代的电子技术与机械技术相结合,产生了一大批如声控锁、磁控锁、密码锁、遥控锁,指纹锁等先进的锁具。
目前国内外密码锁系统的主要发展方向是:接触式密码锁系统、非接触式密码锁系统、智能识别密码锁系统,但是他们都相应的存在着不同的缺点。例如:接触式密码锁系统成本较低,体积小,卡片本身无须电源,但使用不太方便,而且有接触磨损。相比之下,红外遥控密码锁系统的成本与接触式密码锁系统相当,而且可以进行近距离遥控,使用十分方便。
由于红外遥控具有许多优点,例如红外线发射装置采用红外发光二极管,遥控发射器易于小型化且价格低廉;采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,增加遥控功能,提高信号传输的抗干扰性,减少误动作,而且功率消耗低;红外线不会向室外泄露,不会产生信号串扰;反应速度快、传输效率高、工作稳定可靠等。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。所以红外线遥控是目前使用最广泛的一种通信和遥控手段。
1.2课题的市场前景
目前,市场上有射频卡密码锁、IC卡密码锁、红外遥控密码锁、指纹识别密码锁等先进的智能锁。
射频卡密码锁是非接触式密码锁,其体积小,重量轻,技术成熟受到广泛欢迎,但是成本偏高;IC卡密码锁成本低,体积小,本身也无需电源,市场占领一定份额,但由于其是有机械接触,容易产生磨损,使用也不太方便,所以限制了它的应用;指纹识别
系统可靠性很高,但是成本太过高昂,未能受到广泛使用。红外遥控密码锁的成本与接触式密码锁相当,而且可以实现近距离遥控且距离远高于射频卡的遥控距离,耗电量低,使用方便。近年来随着生活水平的提高,人们更加注重生活质量,更乐意去享受方便快捷的生活方式,而红外密码锁恰恰具有使用方便、操作简单、价格低廉等特点,可以给人们的生活带来了极大方便而受到广大人们的欢迎。又因其有着广泛的应用,因此其发展前景可观。
1.3红外遥控技术的发展现状
最早的遥控器之一,是一个叫尼古拉²特斯拉(Nikola Tesla) (1856-1943)的发明家(他曾经为爱迪生工作,同样被誉为天才发明家)在1898年时开发出来的。
此后,到了60年代初期,发达国家也尝试着研究遥控技术,但是由于技术有限,所以发展比较缓慢。70年代末,伴随着计算机技术和大规模集成电路的发展,遥控技术也得到了快速的发展。在遥控的方式上,大体经历了从有线到无线的超声波、从振动子到红外线、再到使用总线的微机红外遥控这样几个阶段。无线遥控装置采用的是电磁波传输信号,因为电磁波易受到外界干扰,所以后来逐渐用超声波和红外线代替了电磁波。又由于红外线比超声波传感器频带宽,所能携带的信息量多,且不易受干扰,红外线逐渐取代超声波的遥控方式,出现红外线多功能遥控器,并成为当今时代的主流。
由于红外线在频谱上位于可见光之外,所以抗干扰性强,具有光波的直线传播特性,不易产生相互间的干扰,是很好的信息传输媒体。信息可以直接对红外光进行调制传输,例如,信息直接调制红外光的强弱进行传输,也可以用红外线产生一定频率的载波,再用信息对载波进调制,接收端再去掉载波,取到信息。从信息的可靠传输来说,后一种方法更好,这就是目前大多数红外遥控器所采用的方法。
红外遥控技术在这十年来得到了迅猛发展,在家电和其他电子领域都得到了广泛应用。随着生活水平的提高,人们对产品的追求是使用更方便、更具智能化,红外遥控技术正是一个重点的发展方向。
1.4本课题的主要研究内容
1.4.1软件设计的研究内容
a.实现密码外泄可随时改变密码
b.实现近距离开锁功能
1.4.2硬件电路设计的研究内容
a.电路图的设计检查
b.电路板的焊接
2 系统设计
2.1红外遥控系统结构
红外遥控系统主要由发射和接收两部分组成,单片机在发送端将准备发送的二进制信号编码调制为一系列的脉冲信号,通过红外发射管发射红外信号(本设计我们可简单的用遥控器来完成)。红外接收采用性能可靠的一体化红外接收头接收红外信号,它同时对信号进行检波、整形,得到TTL电平的编码信号,再送给单片机,经单片机解码并进行相关操作,如图2-1所示
:
由上所述可知,遥控系统分为编码、调制、解调和解码如图2-2所示四大部分:
2.2红外信号的编码与解码
2.2.1编码
如图2-3,二进制信号中的‘1’的高低电平均等于0.26ms,相当于10个26us的宽度;二进制信号中的‘0’的低电平宽0.52ms,高电平宽0.26ms。
图2-3 编码示意图
2.2.2调制
红外信号的调制有脉冲宽度调制(PWM),脉冲位置调制(PPM)等方法,本设计采用脉宽调制。二进制的调制由单片机来完成,它把编码后的二进制信号调制成频率为38khz的间断脉冲串,此脉冲串即是用于红外发射二极管发送的信号。如图2-4,A是二进制信号的编码波形,B是频率为38khz(周期约为26us)的连续脉冲串,C是经调制后的间断脉冲串,即是用于发送的信号。图2-4中,待发的二进制数据为101。
图2-4 信号调制示意图
2.2.3解调
二进制信号的解调由一体化红外接收头来完成,它把接收到的信号(图2-5中的波形D也是图2-4中的波形C)经内部处理并解调复原,输出图2-5中的波形E(正好是图2-4中A的取反)。接收头的解调可理解为:在输入脉冲串时输出低电平,否则输出高电平。二进制的解码由单片机来完成,它把红外接收头送来的二进制编码波形通过解码,还原成发送端发送的数据。如图2-5,把波形E解码还原成数据信息101。
图2-5 信号解调示意图
2.2.4解码
在发送字节的开始先通过单片机发送20个脉冲宽度(每个脉冲周期26us)的高电平作为传输的开始(同步帧),接着发送8位二进制数据(高位在前,低位在后),最后发送10个脉冲宽度的低电平作为传输的结束,如图2-6所示:
图2-6 字节传输
3 系统硬件的设计与实现
3.1系统结构
硬件系统主要包括红外发送模块、红外接收模块、数据处理模块、数据存储模块以及外围电路,其中红外发送模块为简单起见用一遥控器代替,接收模块用一个一体化的红外接收头HS0038,数据处理模块的处理器用的是STC89C52,数据储存模块用一个AT24C02。结构示意图如图3-1
图3-1 系统的结构示意图
3.2系统硬件结构
3.2.1系统硬件原理图
系统的整体设计原理图如图
3-2
图3-2 系统整体硬件设计原理图
3.2.2接收电路的设计
红外接收模块电路如图
3-3
图3-3 红外接收模块电路
(一) 电路分析
红外接收模块中红外接收头HS0038的连接方法是:1脚接电源,2脚接地,3脚输出,接收来至红外遥控器的输出信号,把接收的信号按位传送给单片机。此处的LED灯主要用于对修改密码的提示,单片机的P2.0口处的按键按下的时间大于学习时间且按键弹起后D1被点亮,提示输入密码,若一段时间后仍没有密码输入,D1就会闪烁,闪烁大于60次时灯自动熄灭,此时再输入红外信号已无效。
(二)电路中所使用的元器件
红外接收头
HS0038
图 3-4 红外接收头HS0038
红外接收头的种类很多,引脚定义也不相同,一般都有三个引脚,包括供电脚,接地和信号输出脚,也有些红外接收头添加了可以调节解调频率的端口。应用时必须保证
发射端调制载波的频率与接收端相应的解调频率之间互相匹配。红外接收电路如图
3-5
图3-5 红外接收电路
红外信号接收系统的基本电路结构如图3-5所示,该电路包括红外光电二极管,前置放大电路,限幅放大电路,带通滤波器,积分电路,比较器等。图左侧的红外光电二极管将接收到的红外光信号转化为电信号,然后把信号送到放大电路进行放大,限幅放大电路在放大信号的同时又把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器滤除中心频率外频率的噪声,出来的信号通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的二进制信号波形。
以上电路通常被集成在一个元件中,成为一体化红外接收头(HS0038),如图3-4所示,中心频率为38KHZ,工作电压5V,它的1脚接电源,2脚接地,3脚输出,它把接收到红外遥控信号的遥控码转换后传给单片机的中断口INT0。
3.2.3密码存储部分电路设计
数据存储模块电路如图
3-6
图3-6数据存储模块电路
(一) 电路分析
储存端由AT24C02构成,主要用于对接收到的红外代码进行存储,它的SCL、SDA
端分别接单片机的T0、T1端,用于与单片机之间读写操作的数据传输;WP接低电平表示单片机可以对器件进行正常的读/写操作;A0、 A1、 A2是器件地址输入端,都接低电平表示只有一个AT24C02被器件寻址。
(二) 电路中所使用的元器件
AT24C02
AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256³8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
1、特性
与400KHz I2C 总线兼容
2.5 到5.5 伏工作电压范围
低功耗CMOS 技术
写保护功能当WP 为高电平时进入写保护状态
页写缓冲器
自定时擦写周期
1,000 编程/擦除周期
可保存数据100 年
8 脚DIP SOIC 或TSSOP 封装
温度范围商业级工业级和汽车级
2、概述
AT24C02 是一个2K 位串行CMOS E2PROM ,部含有256 个8 位字节,ATALYST 公
司的先进CMOS 技术实质上减少了器件的功耗,CAT24WC01 有一个8 字节页写缓冲器CAT24WC02/04/08/16 有一个16 字节页写缓冲器,器件通过I2C 总线接口进行操作,一个专门的写保护功能。
3、管脚配置
图3-7 AT24C02管脚配置
4、管脚描述
5、极限参数
工作温度:工业级:-55°C-- +125°C 商业级:0°C-- +75°C
储存温度:-65°C-- +150°C
各管脚承受电压:-2.0V-- +2.0V
Vcc管脚承受电压::-2.0V-- +7.0V
封装功率损耗:(Ta=25°C):1.0W
焊接温度(10秒):300°C
输出短路电流:100mA
6、可靠性参数
7、功能描述
AT24C01/02/04/08/16 支持I2C 总线数据传送协议,I2C 总线协议规定,任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由
产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据发送或接收的模式,通过器件地址输入端A0 A1 和A2 可以实现将最多8 个24WC01 和24WC02 器件4 个242C04 器件,2 个24WC08 器件和1 个24WC16 器件连接到总线上。
8、管脚描述
SCL:串行时钟
CAT24WC01/02/04/08/16 串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,是一个输入管脚。
SDA:串行数据/地址
CAT24WC01/02/04/08/16 双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚。
A0 A1 A2:器件地址输入端
这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0 24WC01 除外。当使用24WC01 或24WC02 时最大可级联8 个器件,如果只有一个24WC02 被总线寻址,这三个地址输入脚A0 A1 A2 可悬空或连接到Vss, 如果只有一个24WC01 被总线寻址,这三个地址输入脚A0 A1 A2 必须连接到Vss。当使用24WC04 时,最多可连接4 个器件该器件,仅使用A1 A2 地址管脚,A0 管脚未用可以连接到Vss 或悬空,如果只有一个24WC04 被总线寻址,A1 和A2 地址管脚可悬空或连接到Vss。
WP:写保护
如果WP 管脚连接到Vcc, 所有的内容都被写保护只能读,当WP 管脚连接到Vss 或悬空,允许器件进行正常的读/写操作。
9、I2C 总线协议
I2C 总线协议定义如下
只有在总线空闲时才允许启动数据传送。
在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态不允许有跳变,时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止信号。
起始信号:时钟线保持高电平期间数据线电平从高到低的跳变作为I2C 总线的起始信号。
停止信号:时钟线保持高电平期间数据线电平从低到高的跳变作为I2C 总线的停止信号。
图3-8 总线时序
图3-9 写周期时序
图3-10 起始/停止时序
10、器件寻址
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址,8 位从器件地址的高4 位固定为1010,接下来的3 位A2 A1 A0 为器件的地址位用来定义哪个器件以及器件的哪个部分被主器件访问。上述8个CAT24WC01/02,4 个CAT24WC04,2个CAT24WC08,1个CAT24WC16可单独被系统寻址。从器件8位地址的最低位作为读写控制位,1表示对从器件进行读操作,0 表示对从器件进行写操作,在主器件发送起始信号和从器件地址字节后,CAT24WC01/02/04/08/16 监视总线并当其地址与发送的从地址相符时,响应一个应答信号通过SDA ,CAT24WC01/02/04/08/16 再根据读写控制位R/W 的状态进行读或写操作,应答信号I2C 总线数据传送时每成功地传送一个字节数据后,接收器都必须产生一个应答信号应答的器件,在第9 个时钟周期时将SDA 线拉低,表示其已收到一个8 位数据。CAT24WC01/02/04/08/16 在接收到起始信号
和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8 位字节之后响应一个应答信号。当CAT24WC01/02/04/08/16 工作于读模式时,在发送一个8 位数据后释放SDA 线并监视一个应答信号,一旦接收到应答信号CAT24WC01/02/04/08/16 ,继续发送数据,如主器件没有发送应答信号,器件停止传送数据且等待一个停止信号。
图3-11 应答时序
图3-12从器件地址位
A0 A1 和A2 对应器件的管脚1 、2 和3
a8 a9 和a10 对应存储阵列地址字地址
11、写操作
字节写:在字节写模式下,主器件发送起始命令和从器件地址信息R/W 位置零给从器件,在从器件产生应答信号后,主器件发送CAT24WC01/02/04/08/16 的字节地址,主器件在收到从器件的另一个应答信号后再发送数据到被寻址的存储单,AT24WC01/02/04
/08/16再次应答并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中CA T24WC0 1/02/04/08/16 不再应答主器件的任何请求。
图3-13 字节写时序
12、读操作
对CAT24WC01/02/04/08/16 读操作的初始化方式和写操作时一样仅把R/W 位置为1 有三种不同的读操作方式立即地址读、选择读和连续读。
立即地址读:
CAT24WC01/02/04/08/16 的地址计数器内容为最后操作字节的地址加1,也就是说如果上次读/写的操作地址为N,则立即读的地址从地址N+1开始。如果N=E,这里对24WC01 E=127、对24WC02 E=255、对24WC04 E=511、对24WC08 E=1023、对24WC16 E=2047 则计数器将翻转到0且继续输出数据。CAT24WC01/02/04/08/16 接收到从器件地址信号后R/W 位置1 ,它首先发送一个应答,信号然后发送一个8 位字节,数据主器件不需发送一个应答信号但要产生一个停止信号。
图
3.2.4单片机控制部分
单片机在这里主要是作为控制器使用,主要包括输入部分(红外接收模块,前面已
3-14立即地址读时序
经介绍)、输出部分、复位电路(图3-12)、晶振电路(图3-11)。
图3-15 晶振电路 图3-16 复位电路
(一)电路分析
复位电路,由两个电阻,一个极性电容,和一个按钮组成,只要按1下按钮S,就会在单片机9脚上产生一个高电平,单片机就会被复位。在此设计中为了使硬件电路简单,使用的是一个上电复位电路,当电路接通电源时单片机就会被复位。晶振电路是由两个电容和一个晶体组成,给单片机提供12MHZ的晶振。外接石英晶体(或陶瓷谐振器)及电容C1, C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1, C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF士10pF,而如使用陶瓷谐振器建议选择4pF士lOF。
(二)电路中所用的器件
STC89C52
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
单片机总控制电路如下图4—1:
1.时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图4—2(a) 所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟电路如图4—2(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生
一个两相时钟P1和P2,供单片机使用。
(a)内部方式时钟电路 (b)外部方式时钟电路
图4—2时钟电路
2.复位及复位电路
(1)复位操作
复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表一所示。
表一 一些寄存器的复位状态
寄存器
PC
ACC
PSW
SP
DPTR
P0-P3
IP
IE
TMOD
复位状态 0000H 00H 00H 07H 0000H FFH XX000000B 0X000000B 00H 寄存器 TCON TL0 TH0 TL1 TH1 SCON SBUF PCON 复位状态 00H 00H 00H 00H 00H 00H 不定 0XXX0000B
(2)复位信号及其产生
RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用颇率为6MHz的晶振,则复位信号持续时间应
超过4us才能完成复位操作。
产生复位信号的电路逻辑如图4—3所示:
图4—3复位信号的电路逻辑图
整个复位电路包括芯片内、外两部分。外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。
复位操作有上电自动复位相按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图4—4(a)所示。这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图4—4(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,
其电路如图4—4(c)所示:
(a)上
电复位 (b)按键电平复位 (c)按键脉冲复位
图4—4复位电路
上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复位信号高电平持续时间大于2个机器周期。
本系统的复位电路采用图4—4(b)上电复位方式。
STC89C52具体介绍如下: ① 主电源引脚(2根)
VCC(Pin40):电源输入,接+5V电源 GND(Pin20):接地线 ②外接晶振引脚(2根)
XTAL1(Pin19):片内振荡电路的输入端 XTAL2(Pin20):片内振荡电路的输出端 ③控制引脚(4根)
RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。 ALE/PROG(Pin30):地址锁存允许信号 PSEN(Pin29):外部存储器读选通信号
EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。 ④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7 P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7 P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7 P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7
STC89C52主要功能如表二所示。
表二 STC89C52主要功能 主要功能特性
输出端电路的电路图如3-14
图3-14 输出端电路
(一)电路分析
输出端通过一个运放LM358和一个三极管相连,再接继电器。继电器用于接220V电源插座,但处于安全考虑在实际电路中用发光二极管作演示。实现的效果是当遥控按键输入的信号是已学习过的信号时LED 就会在亮和灭之间切换。 (二)电路中所使用的器件
LM358
1、概述(Description):
LM358 内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电
源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。 2、特性(Features): 内部频率补偿
直流电压增益高(约100dB) 单位增益频带宽(约1MHz)
电源电压范围宽:单电源(3—30V); 双电源(±1.5 一±15V) 低功耗电流,适合于电池供电 低输入偏流
低输入失调电压和失调电流 共模输入电压范围宽,包括接地
差模输入电压范围宽,等于电源电压范围 输出电压摆幅大(0 至Vcc-1.5V)
3、引脚框图(LM358的封装形式有塑封8引线双列直插式和贴片式)。
继电器
1. 概述:
继电器是一种电子控制器件,它具有控制系统和被控制系统,通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带
动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。 2. 主要技术参数: 额定工作电压
继电器正常工作时线圈所需要的电压。根据继电器的型号不同,可以是交流电压,也可以是直流电压。 直流电阻
继电器中线圈的直流电阻,可以通过万能表测量。 吸合电流
继电器能够产生吸合动作的最小电流。在正常使用时,给定的电流必须略大于吸合电流,这样继电器才能稳定地工作。而对于线圈所加的工作电压,一般不要超过额定工作电压的1.5倍,否则会产生较大的电流而把线圈烧毁。 释放电流
继电器产生释放动作的最大电流。当继电器吸合状态的电流减小到一定程度时,继电器就会恢复到未通电的释放状态。这时的电流远远小于吸合电流。 触点切换电压和电流
继电器允许加载的电压和电流。它决定了继电器能控制电压和电流的大小,使用时不能超过此值,否则很容易损坏继电器的触点。 3. 继电器引脚图
4系统的软件设计
4.1软件设计
单片机上电复位后,首先对其内部定时器,串口初始化,并开启串口中断,然后监测P2口, P2口有一引脚输入为低电平并维持1S以上时进入自学习状态,用定时器及软件计数的方法,测量INT0引脚上输入高,低电平的宽度。INT0引脚平时为高电平,当接受到红外信号时,由于一体化红外接收头的反向作用,INT0引脚下跳至低电平,此为引导码,将测的高低电平的宽度保存在存储器中,并每次测得的低电平的宽度与引导码低电平宽度比较,若相等则识别为遥控命令码,存储后结束。再监测P2口,若为低电平并维持1S以上,为退出自学习状态。
软件的设计要实现三部分的功能,具体的说明和框图如下 4.1.1红外接收解码 (一)思路分析
红外遥控接收采用一体化红外接收头,它将红外接收二极管、放大、解调、整形等电路安装在一起,只有三个引脚。红外接收头的信号输出端接单片机的INT0脚。单片机中断INT0在红外脉冲下降沿时产生中断。
在中断期间启动定时器0进行计数,直到下一个负脉冲到来,将计数结果取出处理。电路使用12MHz晶振,定时器为1US计数一次。理论上代码“0” 的定时计数值为1125 (0x465)代 码 “1” 的定时计数值为 2250(0x8ca),但考虑到单片机晶振的误差,中断的延时,遥控器晶振的误差,测到的结果不一定等于理论值,只要范围在0x300~0x480就为有效的“0”码,计数值在Ox700~0x8ee之间为有效的“1”码。 (二)流程图
下图为红外接收解码软件设计流程图,红外遥控程序使用单片机中断0和定时器0。
4.1.2按键控制设计 (一)思路分析
学习型红外遥控开关的按键不仅控制输出的断开和接通,还控制单片机进行红外遥控学习。平时单片机处在按键检测和红外遥控检测状态,我们按住红外遥控开关的按键大于3秒就进入学习状态。在学习状态,我们释放按键,这时学习指示灯D1点亮。按一下红外遥控器的任意一个按键 ,如果学习成功 ,指示灯熄灭;如果在大约30秒内学习不成功,指示灯由点亮转为闪烁,表示学习失败,这时可以按一下红外遥控开关的任何一个按键或遥控器的任意键停止闪烁,返回平时扫描检测状态;如果没有上述动作则大约15秒自动返回。如果学习成功,按一下红外遥控器的对应按键就可以控制输出的断开和接通。平时按住按键小于2秒控制单片机的输出的断开和接通,这时学习指示灯没有点亮,对应的输出端有变化。
(二)软件流程图
红外遥控开关的按键软件设计流程图如下图所示:
4.1.3数据存储设计 (一)思路分析
I2C总线串行数据传送可以有多种读/写方式,现举三例:
(1)7位寻址主控器写方式。除应答信号由被控器发送外,起始和终止信号,寻址和数据字节都由主控器发送,被控器接收。
(2)7位寻址主控器读方式。起始和终止信号、地址字节、和数据字节的应答信号由主控器发送。地址字节应答信号和数据字节由被控器发送。
(3)7位寻址主控器读、写方式。起始信号和被控器地址在读和写时还可以由主控器重复发送一次。读或写两次数据字节传送方向正好相反。读、写全部结束后再由主控器发送终止信号。由于单片机AT89C51不带l2c总线接口,可以使用普通的I/O口模拟FC总线数据传送通信格式, 来应用AT24C02等带FC总线的外围接口器件。这样就能将
12C接口器件用在大量不具备FC接口的单片机系统中,充分发挥FC总线的优越性,这给设计带来很大方便。 (二)设计数据流程图
发送数据程序框
接收数据程序框
4.2Keil C
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前己极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS -51单机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS -51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Kei1即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM 、 20M以上空闲的硬盘空间、WIN98、NT, WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者一来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
5 总结
2011年3月,我开始了我的毕业论文工作,时至今日,终于基本完成。从最开始的不知所措,到慢慢进入状态,再到整体的思路清晰,其过程难以用语言表达。回忆这几个月的经历和感受,我感慨万千,在整个毕业设计过程中,有无数的的回忆和收获。
3月初,我与导师交流讨论并定下了做红外遥控密码锁的毕业设计。当开题报告下来的时候,我立刻查阅手头和图书馆的资料,但面对浩然的书海,我顿时有些茫然失措。我将自己的苦恼告诉了导师,在导师的精心指导下,终于对手头的工作和方向有了掌握。在搜集资料的过程中,我将从图书馆和网络上寻找的资料都记在一个笔记本上,这样便于我更精更好的对资料进行分类和研读,也为我与导师交流提供了很好的帮助。
4月初,在资料收集完毕以后,我开始着手论文的写作。在这个过程中,我将遇到的难题向导师请教,并与同学相互交流。在大家的帮助下终于慢慢完成了论文的写作。
4月低,完成论文的写作后,我开始对设计的硬件部分进行研究,并绘制了相关图形和电路设计。由于没有相关的绘制经验,在整个过程中遇到了许多困难,在导师指导下,我一步步学会了绘制的技巧。当完成所有打字、绘图、排版的任务后,虽然十分累,但内心十分高兴。
我不会忘记这几个月的时光,那些与导师交流讨论、与同学分享交流的日子将会是我一生中难忘的美好回忆。
通过这次毕业设计也让我对自己所学的知识,尤其是单片机和模拟电子有了更深刻的理解,也加强了我的编程能力。让我在以后的生活工作中更加游刃有余。
致谢
感谢在这次毕业设计中给我最大帮助的朱金荣老师,正是由于朱老师的谆谆教导,让我从开始的迷茫困惑中渐渐熟悉掌握了毕业设计的思路和方向。在论文写作和实物设计过程中,朱老师严谨的教学作风深深感染了我,我对他提出的各种疑难问题他都一一给我做了解答,并给我纠正了许多错误。这次毕业设计我学到许多单片机得知识,这对我以后的工作有极大地帮助。同时感谢学院良好的学习环境以及同组同学对我的帮助。
参考文献
(1) 马忠梅 ,籍顺心 ,张凯,马岩 《单片机是C语言应用程序设计》,北京航空航天
大学出版社,2009.2
(2) 李爱秋 《红外线遥控12位电子密码锁的设计》,温州职业技术学院学报第8卷
第一期,2008.3
(3) 张毅刚 ,刘杰 《单片机原理及应用》,哈尔滨工业大学出版社,2007.8
(4) keil c51 硬件编程中文手册
附录
//********会学习的遥控开关程序**********
//**********中断入口INT0************
//***********定时器0计数************
#include
//********************
#define _code_length 16//遥控最小长度
#define _time_delay 45//按键延时
#define _time_out 0xF0//学习最大延时
#define _control_number 14//控制的数目
//相关参数定义
sbit key_0=P2^0;//按键输入
sbit key_1=P2^1;
sbit out_0=P2^3;//开关输出
sbit out_1=P2^4;
sbit light=P3^3;//指示灯
sbit SCL=P3^4;//AT24C02
sbit SDA=P3^5;
unsigned char code_length=0; //遥控代码位长度
unsigned long code_t=0; //保存遥控代码(临时)
unsigned long code_tt=0; //保存遥控代码
bit bdata code_right=0; //接收代码是否正确
unsigned long d_code=0;//保存AT24C02输出的代码
unsigned char d_addr=0;//保存AT24C02输出的代码的头地址
bit bdata light_flash=0;//是否允许闪烁
unsigned char time_flash=0;//闪烁计数
unsigned char time_1=0;//定时器1中断计数
//********************预函数***********************
//AT24C02
void AT24C_start(void); //开始;返回0或1
void AT24C_stop(void); //停止
void AT24C_ack(void); //应答
void AT24C_unack(void); //不应答
unsigned char AT24C_cack(void); //检查应答
void AT24C_write(unsigned char d); //写一个字节
unsigned char AT24C_read(void); //读一个字节,返回数据
void delay(unsigned int); //延时子程序
unsigned char AT24C_write_addr(unsigned char addr,unsigned long dd); //
写
入指定地址的一个字节
unsigned long AT24C_read_addr(unsigned char addr); //读出指定地址的一个字节
//*************************************
void delay(unsigned int v)//延时
{
}
void code_learn(unsigned char number)//学习
{
light=0;//指示灯亮 TR1=0; TL1=0; TH1=0;//清零定时器1 TR1=1; time_1=0; code_right=0;//红外代码无效 while(code_right!=1 && time_1
} time_1=0; light_flash=1;//闪烁 time_flash=0;//闪烁计数清零 while(code_right==0 && key_0==1 && key_1==1 && time_flash
void key_control(unsigned char number)//判断按键
{
TR1=0; TL1=0; TH1=0;//清零定时器1 TR1=1; time_1=0; delay(800);//延时约8毫秒防抖动 switch(number) { case 0: { while(key_0==0 && time_1=_time_delay)//按键控制 { while(key_0==0);//wait if(key_0==0)
} } } else { } if(key_0==1 && time_1=_time_delay)//按键控制 { } else { } if(key_1==1 && time_1
} //***********************************AT24C02****************************** void AT24C_start(void)
{
SDA=1;
delay(1);
SCL=1;
delay(1);
SDA=0;
delay(1);
SCL=0;
}
void AT24C_stop(void) //
{
SDA=0;
delay(1);
SCL=1;
delay(1);
SDA=1;
delay(1);
}
void AT24C_ack(void) //
{
SCL=0;
delay(1);
SDA=0;
delay(1);
SCL=1;
delay(1); 停止应答
} delay(1); SDA=1;
void AT24C_unack(void) //不应答
{
SDA=1;
delay(1);
SCL=1;
delay(1);
SCL=0;
delay(1);
}
unsigned char AT24C_cack(void) //
{
delay(1);
SCL=0;
delay(1);
SDA=1;
delay(1);
SCL=1;
delay(1);
if(SDA==0)
{
SCL=0;
return(1);
}
else
{ 检查应答
} } return(0);
void AT24C_write(unsigned char temp) //写一个字节
{
unsigned char i;
SCL=0;
for (i=0;i
{
temp=temp
SDA=CY;
delay(1);
SCL=1;
delay(1);
SCL=0;
}
}
unsigned char AT24C_read(void) //
{
unsigned char i,j,temp=0;
for (i=0;i
{
SDA=1;
delay(1);
SCL=1;
delay(1);
if(SDA==1)
j=1;
else 读一个字节,返回数据
} } temp=(temp
unsigned char AT24C_write_addr(unsigned char addr,unsigned long dd) //写入指定地址的4个字节
{
unsigned char i,a[4];
for(i=4;i>0;i--)
{
a[i-1]=dd;
dd=dd>>8;
}
AT24C_start();
AT24C_write(0xa0);//写地址+写
if(AT24C_cack()==0)
{
AT24C_stop();//应答不对停止
return(0);
}
AT24C_write(addr);
if(AT24C_cack()==0)
{
AT24C_stop();//应答不对停止
return(0);
}
for(i=0;i
{
AT24C_write(a[i]);
if(AT24C_cack()==0)
{
AT24C_stop();
return(0);
}
}
AT24C_stop();
return(1);
}
unsigned long AT24C_read_addr(unsigned char addr) //节
{
unsigned char i;
unsigned long temp=0;
AT24C_start();
AT24C_write(0xa0);
if(AT24C_cack()==0)
{
AT24C_stop();
return(0);
}
AT24C_write(addr);
if(AT24C_cack()==0)
{
AT24C_stop();
return(0);
}
AT24C_start();
AT24C_write(0xa1);
读出指定地址的4个字
} { } for(i=0;i=3) { } else { } AT24C_ack(); AT24C_unack(); AT24C_stop(); return(0);
//**********判断代码子程序************
unsigned char d_code_x(unsigned int t)//判断红外位是"0"或"1"
{ if(t=0x300) return 0; else { if(t=0x700) return 1;
} } return 0xff;//错误
//*********** 接收代码中断 ************ void receive_code() interrupt 0 using 1 {
unsigned int temp; unsigned char dd_code; if(TR0==0) { } TH0=TL0=0; TR0=1; else { TR0=0; temp=TH0*256+TL0; TH0=TL0=0; TR0=1; dd_code=d_code_x(temp); if(dd_code==0||dd_code==1) { } code_t=(code_t=_code_length && code_right==0) {
} } } code_right=1; code_length=0; code_t=0; }
//定时器1,中断,定时约0.5
void time1() interrupt 3 using 2 {
}
void code_control(void)//红外遥控 {
unsigned char i; code_right=0; for(i=0;i=7 && light_flash==1) { time_1=0; light=~light; time_flash++; }
} } if(code_tt==d_code) { } switch(i) { } case 0: out_0=~out_0;break; case 1: out_1=~out_1;break;
//*********main*********** void main(void)
{
TMOD=0x11; //T0定时方式1,T1定时方式1 IT0=1; //INT0边沿触发 EX0=1; //外部中断0允许 TR0=0; //定时器0计数开关 TR1=1; //定时器1开 ET1=1; //定时器1中断开 EA=1; //打开CPU总中断请求 while(1) { if(key_0==0)//判断按键是否按下 { } if(key_1==0) { key_control(0);
} if(code_right==1) { EX0=0; code_control();
}
}
}
delay(100); EX0=1;