基于单片机的防盗报警器的毕业设计(4)

2020-05-08 08:30

的写保护功能。其所具有的特性如下:

? 与400KHz I2C总线兼容 ? 1.8 到 6.0 伏工作电压范围 ? 低功耗 CMOS 技术

? 写保护功能:当WP为高电平时进入写保护状态 ? 页写缓冲器 ? 自定时擦写周期 ? 1,000,000 编程/擦除周期 ? 可保存数据 100 年

? 8 脚 DIP、SOIC或TSSOP 封装

图2-10 为24C04的管脚配置,同时在表2-2给出了各管脚简易功能描述。

图2-10 24C04管脚配置

表2-2 24C04管脚描述

图2-11 EEPROM电路原理图

如图2-11所示为本设计的EEPROM电路原理图。

3 程序设计

本系统的单片机程序利用Keil uVision V4.02进行程序设计,以下介绍整个系统的程序流程,具体程序参见附录。 3.1 主程序流程

开始 变量定义 端口初始化 数码管初始化 当前状态判断 无操作? No 报警? No Yes Yes 显示、计时 输入? No Yes 显示、保存 查找? No Yes 显示、保存

图3-1 主程序流程图

如3-1所示图所示为单片机的主程序流程图。首先进行各个模块的初始化工作,如变量定义、单片机端口和EERPOM端口初始化、显示模块初始化等。然后进入程序的主流程,判断系统的当前状态,扫描键盘输入确定状态后,执行相应的处理。 3.2 键盘输入模块的程序设计

本设计采用由软件消抖的非编码方式独立键盘电路,所以在进行键盘输入模块的程序设计时,需考虑两个过程:1、键盘按键的识别;2、消抖。

首先在程序中定义各个键盘的输入信号管脚,如下所示。在key_input=0时代表输号键被按下,其他按键同此。

sbit key_input =P1^0; //输号 sbit key_find

=P1^1; //查号

sbit key_reset =P1^2; //复位 sbit key_jingbao=P1^6; //警报信号

然后在一个子程序中实现键盘的识别及消抖。本系统中把键盘的输入状态作为整个系统的状态,所以定义一个uchar state(void)子程序,其返回值为键盘的当前状态,其定义如下:

#define state_null #define state_input #define state_find #define state_reset #define state_jingbao

0

//无按键状态

1 //输号键按下 2 //查询键按下 3 //复位键按下 4 //报警键按下

在uchar state(void)子程序中本设计利用变量keycount的条件自加来实现消抖和长短按键的识别过程。每次进入子程序时keycount清零,然后进入循环,keycount自加,同时查询按键状态:当keycount自加到N1时,表示长按,则返回状态值,退出子程序;当无按键按下时,退出按键查询循环,并判断keycount是否小于于N2,即是否为抖动,当keycount=N2时,为有效按键返回状态值。整个uchar state(void) 子程序流程如图3-2所示。

开始 Keycount=0 Keycount自加 No 按键? Yes Yes 保存按键值 No 抖动? No 返回按键值 长按? Yes 返回按键值 退出子程序

图3-2 主程序流程图

3.3 数码管显示模块的程序设计

由上章所述,本设计利用table数组保存字形码,作为显示代码表,如下所示: uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,

//0123456789

0x3e, 0x73, 0x7c, 0x40

//“U”-10,“P”-11,“b”-12,“-”-13

};

由table数组可知,总共可以显示0~9、U、P、b、-共14个字符。同时在程序中编写Display(uchar data_disp)函数,data_disp为要显示的字符,程序如下:

void Display(uchar data_disp) { }

if (data_disp>=13)

P0=table[13];

//不在表内 //显示“-” //表内 //查表显示

else

P0=table[data_disp];

对于LED指示灯,本设计中采用高电平点亮的方式,利用P0.7端口控制。由此在程序中定义sbit Led =P1^7,当LED=0时,输出低电平,LED灯灭,当LED=1时,输出高电平,LED灯亮。 3.4 EEPROM的驱动程序设计

本设计中利用EEPROM(24C04)来存储报警用的电话号码,24C04支持I2C总线数据传送协议,要在单片机系统中应用I2C总线的24C04做存储设备时,先要了解I2C总线的基本驱动方法,以下介绍24C04的I2C驱动程序的设计。 3.4.1 24C04的I2C总线构成及其协议

I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。I2C总线协议规定任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器,数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据发送或接收的模式。在本设计中AT89S52单片机作为主器件,24C04作为从器件。

通过器件地址输入端A0、A1的不同设置,可以实现将最多4个24C04器件连接到总线上。由上一章所述的电路设计,本设计中只用一个24C04,其地址为[A1、A0]为[0、0],写保护无效。242C04管脚描述如下:

SCL:串行时钟输入管脚,用于产生器件所有数据发送或接收的时钟。 SDA:双向串行数据/地址管脚,用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR)。

A0、A1、A2:器件地址输入端,用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0

WP:写保护管脚,如果 WP 管脚连接到 Vcc,所有的内容都被写保护,只能读;当 WP 管脚连接到 Vss 或悬空,允许器件进行正常的读/写操作。

I2C 总线协议定义如下:

1、总线空闲时,SDA、SCL为高电平,只有在总线空闲时才允许启动数据传送。

2、数据传输前,总线要求有一个START(开始位)位做为数据开始的标识,它的要求是SCL为高时,SDA有一个从高到低的电平跳变动作,完成这个动作后才可以进行数据传输,时序图参看图3-3中的“开始”。


基于单片机的防盗报警器的毕业设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年对口升学幼师专业语文二模试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: