基于单片机的万年历设计

更新时间:2024-05-19 09:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

引言

万年历是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可缺少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过了老式钟表,中标的数字化给人们的生活带来了极大的方便,而且大大地扩展了钟表原先单一的报时功能。诸如定时自动报警、查看年、月、日、星期等,最重要的是可加上其他一些辅助功能,如可加入温度、湿度等传感器即可获得即时信息,可广泛应用于如空调遥控器上的当前室温显示、热水器温度的显示、精密仪器机房的温、湿度显示等。所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常好的现实意义。

用此方法所设计的数字温度计,结构简单,体积较小,可靠性高,操作方便,测量精度高,只需接通电源便可进行及时有效的温度测量和当前的时间的知晓,在各行各业均具有较广泛的用途,发展前景良好,另外在系统中还添加了时钟芯片,可以方便实时地记录当前时间。

1

1 方案论证

1.1 系统功能定义

根据设计要求,考虑到系统的易用性,以及可扩展性,将系统分为主控模块,

显示模块,键盘模块,时钟模块,温度采集模块。各个模块通过主控模块相互联系,采用模块硬件与软件功能设计,做出模块如下:

根据当前的温度和时间进行测量 对测量的时间和温度进行处理 时钟模块测试当前时间 温度模块测试当前温度 键盘控制可调控 图1-1 系统硬件电路设计框图

1.2 总体方案

通过对系统功能的定义,可以将基于单片机的数字温度计采用温度传感器DS18B20作为测温元件用来满足温度测量,并将温度信号经由其本身所具有的A/D转换功能,转换成数字信号经单片机处理显示于液晶显示器,从而完成温度的测量和显示。

2

整个系统控制将由AT89C52单片机芯片为核心构成。选用DS18B20作为测温元件,DS12C887作为时钟芯片,LCD1602液晶作为显示器件,各个检测信号、显示信号可由单片机的I/O口进行。

同时能显示年、月、日、星期、时、分、秒,能对时间进行手动修正,采用24小时制,能自动处理润年。

设计任务:用单片机设计一个测温范围在-55~125℃的数字温度计,并可显示实时日历时钟。

设计要求:完成该系统的软硬件设计,学习掌握单片机采集温度的设计方法提高学习新知识、新技能的能力,培养独立设计的能力。

3

2 系统硬件电路设计

2.1 系统硬件功能划分

AT89C52主控模块 LCD1602显示模块 键盘模块 DS12C887时钟模块 温度采集模块

图2-1 系统硬件电路框图

主控模块采用性价比较高的单片机芯片,在其内部将预定好的程序储存,可通过程序的运行控制测温模块进行测温;测温模块主要是由DS18B20构成,将其与所测对象进行接触即可获取被测对象的

温度数据,而所测得的温度和时钟芯片测得的实时日历将通过显示模块的液晶显示器以数字形式显示;另外,键盘电路可对预设的温度上下限值和实时日历进行调整。

2.2 主控模块

2.2.1 主控模块功能分析

在本系统中,主控模块居于非常重要的地位。它是整个系统的中枢,系统运行所需的每个操作指令都要由其发出。它一方面控制着测温模块进行温度信息和时间信息的采集,另一方面也控制着显示模块的工作。最重要的是,由测温模块所采集到的

4

温度信息必须经由主控模块的处理才能在显示模块上显示,从而使整个系统进行正常的运转和工作。针对以上分析本系统主控模块中的单片机芯片采用了AT89C52芯片,此芯片功能强大,能够完全满足系统运行的需求。

2.2.2 AT89C52芯片的功能特性

AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。

其主要性能如下:

? 与MCS-51单片机产品兼容 ? 8K字节在系统可编程Flash存储器 ? 1000次擦写周期 ? 全静态操作:0Hz~33Hz ? 32个可编程I/O口线 ? 三个16位定时器/计数器 ? 八个中断源

? 全双工UART串行通道 ? 低功耗空闲和掉电模式 看门狗定时器

图2-2 AT89C52引脚结构图

5

在本系统中,将DS18B20的单数据总线与单片机的P3.6端口相连,用一根数据线就完成了测温模块与单片机芯片的连接。

2.3 温度单元

DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

图2-3 DS18B20的引脚

1 DS18B20的引脚介绍

DS18B20的封装及引脚排列见图2-3,其引脚功能描述见表图表2-1

2 DS18B20 ROM 操作指令

