ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:180.97KB ,
资源ID:9566140      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9566140.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实时时钟.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实时时钟.docx

1、实时时钟 PIC单片机 课程设计 学生姓名: 学 号: 指导教师: 二一 二年 十二 月 十 日目 录1、课程设计目的32、课程设计题目描述和要求33、课程设计报告内容34、心得体会与小结85、参考目录91.课程设计目的1:在PIC单片机课程的基础上,通过硬件设计,软件编程与调试的实践,进一步掌握PIC单片机的应用方法,将所学的理论知识真正应用到实践中去,达到熟练PIC单片机的C程序的编写与调试。2:通过本次的课程设计,进一步熟悉PIC16F887单片机各个模块的编程与调试,最后综合各个模块,达到提高综合实践水平的能力。3:掌握仿真软件Proteus 绘制原理图等的操作方法,进一步熟悉利用MP

2、LAB IDE软件进行软件的调试和HTPICC 编写程序。4:学会使用下载器PIC kit3 进行现场实物的程序调试,并掌握如何将写入到单片机的程序脱机运行。5:在单片机开发板上完成本次课程设计的内容。2.课程设计题目描述和要求1:利用DS1307时钟芯片,TC74温度传感器,LM016做一个实时时钟,将时间和温度实时的显示在液晶上。编写相应的程序,最终可以在仿真软件上正常运行,可以在单片机开发板实物上也正常的运行,并且能脱机运行。2:在时钟和温度实时显示的过程中,允许外部的按键中断,通过按键可以对时间进行修改,也可以更改温度报警的温度设定值。3.课程设计报告内容3.1硬件电路的设计总电路图:

3、3.1.1单片机最小系统的设计 本次课程设计采用PIC16F887型号的单片机作为控制芯片。 注意:编程的时候要特别关注887和877A二者间的区别,特别是在B端口作为输入时上拉电阻的设置,还有对A/D的操作,二者存在着一定的差别。3.1.2液晶模块的设计本课程设计因为单片机开发板上的硬件电路已经确定,实物上的LM016采用四位数据线接线方式,是为了节省单片机IO口。要使用该LCD时,短路插P38 P22的短路插(除RD7外)均用插上。如用使用背光控制,可将P22的短路插8插短接。注意:四位数据线的读写操作和初始化都和8位数据线存在一定的差别,四位数据线写一个字节数据要分两次写入,第一次写高四

4、位,第二次写入低四位,读操作也是。3.1.3时钟和温度模块及温度报警模块的设计时钟芯片DS1307:DS1307是IIC器件,单片机通过寻找其地址来实现对该芯片的访问和操作。DS1307 是实时时钟芯片,它提供秒、分、时、日、月、年和星期等数据,并能自动计算闰年至2100年。通常时钟芯片是要接备用电池,当主电源掉电时,备用电源为DS1307 提供维持电源,此电源只供DS1307 使用,此时时钟仍正常运行,时钟晶振是典型的32.768kHz。注意:由于DS1307的方波输出脚为集电极开路,故要在外部加上上拉电阻。温度模块:TC74也是IIC器件,它一出厂就配有一个固定的地址,单片机通过寻址来实现

5、对不同IIC器件的访问和操作。单片机只要有一个IIC接口,就可以实现对外围不同地址的IIC器件进行操作。TC74温度范围为40125, 在2585范围的精度为2(最大值),在025 的范围精度为3(最大值)。TC74的默认的7位地址为0b1001101。TC74的读温度命令是0b00000000, 在温度数据寄存器中,每单位值代表1 ,数据用二进制补码格式。3.2软件设计及其说明3.2.1软件设计执行的总体流程第一步:对各个端口的初始化;第二步:液晶开机界面,刚开始液晶显示停留10秒钟在此界面:显示出欢迎词和自己定义字符数组的自己的中文名字(5个字符组成);第三步:判断DS1307是否运行,若

6、为否,执行第四步,若为是,执行第五步;第四步:时钟初始化,对时钟芯片的时间初始化操作;第五步:读取温度和时钟寄存器值;第六步:判断读出来的温度值是否超过,若没有执行第七步,若有报警并继续执 行;第七步:判断是否有按键中断进入,若是有,跳到第九步,若没,执行第八步;第八步:将读出来的温度值和时钟寄存器值显示在液晶对应的位置上;之后返回 第五步重复执行;第九步:判断中断的类型,产生不同的中断标志位,根据标志位实现对时钟寄存 器值的修改等操作,中断程序结束后,返回第八步。3.2.2液晶模块程序的操作主要是要注意程序的移植性方面,还有在读和写操作过程中四位数据线所接的对应引脚的输入输出要依据情况作出相

