校验有错时不进行温度数据的改写。得出温度子程序流程图如下图所示。
发DS18B20复位指令 发跳过ROM指令 发读取温度指令 读取操作,CRC校验 9字节完? 温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如下图所示。
计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正
发DS18B20复位命令 CRC校验正确? 移入温度暂存器 结束 图(4)得出温度子程序流程图
发跳过ROM命令 发温度转换开始命令 结束 图(5)温度转换命令子程序流程图
6
负的判定。计算温度子程序流程图如下左图所示.
现实数据刷新子程序 现实数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。现实数据刷新子程序流程图如下右图所示.
开始 温度零下? 温度值取补码置 ‘一’标志 温度数据移入显示寄存器 计算小数位温 度BCD值 十位数0? 计算整数位温 度BCD值 置+标志 结束 百位数0? 十位数显示符号百位数不显百位数显示数据(不显示符号) 结束 图(6)计算温度子程序流程图
图(7)现实数据刷新子程序流程图
1.4 调试与结果
如图(8),在液晶1602的第一行显示的即为序列码,第二行为实时温度:
7
图(8)液晶显示结果
第二章 基于AT24C02电子密码锁的设计
2.1 系统功能
1、设置初始密码为“000000”
2、进入密码锁后,按键S11修改密码,并在液晶显示密码 S12为确定键,修改成功 S13为重新设置键 S14为退出密码锁
3、在未进入密码锁时,S11,S12,S13,S14无效 2.2 系统组成
图(8)系统组成图
8
本设计由STC89C52单片机的主芯片和具有I2C总线的接口的串行E2PROM AT24C02以及显示液晶LCD。
I2C要求有两条信号线,一条串行数据线SDA,一条串行时钟线SCL。每根连接到总线的器件都可以通过唯一的地址进行寻址。串行的8位双向数据传输,其位速率在标准模式下可达100Kbit/s,在快速模式下可达400Kbit/s,在高速模式下可达3.4Mbit/s。只有在总线空闲时才允许启动数据传送,在数据传送过程中当时钟线为高电平时数据线必须保持稳定状态不允许有跳变,时钟线为高电平时数据线的任何电平变化将被看作总线的起始或停止信号。
?起始信号
时钟线保持高电平期间数据线电平从高到低的跳变作为I2C 总线的起始信号
图(9)起始信号
?停止信号
时钟线保持高电平期间数据线电平从低到高的跳变作为I2C 总线的停止信号
图(10)停止信号
I2C 总线数据传送时每成功地传送一个字节数据后接收器都必须产生一个
9
应答信号应答的器件在第9 个时钟周期时将SDA 线拉低表示其已收到一个8 位 数据。
图(11)应答信号
?字节写
在字节写模式下主器件发送起始命令和写命令(字节为0XA0)给从器件,在从器件产生应答信号后,再发送数据到被寻址的存储单元.
图(12)逻辑“0”
?读操作的初始化方式和写操作时一样仅把R/W 位置为1 。
图(13)逻辑“1”
2.3 系统设计 2.3.1 总体设计
本设计使用STC89C52的两个I/O口,P2.0和P2.1,来模仿SDA和SCL,由于此实验只用一块AT24C02,写地址和读地址固定为0X80和0X81。通过时钟线SCL
1 0