一旦总线主机检测到从器件的存在,它便可以发出器件ROM操作命令之一。所有ROM操作命令均为8位长。

读ROM [33h ]:此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48

6

表2-1 DS18B20的引脚功能描述

序号 名称 1 2 GND DQ 引脚功能描述 接地 数据输入/输出引脚。漏极开路。当被用着在寄生电源下,也可以向器件提供电源。 3 VDD 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。 信序列号,以及8位的CRC。此命令只能在总线上仅有一个DS18B20的情况下使用。

符合ROM [55h]:此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。只有与64位ROM序列严格相符的DS18B20才能对后继的存储器操作命令作出响应。

跳过ROM [CCh]:在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而直接进行存储器操作以节省时间。

搜索ROM[F0h]:当系统开始工作时,总线主机可能不知道单总线上的器件个数或不知道其64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从器件的64位编码。

警告搜索[ECh]:此命令的流程与搜索ROM命令相同。但是仅在最近一次温度测量出现警告的情况下,DS18B20才对此命令作出响应。 3 DS18B20 RAM操作指令

写暂存存储器 [4Eh]:这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复信命令来中止写入。

读暂存存储器 [BEh]:这个命令读取暂相隔器的内容。读取将从第1个字节开始,一直进行下去,直到第9(CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

复制暂存存储器 [48h]:这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。

温度变换 [44h]:这条命令启动一次温度转换而无需其它数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做温度转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。如果使用寄生电顺势,总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。

读忙[B8h]:在这条命令发出之后发出读数据隙,器件会输出温度转换忙的标识:0为忙,1为准备就绪。

读电源 [B4h]:若把这条命令发给DS18B20后,发出读时间隙,器件会返回它的电源模式:0为寄生电源,1为外部电源。

7

2.4 显示模块

LCD1602基本特性: ???????低电源电压(VDD:+3.0-+5.5V) 显示分辨率:128×64点

内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) 内置128个16×8点阵字符 2MHZ时钟频率

显示方式:SIN、半透、正显

背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 通讯方式:串行、并行可选 ???内置DC-DC转换电路,无需外加负压 无需片选信号,简化软件设计

工作温度:0℃—-+55℃,存储温度:-20℃—+60℃

控制器接口信号说明:

1、RS,R/W的配合选择决定控制界面的4种模式 RS R/W 功能说明 L L MPU写指令到指令暂存器(IR) L H 读出忙标志(BF)及地址记数器(AC)的状态 H L MPU写入数据到数据暂存器(DR) H H MPU从数据暂存器(DR)中读出数据

2、E信号

E状态 执行动作 结果 高——>低 I/O缓冲——>DR 配合/W进行写数据或指令 高 DR——>I/O缓冲 配合R进行读数据或指令 低/低——>高 无动作

忙标志BF: BF标志提供内部工作情况。BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块工作状态。

8

字型产生ROM(CGROM): 字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DFF的状态是指令DISPLAY ON/OFF信号控制的。

显示数据RAM(DDRAM ):模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM 的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM 字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0—F7FFH)。

字型产生 RAM(CGRAM):字型产生RAM提供图象定义(造字)功能,可以提供四组 16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。

地址计数器AC: 地址计数器是用来贮存DDRAM/CGRAM 之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS 为“0”时而R/W 为“1”时,地址计数器的值会被读取到DB6—DB0中。

光标/闪烁控制电路:此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。

指令说明

模块控制芯片提供两套控制指令:基本指令和扩充指令,其指令如下: 指令表2-2:(RE=0:基本指令)

指 指 令 码 功 能 RR/DD6 D5 D4 D3 D2 D1 D0 令 S W 7 将DDRAM填满\并且设定清除 0 0 0 0 0 0 0 0 0 1 DDRAM的地址计数器(AC)到显示 \地址 设定DDRAM的地址计数器(AC)0 0 0 0 0 0 0 0 1 X 归位 到\并且将游标移到开头原

9

显示状0 0 态开/关 进入点 设定 0 0 游标或显示移0 0 位控制 功能 设定 0 0 0 0 0 0 1 D C B 0 0 0 0 0 1 I/D S 0 0 0 1 S/C R/L X X 0 0 1 DL X RE X X 点位置;这个指令不改变DDRAM 的内容 D=1: 整体显示 ON C=1: 游标ON B=1:游标位置反白允许 指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位 设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 DL=0/1:4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 设定CGRA0 M 地址 设定DDRA0 M 地址 读取忙标志和0 地址 写数据1 到RAM 0 0 1 ACACACACACAC设定CGRAM 地址 5 4 3 2 1 0 设定DDRAM 地址(显示位址) ACACACACACAC第一行:80H-87H 5 4 3 2 1 0 第二行:90H-97H 0 1 0 1 0 读出1 1 RAM的值

