基于51单片机的万年历设计_第1页
基于51单片机的万年历设计_第2页
基于51单片机的万年历设计_第3页
基于51单片机的万年历设计_第4页
基于51单片机的万年历设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 单片机原理与应用 设计题目 基于STC89C51万年历的设计与实现 专 业 物联网工程 班 级 学 号 姓 名 完成日期 大约在冬季 课 程 设 计 任 务 书设计题目: 基于STC89C51万年历的设计与实现设计内容与要求:一、 设计内容利用STC89C51单片机、专用时钟芯片DS1302、DS18B20数字温度采集器及1602显示器件设计一个万年历,要求实现:(1)正确显示年月日,时分秒,星期等信息;(2)显示环境温度;(3)具有闹钟功能,可以整点报时;(4)能够通过按键调整时间和设置闹钟。二、设计要求1.分析系统功能,确定系统设计方

2、案,掌握总体设计的方法与思路。2.系统硬件设计,确定外设与单片机的硬件接口。掌握单片机系统外部接口的扩展设计方法。3.系统软件设计,结合硬件设计,编写相应控制程序,并进行Protuse仿真执行。4.熟练掌握程序烧录及调试过程。5.按照要求撰写课程设计论文。 指导教师: 2019年 11 月 26 日课 程 设 计 评 语 成绩: 指导教师:_ 年 月 日 洛 阳 理 工 学 院 课 程 设 计 报 告目录摘 要2一、设计目标与内容31.1设计目标31.2 设计内容31.3设计要求31.4 本章小结3二、系统设计32.1 电路设计框图32.2 系统硬件概述42.3 主要单元电路的设计42.3.1

3、 时钟电路模块的设计42.3.2温度传感器电路设计62.3.3显示模块的设计82.4本章小结8三、系统的软件设计93.1程序流程图93.1.1 系统总流程图93.1.2 温度程序流程图93.1.3 DS1302时钟程序流程图103.1.4 LCD显示程序流程图113.2程序的设计113.2.1 DS18B20测温程序113.2.2 DS1302读写程序133.2.3液晶显示程序143.3本章小结15四、仿真与调试154.1 Keil软件调试流程154.2 Proteus软件运行流程174.3本章小结18总结18基于STC89C51万年历的设计与实现摘 要古人依靠日冕、漏刻记录时间,而随着科技的

4、发展,电子万年历已经成为日渐流行的日常计时工具。本文研究的万年历系统拟用STC89C52单片机控制,以DS1302时钟芯片计时、DS18B20采集温度、1602液晶屏显示。系统主要由温度传感器电路,单片机控制电路,显示电路以及校正电路四个模块组成。本文阐述了系统的硬件工作原理,所应用的各个接口模块的功能以及其工作过程,论证了设计方案理论的可行性。系统程序采用C语言编写,经Keil软件进行调试后在Proteus软件中进行仿真,可以显示年、月、日、星期、时、分、秒和温度并具有校准功能和与即时时间同步的功能。实验结果表明此万年历实现后具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器

5、仪表的发展趋势,具有广阔的市场前景。关键词:万年历 单片机 仿真 一、设计目标与内容1.1设计目标 制作出可以检测温度并报警的的电子万年历。1.2 设计内容用keilC51编译程序。用proteus仿真电路图。将电路图使用万用板或其他电路板焊接实物图。1.3设计要求具备在液晶上显示年、月、日、星期、时、分、秒的功能。具备年、月、日、星期、时、分、秒校准功能。具有与即时时间同步的功能。1.4 本章小结通过设计程序,制作仿真,焊接实物三个步骤,以小组合作的方式来设计满足设计要求的万年历并简单描述可以实现的功能,制作结束后,进行课程设计答辩并编写一份课程设计报告。二、系统设计122.1 电路设计框图

6、根据上章确定的方案给出了系统整体的设计框图:图1.1系统结构框图为使时钟走时与标准时间一致,校时电路是必不可少的,键盘模块用来校正液晶上显示的时间;温度传感器则用来检测当前的环境温度;STC89C52单片机通过输出各种电脉冲信号来驱动控制各部分正常工作;而系统的时间、温度等数据则最终通过液晶模块显示出来。2.2 系统硬件概述本电路是以STC89C52单片机为控制核心,该芯片具有在线编程功能,功耗低,能在3.3V的超低压下工作;时钟芯片采用DS1302,它是一款高性能、低功耗、自带RAM的实时时钟芯片,具有使用寿命长,精度高和功耗低等特点,同时具有掉电自动保存功能,可以对年、月、日、星期、时、分

