51单片机的18B02液晶显示温度与万年历显控制系统.docx

上传人:b****6 文档编号:13702204 上传时间:2023-06-16 格式:DOCX 页数:44 大小:310.38KB
下载 相关 举报
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第1页
第1页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第2页
第2页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第3页
第3页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第4页
第4页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第5页
第5页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第6页
第6页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第7页
第7页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第8页
第8页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第9页
第9页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第10页
第10页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第11页
第11页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第12页
第12页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第13页
第13页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第14页
第14页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第15页
第15页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第16页
第16页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第17页
第17页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第18页
第18页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第19页
第19页 / 共44页
51单片机的18B02液晶显示温度与万年历显控制系统.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

51单片机的18B02液晶显示温度与万年历显控制系统.docx

《51单片机的18B02液晶显示温度与万年历显控制系统.docx》由会员分享,可在线阅读,更多相关《51单片机的18B02液晶显示温度与万年历显控制系统.docx(44页珍藏版)》请在冰点文库上搜索。

51单片机的18B02液晶显示温度与万年历显控制系统.docx

51单片机的18B02液晶显示温度与万年历显控制系统

51单片机的18B20、1602液晶显示温度与万年历显控制系统

摘要

本设计以数字集成电路技术为基础,单片机技术为核心。

软件设计采用模块化结构,C语言编程。

系统通过LCD显示数据,可以显示日期(年、月、日、时、分、秒)以及温度。

在内容安排上首先描述系统硬件工作原理,着重介绍了各硬件接口技术和各个接口模块的功能;其次,详细的阐述了程序的各个模块和实现过程。

 

前沿……………………………………………………………………………………………………..........4

1.1设计目标……………………………………………….....……………………………....…..........5

2.4.1晶体振荡器电路…………………………………………………………………7

2.4.3时间计数器电路…………………………………………………………………7

2.4.4时钟电路…………………………………………………………………………7

2.4.5复位电路…………………………………………………………………………8

2.4.6复位电路的可靠性设计…………………………………………………………8

2.4.7按键部分……………………………………………………………………………8

3各硬件介绍…………………………………………………………………………………..9

3.1AT89S51的引脚说明..................................................9

3.2LCD1602简介9

6电路原理仿真图

 

前言

电子时钟是实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人家庭,车站,码头,办公室,银行大厅等场所,成为人们日常生活中的必需品。

数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。

钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子时钟精度高,功能易于扩展。

可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等电路。

所有这些,都是以钟表数字化为基础的。

因此,研究数字时钟及扩大其应用有着非常现实的意义。

本设计就是数字时钟简单的扩展应用。

 

1.1设计目标:

利用单片机技术,以及模拟电子技术和数字电子技术的理论知识,设计实现MCS-51单片机对LCM1602液晶输出显示控制的这一基本要求。

1.2设计要求:

本设计利用DS1302;DS18B20;LCD1602实现以下功能:

(1)显示日期功能(年、月、日、时、分、秒以及星期)

(2)可通过按键切换年、月、日及时、分、秒的显示状态

(3)可随时调校年、月、日或时、分、秒

(4)可每次增减一进行时间调节

(5)可动态完整显示年份,实现真正的万年历显示

(6)可显示温度

2设计方案

2.1控制器

硬件控制电路主要用了AT89C52芯片处理器、LCD显示器等。

根据各自芯片的功能互相连接成电子万年历的控制电路。

软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示和温度采集程序等组成。

主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。

时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。

时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。

先给出一般年份的每月天数。

如果是闰年,第二个月天数不为28天,而是29天。