读取忙标志(BF)可以确认内部动BACACACACACACAC作是否完成,同时可以读出地址计F 6 5 4 3 2 1 0 数器(AC)的值 数据 将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM) 数据 从内部RAM读取数据D7——D0 (DDRAM/CGRAM/IRAM/GRAM 指令表2-3:(RE=1:扩展指令) 指 令 待命 模式 卷动地址

指 令 码 功 能 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 进入待命模式,执行其他指令都棵0 0 0 0 0 0 0 0 0 1 终止 待命模式 SR=1:允许输入垂直卷动地址 0 0 0 0 0 0 0 0 1 SR SR=0:允许输入IRAM和CGRAM10

开关开启 反白 0 0 选择 睡眠 0 0 模式 扩充 功能 0 0 设定 设定绘图RAM 0 0 地址 0 地址 选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R00 0 0 0 1 R1 R0 =00,第一次设定为反白显示,再次设定变回正常 SL=0:进入睡眠模式 0 0 0 1 SL X X SL=1:脱离睡眠模式 CL=0/1:4/8位数据 RE=1: 扩充指令操作 0 1 CL X RE G 0 RE=0: 基本指令操作 G=1/0:绘图开关 设定绘图RAM 先设定垂直(列)地址0 0 0 AC3 AC2 AC1 AC0 AC6AC5…AC0 AC6 AC5 AC4 AC3 AC2 AC1 AC0 再设定水平(行)地址AC3AC2AC1AC0 将以上16位地址连续写入即可 0 0 1

备注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。

字符与图形显示

字符显示:带中文字库的128X64-0402B每屏可显示4行8列共32个16×16 点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及 CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H (其代码分别是0000、0002、0004、0006 共4 个)显示自定义字型,02H~7FH 显示半宽ASCII 码字符,A1A0H~F7FFH 显示8192 种GB2312中文字库字形。字符显示RAM 在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如表2-4所示:

11

80H 90H 88H 98H 81H 91H 89H 99H 82H 92H 8AH 9AH 83H 93H 8BH 9BH 84H 94H 8CH 9CH 85H 95H 8DH 9DH 86H 96H 8EH 9EH 87H 97H 8FH 9FH 表2-4字符显示RAM地址

图形显示:先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)。垂直地址范围AC5...AC0,水平地址范围AC3...AC0。绘图RAM的地址计数器(AC)只会对水平地址(X轴) 自动加一,当水平地址=0FH时会重新设为00H但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需要重新设定。GDRAM的坐标地址与资料排列顺序如图2-4:

图2-4 GDRAM的坐标地址与资料排列顺序

2.5 时间模块

DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887 中自带有锂电池,外部掉电时,其内部时间信息还能够保持10 年之久;对于一天内的时间记录,有12 小时制和24 小时制两种模式。在12 小时制模式中,用AM和PM 区分上午和下午;时间的表示方法

12

也有两种,一种用二进制数表示,一种是用BCD 码表示;DS12C887 中带有128 字节RAM,其中有11 字节RAM用来存储时间信息,4 字节RAM用来存储DS12C887 的控制信息,称为控制寄存器,113 字节通用RAM 使用户使用;此外用户还可对DS12C887 进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。其外观示意图如图2-5所示:

图2-5

引脚说明:

GND、 VCC:直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;当VCC的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;当VCC的输入小于+3V时, DS12C887会自动将电源发换到内部自带的锂电池上,以保证内部的电路能够正常工作

MOT:模式选择脚,DA12C887有两种工作模式,即Motorola模式和Intel模式,当MOT接VCC时,选用的工作模式是Motorola模式,当MOT接GND时,选用的是Intel模式本文主要讨论Intel模式

13

SQW:方波输出脚,当供电电压VCC大于4.25V时,SQW脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出

AD0~AD7:复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出现在AD0~AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0~AD7上的数据信息

AS:地址选通输入脚,在进行读写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0~AD7上的地址信息,不论是否有效,DS12C887都将执行该操作