7、、秒进行计时,具有闰年补偿功能,其工作电压为2.5V5.5V;温度检测模块由DS18B20构成,它采用独特的单线接口仅需一个端口引脚进行通讯, 具有测量精度高、测量范围广等优点,其测温范围在-55+125,工作电压为3v5.5v;显示部份使用1602液晶显示屏来实现,该显示屏具有低功耗、寿命长、可靠性高的特点,其工作电压为5v。2.3 主要单元电路的设计2.3.1 时钟电路模块的设计DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。图4.5所示为DS1302的引脚排列,其中VCC1为后备电源,VCC2为主电源

8、。DS1302由VCC1或VCC2两者中的较大者供电。所以在主电源关闭的情况下,也能保持时钟的连续运行。X1和X2是振荡源,外接32.768KHz晶振用来为芯片提供计时脉冲。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电行动时,在VCC大于等于2.5V之前,RST必须保持低电平。在SCL

9、K为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。如图2.1图2.1 DS1302的硬件接线图时钟芯片DS1302的工作原理:(1) DS1302的控制字节DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出(2) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开

10、始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。(3) DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读

11、写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。2.3.2温度传感器电路设计数字温度传感器DS18B20是由Dalles半导体公司生产的,它具有耐磨耐碰,体积小,使用方便,封装形式多样(如图4.6),适用于各种狭小空间设备数字测温和控制领域。如图2.2图2.2 DS18B20的两种封装1、DS18B20的主要特性 (1)适应电压

12、范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数 据线供电。 (2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。 (4)DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内。 (5)温范围55125,在-10+85时精度为0.5。 (6)可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。 (7)在9位分辨率时最多在

13、 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。 (8)测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。 (9)负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。2、DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器(如图2.3)。图2.3 DS18B20的内部结构组成DS18B20的供电方式有两种:寄生电源供电方式和外部电源供电方式。本设计采用外部电源供电方式(如图2.4),D

14、S18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度。外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。 图2.4 DS18B20引脚接线引脚说明:GND为接地引脚;DQ为数据输入输出脚。用于单线操作,漏极开路;VCC接电源正;2.3.3显示模块的设计本设计中由于要对时间、温度进行显示,所以选择液晶显示屏1602模块作为输出。1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。它可以显示两行,每行16个字符,采用单+5V

15、电源供电,外围电路配置简单,价格便宜,具有很高的性价比。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。将L1602的RS端和P2.0,R/W端和P2.1, E 端和P2.2相连,当RS=0时,对LCD1602写入指令;当RS=1时,对LCD1602写入数据。当R/W端接高电平时芯片处于读数据状态,反之处于写数据状态,E端为使

16、能信号端。当R/W为高电平,E端也为高电平,RS为低电平时,液晶显示屏显示需要显示的示数。2.4本章小结本章主要介绍了系统硬件设计,其中对时钟芯片DS1302、1602液晶显示屏、DS18B20温度传感器和STC89C52最小系统的设计做了详细阐述。此外还介绍了各模块和单片机的连接方法、其特性及电路原理,最后确定系统的整体硬件设计方案。三、系统的软件设计3.1程序流程图3.1.1 系统总流程图系统总流程图如图3.1所示。流程图分析:首先系统初始化,系统开始运行,当有设置键按下时进入修改时间模式,无按键按下时读取时间、温度等数据送入液晶屏显示;在修改时间模式下设置时间完成后再送数据到液晶屏显示。

17、图3.1系统总流程图3.1.2 温度程序流程图温度读取流程图如图3.2所示。流程图分析:开始进入初始化DS18B20,就是通过主机拉低单线产生复位脉冲然后释放该线,如果有应答脉冲,即发起ROM命令当成功的执行操作命令后,就使用Convert T命令即开始温度转换,当转换完后,又初始化DS18B20是否有应答脉冲,若有,就发起Read Scratchpad(读取暂存器和CRC字节)命令,既同时读出第1,2个字节,即为温度的数据。图3.2 温度显示流程图3.1.3 DS1302时钟程序流程图时钟流程图如图5.3所示。流程图分析:DS1302开始计时时,首先进行初始化,当有中断信号时,读取时钟芯片的

18、数据送入液晶屏显示。这时若有设置键按下时,进行时间修改,完成后将数据送入时钟芯片;若没有按键按下,则直接存入EPROM,送入液晶屏显示。图3.3 时钟流程图3.1.4 LCD显示程序流程图显示程序流程图如图5.4。流程图分析:首先对1602显示屏进行初始化(初始化大约持续10ms左右),然后检查忙信号,若BF=0,则获得显示RAM的地址,写入相应的数据显示;若BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到BF=0为止。图3.4 LCD显示程序流程图3.2程序的设计3.2.1 DS18B20测温程序DS18B20是一种单总线数字式温度传感器,它与单片机之间采用的是串行数据传

19、送,所以在对DS18B20进行读写操作时必须按照它的时序进行。一般访问DS18B20时按如下步骤进行:初始化;ROM操作命令;存储器操作命令;执行/数据。部分源程序如下:ReadOneChar(void) unsigned char i=0; unsigned char dat=0; for (i=8;i0;i-) DQ=1; DS18_delay(1); DQ=0; dat=1; /复合赋值运算,等效dat=dat1 DQ=1; if(DQ) dat|=0x80; DS18_delay(4); return(dat);WriteOneChar(unsigned char dat) /有参函数

20、,功能是写,而写的内容就是括号内的参数 unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;DS18_delay(5);DQ=1;dat=1; /复合赋值运算,等效dat=dat1(dat=dat右移一位后的值)DS18_delay(4);unsigned int ReadTemperature(void) Init_DS18B20(); /初始化,调用初始化函数WriteOneChar(0xcc); /跳过读序列号的操作,调用写函数,写0xcc指令码WriteOneChar(0x44); /启动温度转换,调用写函数,写0x44指令码DS18

21、_delay(125); /转换需要一点时间,延时Init_DS18B20(); /初始化,调用初始化函数WriteOneChar(0xcc); /跳过读序列号的操作,调用写函数,写0xcc指令码WriteOneChar(0xbe); /调用写函数,写0xbe指令码,读温度寄存器tempL=ReadOneChar(); /读出温度的低位LSBtempH=ReadOneChar(); /读出温度的高位MSB tempa=(tempH*256)+tempL)*0.0625; /温度转换DS18_delay(20);return(tempa); /运算结果返回到函数 :ReadTemperature