7、应的改变。#define LCD_RS RD4 / 命令/数据选择端#define LCD_RW RD5 / 读/写选择#define LCD_E RD6 / 数据使能#define LCD_PORT PORTD / 所用到的端口/单片机数据线用到D端口的低四位,与LCD的数据线高四位相对应#define LCD_DDR TRISD /可以增加程序的移植性(与老师的不同点)#define COM 0 /在LCD_WRITE()中的第2参数为0表示写命令#define DAT 1 /在LCD_WRITE()中的第2参数为1表示写数据子程序:void LCD_CSH(void);void LCD_

8、BUSY(void); /检测LCD是否忙uint8 LCD_READ(void); /读LCD,忙检测用void LCD_WRITE_4(uint8 R1,uint8 FLAG); /LCD写半字节void LCD_WRITE(uint8 R1,uint8 FLAG); /LCD写1字节,命令或数据void DISPLAY_HANG(uint8 line); /在指定行中显示字符,字符在数组DD中void MY_ZIKU(); /自己定义的字符数组3.2.3时钟芯片DS1307的程序操作为了让读写操作更为方便,这样宏定义操作更为方便可移植:#define DS1307_ADD_WRITE 0

9、b11010000/ds1307的地址#define DS1307_ADD_READ 0b11010001/ds1307的地址写DS1307的步骤如下:1) 发送启始位;2) 发送DS1307的7 位地址+0(写),即0b11010000;3) 发送要写入DS1307 的地址,地址见图16,如要修改分,此值为1;4) 发送要写入DS1307 的数,如要把分修改为十进制数37,则此数为0x37;5) 发送停止位;读DS1307 的步骤如下:1) 发送启始位;2) 发送DS1307的7 位地址+0(写),即0b11010000;3) 发送要读的DS1307 的起始地址,如要从秒读起,为0;4) 发

10、送停止位;5) 发送重新开始位;6) 发送DS1307的7 位地址+1(读),即0b11010001;7) 发送读使能位,接收一个数据,单片机发送应答位;8) 发送读使能,接收下一个数据(地址会自动+1),单片机发送应答位,直到读数完成,接收最后一个数时单片机不发送应答位;9) 发送停止位;3.2.4温度传感器TC74及温度报警的程序操作自己实现已将仿真软件中的温度传感器地址改成和实物地址一致,更为方便/温度传感器模块宏定义 #define RTR 0b00000000 /TC74的读温度命令#define TC74_ADD_READ 0b10010001 /读实物地址;仿真也可以用,仿真图已

11、修改过温度传感器的地址#define TC74_ADD_WRITE 0b10010000 /写对TC74的读温度的步骤如下:1) 发送启始位;2) 发送TC74的7位地址+0(写);3) 发送TC74的写命令(RTR);4) 重新开始条件;5) 发送TC74的7位地址+1(读);6) 接收使能,接收TC74的温度;7) 发送停止条件;4.2、IIC模块/IIC的初始化子程序void IIC_CSH(void) TRISC|=0b00011000; /SDA,SCL设置为输入! SSPCON=0b00101000; /同步串口使能(SSPEN),主控方式 SMP=1; /传送率按标准模式,DS1

12、307只能用100KHz的通信波特率 SSPADD=9; /主控模式为波特率值/发送数据R并等待其发送完成,收到从机的应答信号void IIC_SEND(uint8 a) SSPBUF=a; /将要发送的数据写入发送寄存器 while(RW=1); /若发送结束,继续执行 while(SSPIF=0); /若产生IIC中断,继续执行 while(ACKSTAT=1); /若收到从动方的应答,继续执行 NOP();3.3最后结果刚开机十秒内的显示,第一行WBN是自己名字的缩写,第二行前五个字符是自己自定义的字符,显示自己的中文名字,将自己的名字拆成五部分来显示。第一行前七个字符显示当前温度值,第

13、一行后面的字符显示时间;第二行前面的字符显示日期,后面的字符显示星期几。最后结果:1:单片机液晶显示屏可以实时的显示时间和温度(达到);2:当温度达到某个估计值时蜂鸣器响(达到);3:短按KEY1键可以进入修改当前时间的模式(达到);长按KEY1超过两秒则进入闹铃时间的设定(最终没成功);4:心得体会与小结:心得体会: 通过本次课程设计,自己学到了很多,整个课程设计下来,LM016液晶显示模块,温度显示及温度报警模块,实时时钟显示模块,这些程序的编写都是自己写的,而不是从晚上下载程序下来修改修改,因此自己感觉收获还是蛮大的,自己通过这次的训练,懂得了对时钟芯片,温度传感器的操作方法及原理,综合