DS/RD:数据选择或读输入脚,该引脚有两种工作模式,当MOT接VCC时,选用Motorola工作模式,在这种工作模式中,每个总线周期的后一部分的DS为高电平,被称为数据选通在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0~AD7上,以供外部读取在写操作中,DS的下降沿将使总线 AD0~AD7上的数据锁存在DS12C887中;当MOT接GND时,选用Intel工作模式,在该模式中,该引脚是读允许输入脚,即Read Enable

R/W:读/写输入端,该管脚也有2种工作模式,当MOT接VCC时,R/W工作在Motorola模式此时,该引脚的作用是区分进行的是读操作还是写操作,当R/W为高电平时为读操作,R/W为低电平时为写操作;当MOT接GND时,该脚工作在Intle模式,此时该作为写允许输入,即Write Enable CS:片选输入,低电平有效

IRQ:中断请求输入,低电平有效,该脚有效对DS12C887内的时钟、日历和RAM中的内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接VCC,这样可以保证DS12C887在掉电时,其内部控制寄存器不受影响[7]

2.6 键盘模块

在本设计中键盘模块采用的是4*1独立键盘。键盘采用的是Tack Switch按钮开关,它具有自动恢复(弹回)的功能。当我们按下按钮时,其中的接点接通(或切断),

14

放开按钮后,接点恢复为切断(或接通)。按照尺寸区分,电子电路或微型计算机所使用的Tack Swith可分为8mm、10mm、12mm等。虽然Tack Switch有4个引脚,但实际上,其内部只有一对a接点,即其中两个引脚是内部相连通的,而另外两个引脚内部也是相连通的。

2.7 电路原理图的绘制

在硬件的设计前期,根据框图对电路中可能出现的电路,进行了模拟实验,并根据实验结果对后期的硬件设计进行了合理化的修改完善。在第一章中已分析了系统并绘制了框图,并根据框图分别设计了各部分电路。由于温度传感器与时钟芯片集成度较高,所以在硬件电路设计时不需要太多其他元件即可实现预期功能。

15

3 软件设计

3.1 主控程序设计

主程序才用模块化设计,流程图如图3-1所示。

从上面主程序看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,首先是初始化各模块,之后调用键盘完成时间的调整,调用日历子程序完成日历时钟的初始化和时间数据的读写,调用温度子程序完成温度芯片的初始化和读写,调用闹钟子程序当时间达到定时时间时闹铃打开,一分钟后自动关闭,调用显示子程序显示数据,最后又转到键盘程序来回循环。

初始化部分主要有初始化定时器部分和和一些寄存器、标志位、初始化时间等 对定时器T0初始化时,首先置初值,CPU开中断,定时器T0开中断,并且开始计数,而对定时器T1初始化时,首先置初值,,定时器T1关中断,并且停止计数,只有收到命令时才能产生中断。

寄存器的初始化主要是初始化执行程序时用到的部分RAM空间,防止程序执行时带来混乱。

标志位初始化是对时间调整时判断是调分还是调时等而专设的位标志,初始化过程中标志位全部置0,即开始时是处于显示状态,而不是调整状态,这一点在程序中相当明了。

初始化时间是开机时显示的时间,并通过调用日历时钟的写程序来完成时间的置初值。

16

调日历子程序 调键盘子程序 初始化时间 标志位初始化 初始化T0并开中断 开始 初始化T1并关中断 寄存器初始化

调温度子程序

调显示子程序

调闹钟子程序

结束 图3-1主程序流程图

3.2 键盘子程序设计

多功能键盘程序的设计是本设计的难点,也是完成本设计的重点,当有键按下时,调用10ms延时程序,再判断是否有键按下无则返回,若有先调用显示程序再判断是否松开,否则再转到显示程序,这样避免了在按键松开之前能正常显示。其中K1键功能最多,通过判断K1键按下的次数来判断是调时间还是定时,并对对应的位置闪

17

烁。本键盘深度为9级,即连续按下K1键10次时则返回到原来界面。当判断键值为1时则为调秒状态,对应的秒低位闪烁,为2时为调分状态并分闪烁,为3时为调时状态并时闪烁,为4时为调日状态并日闪烁,为5时为调月状态并月闪烁,为6时为调年状态并年闪烁,为7时为调星期状态并星期闪烁,为8时为定时器设定分状态并分闪烁,为9时为定时器设定时状态并时闪烁。K2为加1键,K3为减1键,K4为总返回键,即在调时见时不用只有按下K1键值为10才返回,而通过按下K4键即可返回。键盘子程序流程图如图3-2所示。

