基于PIC16F887单片机的数字钟课程设计报告_第1页
基于PIC16F887单片机的数字钟课程设计报告_第2页
基于PIC16F887单片机的数字钟课程设计报告_第3页
基于PIC16F887单片机的数字钟课程设计报告_第4页
基于PIC16F887单片机的数字钟课程设计报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

=P IC单 片 机 课 程 设 计学生姓名: 学 号: XXXXXXX 专业班级: XX 级 X 班 指导教师: XX 二XX 年 XX 月 XX 日目 录1.课程设计题目和要求32.设计方案33.硬件设计及说明34.软件设计及说明55.实验验证86.实验小结91.课程设计题目和要求1.1 课程设计的性质和目的PIC单片机课程设计是电气工程及其自动化专业及相近专业的一门重要的专业实践课,本课程在PIC 单片机课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC单片机的应用方法,熟练PIC 单片机的C程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。1.2课程设计内容和要求设计一个具有完整功能、有一定工作量与一定难度的单片机应用线路,并绘制能用于仿真的proteus 线路图,编制相应的单片机c 语言,分别在proteus仿真界面和实物板上调试运行正确。最后用实物进行运行演示,并写出符合规范的课程设计报告。2.设计方案利用 PIC16F887 单片机设计一个万年历,通过 IIC 通信将 DS1307 时钟芯片中的时间用 LCD 液晶屏显示。同时,该设计还兼具闹钟功能和温度显示功能,可以通过键盘设置当前时间、日期、闹钟。3.硬件设计及说明3.1 硬件设计思路根据所要实现的预期功能,硬件必须要有最小系统模块、LCD 显示模块、时钟模块、闹铃模块、温度模块、按键模块等。根据所提供的实验板资料,可以设计如下电路(proteus 图):3.2 最小系统最小系统包括16F887单片机、复位模块、4M外部晶振、排针等部件组成如下最基本电路,其中芯片供电的引脚略去。本课设板所用的单片机为PIC16F887,是877A 的升级,其主要参数与887A 类似,但使用更为灵活、有的参数更为细化(如异步通信的波特率为双字节) ,而价格比887A更低,887引脚与877A兼容.3.3 LCD 显示模块如图所示,为了节省 I/O 口,采用 4 位接线法,RD 口的低四位和 LCD 的高4 位连接,RD7 用于背光显示(RD7=1),RD4、RD5、RD6 用于读写和使能控制.上电后要延时 15ms 后,才能进行初始。3.4 时钟和温度模块选用始终芯片DS1307、温度芯片TC74,皆通过IIC和单片机通信,时钟芯片带备用3V电池,电阻RA4和RA5设置为数字电阻。DS1307 是实时时钟芯片,它提供秒、分、时、日、月、 、年和星期等数据,并能自动计算闰年至2100年。通常时钟芯片是要接备用电池,当主电源掉电时,备用电源为DS1307 提供维持电源,此电源只供DS1307 使用,此时时钟仍正常运行,时钟晶振是典型的32.768kHz。3.5 闹铃模块闹铃模块是一个简单的喇叭通过放大器、限流电阻与 16F887 单片机连 RC1接,通过单片机 CCP2 模块产生 PWM 使喇叭响起。3.6 按键模块采用普通按键实现时间和闹钟的修改、设定,MODE 键实现模式切换,SET实现位置的选择,其他两个按键是加减功能。按键可以采用电平中断,此时注意按下和放开都可能产生中断,也可以采用查询方式实现。4.软件设计及说明4.1 程序设计思路初始化程序成功后,循环从时钟芯片、TC74 里面读出数值并显示,判断时间是否为闹钟时间,同时通过查询的方式判断按键是否按下并进行相应的操作。可以通过查询的方式修改时间和闹钟,并且把闹钟的设定值显示在 LCD 屏幕上。4.2 主函数流程图和程序4.3 显示模块初始化模块后,通过指令:LCD_WRITE(LINEX+Y,COM);LCD_WRITE(STR,DAT);实现 LCD 的写和显示,LINEX 表示 X 行,Y 表示 X 行的第 Y 个字符,STR 代表字符的对应码值,COM 表示写指令,DAT 表示写数据。初始化端口、中断设置、LCD 和 IIC判断时钟是否运行?Y显示时间、温度判断当前时间是否为闹钟时间?YNN 写入初始化时间打开闹铃4.4 时钟和温度模块始终和温度模块的实现首先要进行正确的 IIC 初始化:void IIC_CSH()时钟程序要通过编写和调用始终读写子程序实现:void write_DS1307(char addr,char data)void READ_DS1307(char addr,char n)从时钟芯片读出的是 BCD 码,需要进行转换才可以送入 LCD 显示。至于温度模块是比较简单的,设置好好就只需要定时从里面读数显示即可。显示温度需要注意当其值为负数时候需要进行取补码再显示,同时显示负号。4.5 闹铃模块MODE 键可以进行模式切换,当 M=1 时是时间设置模式,当 M=2 时是闹钟设置模式,为了确定主函数的循环体是否需要从 DS1307 读写数,必须设置一个flag 标志位,当 M=1 或 0 时,flag=0,执行 DS1307 的读和显示;否则跳过,只进行闹铃设置,确保设置闹铃时候屏幕的数不会一直变化。当sect、hourt、mint 与时钟芯片匹配时候开 PWM 程序,按任意键退出闹钟。这段程序比较有技巧,稍不注意就会出错:void clock() if(!mod|!set|!add|!miu)delaynms(30);if(!mod|!set|!add|!miu);CCP2CON=0b00000000; /关 PWM 模式,按任意键退出如上程序,比较时候要先比较秒,否则无法匹配,无法输出 PWM.4.6 按键模块采用查询方式的按键模块,要特别注意延时消抖和按键释放检测,M 作为模式切换的标志位,a 作为位置确定位,add、miu 实现加减。一下给出部分检测消抖程序:if(mod=0) delaynms(30);/消抖if(mod=0)while(!mod);/等待按键释放M+;if(M=3) M=0;flag=0;f=0;5.实验验证5.1proteus 仿真验证把写好的程序进行仿真,并不断修改程序,最终程序基本实现了预期的功能。仿真结果如下:5.2 实验室调试用 PIC16F887 实验板,通过 PIC3 连接,进行在线调试和脱机运行,发现问题。问题一:无法显示时间和温度,IIC 通信停止。解决办法:TC74 仿真和实物的地址不一样,只需把地址 1001101 改为1001000问题二:按键调整时光标没有和仿真一样闪动解决办法:由于程序刷新太快,人眼无法分辨,所以只需在按键后面加50ms 的延时即可。问题三:不能掉电保护,每次脱机或者复位都会进行时钟初始化解决办法:DS1307 初始化前先进行判断秒的最高位是否为 1,为 1 则进行初始化问题四:上电了喇叭就能会响解决办法:闹钟判断程序修改如下原程序:BCD(sect);if(SW=(A04)if(SW=(A14)if(SW=(A24) /开 PWM 模式修改后:BCD(sect);if(SW=(A04)if(SW=(A14)if(SW=(A24) /开 PWM 模式6.实验小结本次课程设计,收获颇多。通过本次课程设计,加深了我对单片机的理解,提高了编程能力、动手能力、分析问题和解决问题的能力,同时也多学了很多知识,补充了课内没有涉及的很多知识。数字时钟的成功设计也激发了我

温馨提示

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

评论

0/150

提交评论