再用公式s=v-1+〔(y-1/4〕-〔(y-1/100〕+〔(y-1/400〕+d计算当前显示日期是星期几,当调节日期时,星期自动的调整过来。

闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。

在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。

温度的显示主要是靠ds18b20采集现在的温度数据,CPU读取数据进行显示,当各自的条件得不到满足时,对应的显示器状态就不发生改变,只是在满足条件的情况下,显示器的状态才变化。

2.2显示部分设计

本设计采用液晶显示方式。

液晶显示效果出众,可以运用菜单项来方便操作,比较简单。

2.3数字温度采集设计

本设计中的温度采集部分考虑用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

温度采集电路设计如下图所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用LCD1602显示温度

2.4系统设计

2.4.1晶体振荡器电路

晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数

字钟的走时准确及稳定。

不管是指针式的电子钟还是数字显示的电子钟都使用晶体荡器电路。

图3DS1302电路

2.4.2分频器电路

分频器电路将高频方波信号经分频后得到1Hz的方波信号供秒计数器进行计数,分频器实际上也就是计数器。

2.4.3时间计数器电路

时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器而根据设计要求,时个位和时十位计数器为12进制计数器。

2.4.4时钟电路

内部时钟电路如图所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。

定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHZ,电容采用22PF。

图4时钟电路

2.4.5复位电路

影响单片机系统运行稳定性的因素可大体分为外因和内因两部分:

(1)外因

射频干扰,它是以空间电磁场的形式传递在机器内部的导体(引线或零件引脚)感生出相应的干扰,可通过电磁屏蔽和合理的布线/器件布局衰减该类干扰;

电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦合或直接传导,可通过电源滤波、隔离等措施来衰减该类干扰。

(2)内因

振荡源的稳定性,主要由起振时间频率稳定度和占空比稳定度决定起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电路的可靠性。

2.4.6复位电路的可靠性设计

复位是单片机的初始化操作。

单片机启运运行时,都需要先复位,其作用是

使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。

因而,复位是一个很重要的操作方式。

但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

复位电路的基本功能是:

系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。

2.4.7按键部分

本设计总的用了三个按扭开关作为键盘,其中一个是选择调时键,另两个分别为加和减键。

图6按键电路

3各硬件介绍

3.1AT89C51的引脚说明

AT89C51系列单片机中有PDIP,PLCC,TQFP多种封装形式。

本设计采用的是PDIP封装40管脚的单片机,各引脚如图2-2所示。

图9AT89C51的PDIP封装引脚图

3.2LCD1602简介

LCM1602采用标准的16脚接口,其中:

第1脚:

VSS为地电源第2脚:

VDD接5V正电源第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RSRW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可读忙信号,当RS为高电平RW为低电平时可以写入数据.第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15~16脚:

空脚

3.3DS1302简介

1DS1302的结构及工作原理

DS1302[1]是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302

内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

1.1引脚功能表及内部结构图

DS1302的引脚及内部结构如图1所示,

引脚功能如表1所示。

1.2DS1302的控制字节说明

DS1302的控制字如图2所示。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

1.3复位

通过把输入驱动置高电平来启动所有的数据传送。

输入有两种功能:

首先,接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,提供了终止单字节或多字节数据的传送手段。

当为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中置为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

1.4数据输入输出

在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7,数据读写时序见图3。

1.5DS1302的寄存器

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。

其日历、时间寄存器及其控制字见表2。

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。

DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

3.4DS18B20简介

3.4.1.温度传感器DS18B20

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

TO-92封装的DS18B20的引脚排列见下图,其引脚功能描述见表1。

DS18B20底视图

表1 DS18B20详细引脚功能描述

序号

名称

引脚功能描述

1

GND

地信号

2

DQ

数据输入/输出引脚。

开漏单总线接口引脚。

当被用着在寄生电源下,也可以向器件提供电源。

3

VDD

可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

 

DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;

●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V;

●零待机功耗;

●温度以9或12位数字;

●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常作;

C

 

64

ROM

线

高速缓存

存储器与控制逻辑

温度传感器

高温触发器TH

低温触发器TL

配置寄存器

8位CRC发生器

Vdd

DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所

示。

 

图2DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图3所示。

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

该字节各位的定义如图3所示。

低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

 

温度LSB

温度MSB

TH用户字节1

TL用户字节2

配置寄存器

保留

保留

保留

CRC

 

图3 DS18B20字节定义

由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数

据转换时间越长。

因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。

第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。

单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。

表2是一部分温度值对应的二进制温度数据。

表1DS18B20温度转换时间表

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。

若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。

因此,可用多只DS18B20同时测量温度并进行报警搜索。

在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。

主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。

DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。

器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。

计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。

其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。

4系统硬件设计所需的器材

5V电源3V电源

AT89S51单片机1个

液晶显示器1个

DS13021个

DS18B20一个

电阻1K的2个、4.7K的2个4.7欧排阻

8550三极管

晶振12M的一个32768K的一个

电容(30P的两个)

LED二极管1个

22μf电容2个

轻触开关4个

5系统软件总体设计

系统的软件设计采用C语言,对单片机进行编程实现各项功能。

程序在WindowsXP环境下采用Keil软件编写。

软件控制程序主要有主控程序、电子时钟的时间控制程序h和温度显示程序组成。

主控程序中对整个程序进行控制,进行了初始化程序还有键盘功能程序、以及显示程序和时间控制程序是电子时钟中比较重要的部分。

时间控制程序体现了年、月、日、时、分、秒的计算方法。

6电路原理仿真图:

 

7主程序流程图

开始

单片机读DS1302数据

单片机送数据到LCD1602

单片机判断按键

单片机处理按键调显示数据

结束

主程序流程图如上图10所示。

由于LCM1602,DS18B20,DS1302的数据读取及指令写入函数均已在各自的头文件中完成,在主程序中只须引用即可。

由于在硬件电路方面上设计了时间调整按键和开关,因此应有对应的时间调整程序。

时间调整程序的流程图如图11所示。

#include

#include"DS18B20.H"//注意这个调用文件不在这里!

#defineuintunsignedint

#defineucharunsignedchar

uchara,miao,shi,fen,ri,yue,nian,week,key1n,temp;

uintflag;

//flag用于读取头文件中的温度值,和显示温度值

#defineyh0x80//LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)

#defineer0x80+0x40//LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)

//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)

sbitrs=P2^6;//寄存器选择

sbiten=P2^7;//下降沿使能

sbitrw=P2^5;//读写信号线

//DS1302时钟芯片与C51之间的引脚连接定义

sbitIO=P3^4;//数据线

sbitSCLK=P3^6;

sbitRST=P3^5;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

//ACC累加器=A

//ACC.0=E0H

//校时按键与C51的引脚连接定义

sbitkey1=P1^0;//设置键

sbitkey2=P1^1;//加键

sbitkey3=P1^2;//减键

sbitbuzzer=P1^5;//蜂鸣器,端口低电平响

ucharcodetab1[]={"20--"};//年显示的固定字符

ucharcodetab2[]={":

:

"};//时间显示的固定字符

ucharcodewendu[]="0123456789";//利用一个温度表解决温度显示乱码

 

//延时函数,后面经常调用

voiddelay(uintxms)//延时函数,有参函数

{

uintx,y;

for(x=xms;x>0;x--)

for(y=120;y>0;y--);

}

voidwrite_1602com(ucharcom)//****液晶写入指令函数****

{

rs=0;//数据/指令选择置为指令

rw=0;//读写选择置为写

P0=com;//送入数据

delay

(1);

en=1;//拉高使能端,为制造有效的下降沿做准备

delay

(1);

en=0;//en由高变低,产生下降沿,液晶执行命令

}

voidwrite_1602dat(uchardat)//***液晶写入数据函数****

{

rs=1;//数据/指令选择置为数据

rw=0;//读写选择置为写

P0=dat;//送入数据

delay

(1);

en=1;//en置高电平,为制造下降沿做准备

delay

(1);

en=0;//en由高变低,产生下降沿,液晶执行命令

}

voidlcd_init()//***液晶初始化函数****

{

write_1602com(0x38);//设置液晶工作模式,意思:

16*2行显示,5*7点阵,8位数据

write_1602com(0x0c);//开显示不显示光标

write_1602com(0x06);//整屏不移动,光标自动右移

write_1602com(0x01);//清显示

write_1602com(yh+1);//日历显示固定符号从第一行第1个位置之后开始显示

for(a=0;a<14;a++)

{

write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分

//delay(3);

}

write_1602com(er+2);//时间显示固定符号写入位置,从第2个位置后开始显示

for(a=0;a<8;a++)

{

write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号

//delay(3);

}

}

voidwrite_byte(uchardat)//写一个字节

{

ACC=dat;

RST=1;

for(a=8;a>0;a--)

{

IO=ACC0;

SCLK=0;//产生上升沿写入数据,从低位写入

SCLK=1;

ACC=ACC>>1;

}

}

ucharread_byte()//读一个字节

{

RST=1;

for(a=8;a>0;a--)

{

ACC7=IO;

SCLK=1;//产生下降沿输出数据,先输出低位,保存到ACC中

SCLK=0;

ACC=ACC>>1;

}

return(ACC);

}

voidwrite_1302(ucharadd,uchardat)//向1302芯片写函数,指定写入地址,数据

{

RST=0;

SCLK=0;

RST=1;

write_byte(add);

write_byte(dat);

SCLK=1;

RST=0;

}

ucharread_1302(ucharadd)//从1302读数据函数,指定读取数据来源地址

{

uchartemp;

RST=0;

SCLK=0;

RST=1;

write_byte(add);

temp

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2