在键盘子程序中当判断键值为1~7时是对时间秒、分、时、日、月、年、星期调整原理和调秒相同,当判断键值为8、9时是定时器分和时调整,此时秒显示0,分和时显示为当前定时值,但是没有送DS12C887这点和前不同,由于键盘流程图非常复杂,在此省略了调分时等。

18

开始 有键按下? 延时10ms Y K2按下? N K3按下? N K4按下? N K1按下? Y 调显示 N Y 调显示 Y 有键按下? Y 键值清0 N 标志位清0 返回Y K1为0? N 键值加1 下页3 下页1

19

1 3 N 键值为1? Y 秒标志位置1 键值为? 调显示 秒闪烁 Y 。。。。。。。。。。。。。。。。。。。。。。。 K2按下? N K3按下? Y 秒减1 秒加1 。。。。。。。。。。。。 秒数据送 DS1302 图3-2键盘子程序流程图

3.3 温度子程序

由于DS18B20采用的是单总线协议方式,即在一根数据线上实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线

20

器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

主机发出复位脉冲 最小值:480us 最大值:960us Vcc GND

等待15~60us 主机接收最短时间:480us DS18B20应答60~240us 图3-3 DS18B20的初始化时序

主机写“0”时间隙 Vcc GND

DS18B20采样 最小标准 15u15u30u1us< 15uDS18B20采样 最小标准 15u30u1us主机写“1”时间隙 图3-4 DS18B20的写时序

主机读“0”时间隙 Vcc GND

主机采样 15us 45us 1us< 15us 主机采样 1us< 主机读“1”时间隙 图3-5 DS18B20的读时序

21

初始化DS18B20 发送读温度指令 读温度 计算温度实际值 启动下次温度转换 显示温度 结束 图3-6 DS18B20读温度流程图

输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20转换后的温度值以2字节16位补码形式存放在高速暂存存储器的第1、2个字节里,高位在前,低位在后。所以读取温度时,要分两次进行。读温度子程序如图3-6所示。

3.4 日历时钟子程序设计

系统时钟应用了时钟日历芯片DS12C887。该硬件电路设计简单,抗干扰能力强。 该电路的示意图如图4-1所示。如图,为了使DS12C887所处模式为Intel模式,将其MOT端与GND端相连共同接地。AD0~AD7端则分别接AT89C52的P0口。为了避免DS12C887被清除其日期记录,将其复位端口(在低电平下有效)与电源端口相连。由于使用了STC89C52的P0口 故在其前面添加了10kΩ的排阻。

22

89c52 13 32 33 8 34 7 35 36 6 37 38 5 39 12 13 12c887 14 11 15 10 17 9 8 7 18 6 19 5 4 1 24(vcc) 图3-7

3.5 显示子程序设计

电子产品是否实用其中显示占了很重要的地位,很多数人都渴求用视觉效果好,范围广,直观明了,LCD符合以上的要求,但相应的硬件设计相对复杂。

本设计的显示部分具有消隐和闪烁功能,当时分秒等高位为0时显示消隐, 此时在读时间时更加明了,但低位不能显示消隐。闪烁功能也是本设计的一个难点,本设计采用8个位标志位,其中一个标志位通过用定时器0产生一个周期大约为每秒1.5次,使闪烁时效果达到最好。此时定时器采用定时中断的工作方式,这样可以充分利用CPU资源。另外7个标志位是时分秒等的位标志位,当秒标志位置1时即秒开闪烁,与用中断产生的标志位相结合,即在一个周期内为0时此时消隐为1时开显示,这样就使在调时间时对应的位闪烁。

23

4 系统调试

单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC机上用模拟开发软件进行了检测和调试,并运行成功,最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。

4.1 软件调试

本设计是在Professiona软件和Keil 51软件相结合调试的,完全用仿真软件在PC机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。

目标程序纠错:该阶段工作通常在目标程序编辑时就完成。一般来说,仿真软件能为用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。

子程序调试:程序设计通常采用模块程序设计,调试时可对一个个子程序分别进行调试,设置好入口条件,然后采用单步运行或断点运行方式,检查系统CPU现场、RAM和I/O口状态,看程序执行结果是否符合设计要求。

整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。

