陕西理工学院毕业设计论文
4.软件设计
本设计中用到的单片机是STC89C52,为了使编写的程序更加简单明了,采用C语言进行编程,用Keil软件进行编译,STC—ISP软件进行下载。 软件设计部分包括液晶显示程序、DS1302计时程序、DS18B20测温程序,独立式按键处理程序等。由于定时设置是通过独立式按键进行设置的,程序在按键扫描部分相对重要。在检测到被设置了定时任务时,系统要检测是否到达定时时间,执行相应的动作。图4.1为主程序流程图:
开始初始化按键扫描N是否定时?Y执行定时程序N是否到达定时时间或温度YN执行相应开关程序并显示
图4.1 主程序流程图
第 16页 共29页
陕西理工学院毕业设计论文
4.1 DS1302计时程序的编写
DS1302串行时钟芯片的主要组成部分:移位寄存器控制逻辑、振荡器、实时时钟以及RAM。为了初始化任何的数据传送,把RST置为高电平且把提供地址和命令信息的8位装入到移位寄存器中。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节传送还是多字节传送,开始8位指定的40个字节中的那个将被访问。在开始8个时钟周期把命令字装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加最大可达248的数。
DS1302总共有12个寄存器,其中的7个寄存器分别与日历、时钟相关,存放的数据位为BCD码形式。表3为它的日历、时间寄存器及控制字,其中奇数为读操作,偶数为写操作。
表4.1为寄存器地址和内容:
表4.1 寄存器地址和内容
写寄存器 秒 分 小时 日 月 星期 年 控制 86H 88H 8AH 8CH 8EH 87H 89H 8BH 8DH 8FH WP 80H 82H 84H 读寄存器 81H 83H 85H CH 0 12/2 4 0 0 0 0 0 0 0 10秒 10分 10 A/P 10日 0 0 10月 0 0 日 月 星期 年 0 0 0 0 0 时 秒 分 时 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 10年 0 0 如图4.2为DS1302的命令字节,每一数据传送由命令字节初始化。最高位有效位MSB必须为1。如果它是零,禁止写DS1302,位6为逻辑0指定时钟日历数据;逻辑1指定RAM数据。位1和5指定进行输入或输出的特定寄存器。最低
第 17页 共29页
陕西理工学院毕业设计论文
位LSB 为逻辑0指定进行写操作;逻辑1指定进行读操作,命令字节总是从最低有效为LSB开始输入。
7 6 5 4 3 2 1 1 RAM/CK A4 A3 A2 A1 A0 图4.2 DS1302的命令字节
如图4.3为1302的程序流程图:
开始变量出事换复位产生一个高电平使DS1302不具备写保护写1302地址复位将产生一个高电平延时一段时间NY写1302地址将改地址的数据读出延时一段时间N地址增加向该地址写数据地址增加数据读完了吗?数据写完了Y吗?显示数据
图4.3 DS1302实时时间流程图
第 18页
0
RD/W 共29页
陕西理工学院毕业设计论文
4.2 LCD1602显示电路程序编写
这部分的显示过程主要是显示从DS1302读取的日历和时钟数值,从DS18B20读取温度值,同时当检测到独立式按键有键按下时,显示相应的设置菜单等。
基本操作时序:
读状态:输入:RS=L,RW=H,E=H 输出:DO~D7=状态字 写状态:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲读数据:输入:RS=H,RW=H,E=H 写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲 1602显示流程图如图4.4所示: 开始 初始化 读状态 写命令
读数据 写数据 数据显示 返回
图4.4 1602显示流程图
输出:无
输出:DO~D7=数据 输出:无
第 19页 共29页
陕西理工学院毕业设计论文
4.3 DS18B20显示电路程序编写
DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。其设计流程图如图4.5所示。
测温开始复位DS18B20跳过ROM指令启动温度转换等待数据转换YN复位DS18B20读取温度值在线访问DS18B20完毕?
图4.5 温度采集子程序流程图
第 20页 共29页