22、()3.2.2 DS1302读写程序DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如图3.5所示。图3.5 DS1302的控制字控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图3.6、3.7所示。图3.6 单字节读图3.7 单字节写在进行任何数据传输时,RST必

23、须被置高电平,每个SCLK为上升沿时数据被输入,下降沿时数据被输出。先把RST置低,禁止数据传输,SCLK置低,清零时钟总线,RST再置高,允许数据传输。传送完成后,RST置低,禁止字节的传送。部分源程序如下:void write_byte(uchar dat) /写一个字节ACC=dat;RST=1;for(a=8;a0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;uchar read_byte() /读一个字节RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;return (ACC);void write_1302

24、(uchar add,uchar dat) /向1302芯片写函数,指定写入地址,数据RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add) /从1302读数据函数,指定读取数据来源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);3.2.3液晶显示程序1602通过D0D7的8位数据端传输数据和指令,其模块内的控制器有11条控制指令。当液晶

25、显示屏的接口电路与单片机系统I/O按照并行数据传输方式连接完成以后,即可以对STC89C52单片机进行编程。在液晶屏完成显示之前首先要对液晶进行初始化。源程序如下:lcd_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;a14

26、;a+)write_1602dat(tab1a); /向液晶屏写日历显示的固定符号部分/delay(3);write_1602com(er+2); /时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a8;a+)write_1602dat(tab2a); /写显示时间固定符号,两个冒号/delay(3); 3.3本章小结本章对基于单片机的万年历系统软件模块进行设计,先对该系统进行了整体流程的设计,给出了设计的流程图,随后介绍了各模块的子程序。对一些模块常用的函数进行了解释,这一切都构成了这个系统的软件基础。四、仿真与调试4.1 Keil软件调试流程首先选择菜单File-New,在

27、源程序编辑器中输入汇编语言或C语言源程序(或选择File-Open,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c。然后选择菜单Project-New Project,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2),工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group Source Group1”,出现一个对话框,要求寻

28、找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option for Target Target1(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如果要写片,还必须在Output选项卡中选中“Creat Hex Fi”(如图4.2);

29、其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。图4.2 生成HEX文件成功编译/汇编、连接后,选择菜单Debug-Start/Stop Debug Session(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil能以单步执行(按F11或选择Debug-Step)、过程单步执行(按F10或选择Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改(Debug-Inline Assambly),不必执行先退出调试环境、修改源程序、对工程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论