14、能力的编程水平也有了一定的提高。不足的地方,自己编写的闹铃程序没有成功,只能实时显示时间,闹铃暂不能设置。整个课程设计自己是这样一步步完成的:第一步:利用Proteus仿真软件完成原理图的设计;第二步:编写液晶显示模块的程序,并且在仿真软件和实物上可以正常运行;第三步:编写温度显示及温度报警模块的程序,在仿真和实物上都能正常运行;第四步:编写实时时钟显示模块的程序,时间显示在液晶显示屏上,使其在仿真 软件和实物上都能正常运行;第五步:将上面几个模块的程序综合起来运行,使之在液晶屏上能实现实时时钟的显示和温度的显示,程序正常运行。1:液晶模块程序编写感受 没上PIC课程之前,自己有接触过51,也

15、有用51单片机编写过完整的LCD程序模块(包括读写操作,初始化等),但当时自己操作的使用8位数据线来实现对液晶的操作,主要程序编写是看时序图来完成。本次课程设计要求的使用4位数据线来实现液晶的显示,刚开始自己有些迷惑,对四位数据线的操作不是很理解,刚开始自己就上网打算查找芯片手册,看4位数据线操作的时序图和初始化操作,结果发现网上都是关于8位的操作,因此刚开始也耽搁了小段时间,后来在老师的指导下和书本上的帮助下得以解决,八位和四位数据线的时序图是一样的,初始化操作书本上有给出。不同的是四位数据线的读写操作不一样,四位数据线读过程要先读高四位,再读低四位,分两次才能读一个完整的字节,写操作也是一

16、样,同时要特别要注意的一点就是读操作和写操作对应的四位数据线所接引脚的输入输出的设置要重新进行配置。还有就是在对液晶的读写操作时都必须先检测LCD是否处于忙状态。还有通过这次对液晶的学习,自己对液晶显示的理解进一步加强,LM016L有8个用户可以定义的字符,自己就将自己的名字三个字分成五部分来显示,自己定义了一个数组到CGRAM,最后也成功显示了,虽然显示的效果不是很好(5*7的显示精度太低),但自己感到挺满足的。自己对液晶的操作学习大概花了五天的时间(主要是利用在宿舍断断续续的时间),最终自己的液晶程序经受住了实践的考验。2:温度传感器及温度报警模块程序编写的感受 温度传感器TC74有IIC

17、通讯接口,PIC单片机有自带IIC接口通讯,因此就不需要像51单片机那样自己用普通I/O口模拟IIC,程序的编写更为方便。温度芯片编写的过程发现仿真软件的温度传感器默认地址是0b1001101,而实物中温度传感器的地址是0b1001000,这样在仿真和实物操作的程序就不一样,显得有点麻烦,后来自己查找了些资料,将仿真图温度传感器的地址修改成和实物的地址一样。操作如下:在仿真图中,右击TC74的属性,会弹出“Option Address”通过这边的操作可以修改仿真图TC74的地址。这样仿真和实物操作就统一了,避免了不必要的一些麻烦。同时温度传感器读出来的温度值要将其转换成十进制数据再显示到液晶上

18、。3:实时时钟模块程序编写的感受 时钟模块的编写是这次课设收获较大的,因为实时时钟很实用,学时钟芯片的操作也很有必要,在编程过程中主要要注意进制之间的转换,读出来的数据是十六进制的数据,而显示在液晶上的是要显示成十进制,因此要做好进制转换这一步。还有仿真图中液晶显示的时间是电脑系统的时间,而不是根据我们程序设定的初使时间基础上开始走,切不可被其迷惑,自己设定的时间值正确与否,程序的正确与否,要通过实验验证。小结:1:程序编写过程定时存档,按日期存放起来,不然一直在一个程序改来改去,最后要是程序崩溃了,自己就不好查找,以前的程序也相应没掉了;2:每编写完一个模块的程序要先确保该模块的正确性,在仿真软件上和实物上验证,一个一个模块的完成,最后再综合起来调试;3:不可以太相信仿真软件,仿真软件可以,实物不一定可以;4:IIC的上拉电阻在仿真时要改为数字的,默认为模拟的,否则仿真上IIC不能使用,在实物运行时无影响;5:编程和调试过程要有耐心,切不可太过于心急为了赶进度而慌了手脚。6:遇到问题除了独立思考分析外,有时多与他人进行沟通交流也会很有收获。5:参考书目:1 江和,PIC16系列单片机C程序设计与PROTEUS仿真,北京航空航天大学出版社,2010年6月

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1