用软件模拟器调试不需任何在线仿真器,也不需要用户样机,直接就可以在PC机上开发和调试。调试和修改完毕后可以直接使用编程器将软件固化在目标系统ROM中,然后投入运行。

24

4.2 硬件调试

单片机应用系统的硬件调试和软件调试是分不开的,许多硬件故障在软件调试时才能发现,但通常要先排除系统中明显的硬件故障。调试工作可以分为四步:

线路检查:根据硬件逻辑设计图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,必要时可用万用表检测线路通断情况。

电源调试:样机的第一次通电测试很重要,若样机中存在电源故障,则加电后将造成器件损坏。调试的方法有两种:一种是断开样机稳压电源的输出端,检查空载时电源工作情况;另一种是拔下样机上的主要集成芯片,检查电源的负载能力(用假负载)。确保电源无故障并性能符合设计要求。

通电检查:在确保电源良好前提下,接通电源。最好在电源与其余电路之间串接一个电流表。若接通后电流很大,必须立即切断电源。电源大得超出正常范围,说明电路中有短路或故障。通电检查的主要目的是看系统是否存在短路或由元器件损坏、装配错误引起的电流异常。

检查芯片的逻辑关系是否出错:加电后检查各芯片插座上相关引脚的电位,仔细测量相应的输入输出电平是否正常。单片机系统大都是数字逻辑电路,使用电平检查法可首先查出逻辑设计是否正确,选用器件和连接关系是否符合要求等。

25

结 论

硬件系统关系到所要设计的电子产品好怀,如系统抗干扰性等,所以要合理的安排尽量减少干扰提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以我们要有动手的好习惯。

软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少CPU利用资源,具有执行效率高等优点,本设计用到定时器中断以减少对CPU的占用,更好的处理其他功能。软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。

在这次设计中我学到了很多,也发现了自己的不足,也难免有错误之处,敬请提出!

26

致 谢

首先感谢学校在毕业之际给我们一个可能让我们把所有的知识总结起来的机会,通过这次毕业设计,使我对以前所学的知识有了一个整体上的概括,也让我们具体了解到了每个元件在电路中的具体作用,了解到了它的功能、结构。

其次我要衷心的感谢尤连荣老师对我整个毕业设计由始至终地悉心督促指导,并提供了大量而又详实的资料给我,使我从困惑迷茫的初期走向论文的顺利完成,在完成论文的同时也深受启发和教育,使我受益终生。最后接受我最诚挚的谢意!

27

参考文献

[1] 李全利单.片机原理及接口技术(第2版). 北京:高等教育出版社,2004 [2] 张玉良.单片机原理及控制技术(第2版).北京:机械工业出版社,2005 [3] 张毅刚.单片机原理及应用. 北京:高等教育出版社,2006

[4] 李光飞 .单片机课程设计实例指导(第2版).北京:北京航空航天出版社,2004 [5] 李 华.MCS-51单片机实用接口技术.北京:北京航空航天出版社,1997 [6] 徐玮 徐富军 沈建良. C51单片机高效入门.北京:机械工业出版社 2007 [7] 梅开乡.数字逻辑电路(第2版).北京:电子工业出版社,2005

[8] 杨素行.模拟电子技术基础简明教程(第2版).北京:高等教育出版社,2004 [9] 马忠梅.单片机的C语言应用程序设计(第3版) .北京:航空航天大学出版社,2003

[10] 吉 雷.Protel99从入门到精通.西安:西安电子科技大学出版社,2004 [11] 赵负图.传感器集成电路手册.北京:化学工业出版社,2002

[12] 冯建兰、夏术泉.单片机技术实用教程.武汉:华中科技大学出版社,2004 [13] 谢自美.电子线路设计.实验.测试.武汉:华中科技大学出版社,2003 [14] 任德齐.单片机原理与应用.北京:电子工业出版社,2001

28

附录

/****************************************************************/

ZHUAN BIT 50H ;闪烁标志位辅助标志位 ZHUAN1 BIT 51H ;年开闪烁的标志位 ZHUAN2 BIT 52H ;月开闪烁的标志位 ZHUAN3 BIT 53H ;日开闪烁的标志位 ZHUAN4 BIT 54H ;时开闪烁的标志位 ZHUAN5 BIT 55H ;分开闪烁的标志位 ZHUAN6 BIT 56H ;秒开闪烁的标志位 ZHUAN7 BIT 57H ;星期开闪烁的标志位 DQ EQU P1.7

/***************************************************************/

ORG 0000H

LJMP START ;开始并初始化 ORG 000BH ;T0中断处处 LJMP ZDUAN ORG 001BH LJMP ZDUAN2

ZDUAN:MOV TH0,#00H ;使ZHUAN由正到负周期大约为1.5即当开闪烁时

;每秒大约闪烁1.5次环境

MOV TL0, #00H DJNZ R7,ZDUAN1 CPL ZHUAN MOV R7,#5 ZDUAN1:RETI

/****************************************************************/

ZDUAN2:MOV TH1,#0FCH MOV TL1,#43H

CPL P3.0

29

RETI

开始

/************************/ ORG 0100H START:MOV SP,#70H MOV TMOD,#11H MOV TH0,#00H MOV TL0,#00H

MOV TH1,#0FCH MOV TL1,#43H

SETB EA SETB ET0 SETB TR0

CLR ZHUAN1 CLR ZHUAN2 CLR ZHUAN3 CLR ZHUAN4 CLR ZHUAN5 CLR ZHUAN6 CLR ZHUAN7 MOV R7,#5

MOV 5FH,#00H MOV 30H,#00H MOV 31H,#00H MOV 32H,#12H MOV 33H,#09H MOV 34H,#04H MOV 35H,#00H MOV 36H,#00H MOV R0,#30H MOV R2,#7

30

MOV A,#0BEH LCALL WRITE CHUSHI:MOV A,@R0 LCALL WRITE INC R0

DJNZ R2,CHUSHI 主程序

/***********************/ MAIN:LCALL JIAN LCALL RILI LCALL WENDU LCALL XIAN LJMP CLAK SJMP MAIN

键盘程序

/************************/ JIAN:MOV P1,#0FFH MOV A,P1 CPL A JNZ JI1 LJMP JIAN5 JI1:LCALL DELAY MOV A,P1 CPL A JNZ JI2 LJMP JIAN5 JI2:JNB P1.1,JIAN2 JNB P1.2,JIAN2 JIAN0:MOV P1,#0FFH JNB P1.3,JIAN3 JNB P1.0,JIAN1

31

LJMP JIANX JIAN1:LCALL DELAY JB P1.0,JIANX JIAN11:LCALL XIAN JNB P1.0,JIAN11 MOV A,5FH ADD A,#1 MOV 5FH,A CJNE A,#10,JIANX LJMP JIAN3 JIANX:MOV A,5FH CJNE A,#1,JIA1 LJMP TIAOM JIA1:MOV A,5FH CJNE A,#2,JIA2 LJMP TIAOF JIA2:MOV A,5FH CJNE A,#3,JIA3 LJMP TIAOS JIA3:MOV A,5FH CJNE A,#4,JIA4 LJMP TIAOR JIA4:MOV A,5FH CJNE A,#5,JIA5 LJMP TIAOY JIA5:MOV A,5FH CJNE A,#6,JIA6 LJMP TIAON JIA6:MOV A,5FH CJNE A,#7,JIA7 LJMP TIAOX

32

JIA7:MOV A,5FH CJNE A,#8,JIA8 LJMP TIAODF JIA8:LJMP TIAODS

JIAN3:CLR ZHUAN1 CLR ZHUAN2 CLR ZHUAN3 CLR ZHUAN4 CLR ZHUAN5 CLR ZHUAN6 CLR ZHUAN7 MOV 5FH,#00H JIAN2:LCALL XIAN MOV A,P1 CPL A JNZ JIAN2 JIAN5:RET

调秒

/************************/ TIAOM:SETB ZHUAN6 LCALL XIAN JNB P1.1,MIAOZ JNB P1.2,MIAOJ LJMP JIAN0

MIAOZ:LCALL DELAY JNB P1.1,MIAOZ1 LJMP JIAN0 MIAOZ1:LCALL XIAN JNB P1.1,MIAOZ1 MOV A,30H ADD A,#1

33

DA A MOV 30H,A

CJNE A,#60H,MIAOZ2 MOV 30H,#00H LJMP MIAOZ2

MIAOJ:LCALL DELAY JNB P1.2,MIAOJ1 LJMP JIAN0 MIAOJ1:LCALL XIAN JNB P1.2,MIAOJ1 MOV A,30H MOV B,#10H DIV AB MOV 61H,B MOV B,#10 MUL AB ADD A,61H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 30H,A

CJNE A,#96H,MIAOZ2 MOV 30H,#59H MIAOZ2:MOV A,30H ANL A,#0FH MOV 40H,A MOV A,30H SWAP A ANL A,#0FH

34

MOV 41H,A

MOV A,#80H LCALL WRITE MOV A,30H LCALL WRITE LCALL XIAN LJMP JIAN0 RET

调分

/***********************/ TIAOF:CLR ZHUAN6 SETB ZHUAN5 LCALL XIAN JNB P1.1,FENZ JNB P1.2,FENJ LJMP JIAN0

FENZ:LCALL DELAY JNB P1.1,FENZ1 LJMP JIAN0 FENZ1:LCALL XIAN JNB P1.1,FENZ1 MOV A,31H ADD A,#1 DA A MOV 31H,A CJNE A,#60H,FENZ2 MOV 31H,#00H LJMP FENZ2

FENJ:LCALL DELAY JNB P1.2,FENJ1 LJMP JIAN0

35

FENJ1:LCALL XIAN JNB P1.2,FENJ1 MOV A,31H MOV B,#10H DIV AB MOV 62H,B MOV B,#10 MUL AB ADD A,62H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 31H,A CJNE A,#96H,FENZ2 MOV 31H,#59H FENZ2:MOV A,31H ANL A,#0FH MOV 42H,A MOV A,31H SWAP A ANL A,#0FH MOV 43H,A

MOV A,#82H LCALL WRITE MOV A,31H LCALL WRITE LCALL XIAN LJMP JIAN0 RET

36

调时

/**************************/ TIAOS:CLR ZHUAN5 SETB ZHUAN4 LCALL XIAN JNB P1.1,SHIZ JNB P1.2,SHIJ LJMP JIAN0

SHIZ:LCALL DELAY JNB P1.1,SHIZ1 LJMP JIAN0 SHIZ1:LCALL XIAN JNB P1.1,SHIZ1 MOV A,32H ADD A,#1 DA A MOV 32H,A CJNE A,#24H,SHIZ2 MOV 32H,#00H LJMP SHIZ2

SHIJ:LCALL DELAY JNB P1.2,SHIJ1 LJMP JIAN0 SHIJ1:LCALL XIAN JNB P1.2,SHIJ1 MOV A,32H MOV B,#10H DIV AB MOV 63H,B MOV B,#10 MUL AB

37

ADD A,63H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 32H,A CJNE A,#96H,SHIZ2 MOV 32H,#23H SHIZ2:MOV A,32H ANL A,#0FH MOV 44H,A MOV A,32H SWAP A ANL A,#0FH MOV 45H,A

MOV A,#84H LCALL WRITE MOV A,32H LCALL WRITE LCALL XIAN LJMP JIAN0 RET

调日

/***********************/ TIAOR:CLR ZHUAN4 SETB ZHUAN3 LCALL XIAN JNB P1.1,RIZ JNB P1.2,RIJ LJMP JIAN0

38

RIZ:LCALL DELAY JNB P1.1,RIZ1 LJMP JIAN0 RIZ1:LCALL XIAN JNB P1.1,RIZ1 MOV A,33H ADD A,#1 DA A MOV 33H,A CJNE A,#32H,RIZ2 MOV 33H,#00H LJMP RIZ2 RIJ:LCALL DELAY JNB P1.2,RIJ1 LJMP JIAN0

RIJ1:LCALL XIAN JNB P1.2,RIJ1 MOV A,33H MOV B,#10H DIV AB MOV 64H,B MOV B,#10 MUL AB ADD A,64H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 33H,A CJNE A,#96H,RIZ2

39

MOV 33H,#31H RIZ2:MOV A,33H ANL A,#0FH MOV 46H,A MOV A,33H SWAP A ANL A,#0FH MOV 47H,A

MOV A,#86H LCALL WRITE MOV A,33H LCALL WRITE LCALL XIAN LJMP JIAN0 RET

调月

/***********************/ TIAOY:CLR ZHUAN3 SETB ZHUAN2 LCALL XIAN JNB P1.1,YUEZ JNB P1.2,YUEJ LJMP JIAN0

YUEZ:LCALL DELAY JNB P1.1,YUEZ1 LJMP JIAN0 YUEZ1:LCALL XIAN JNB P1.1,YUEZ1 MOV A,34H ADD A,#1 DA A

40

本文来源:https://www.bwwdw.com/article/dwm7.html

Top