0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >家用电器 > 基于PIC16F887单片机的电子钟设计解决方案

基于PIC16F887单片机的电子钟设计解决方案

来源:
2016-09-22
类别:家用电器
eye 846
文章创建人 拍明

设计一个具有完整功能、有一定工作量与一定难度的单片机应用线路,并绘制能用于仿真的proteus 线路图,编制相应的单片机c 语言,分别在proteus仿真界面和实物板上调试运行正确。最后用实物进行运行演示,并写出符合规范的课程设计报告。

1640658977263028843.jpg

方案概述  

利用PIC16F887单片机设计一个电子时钟,通过IIC通信将DS1307时钟芯片的时间和TC74温度传感器的温度值用1602LCD液晶屏显示。同时,可以完成修改时间和整点报时等等附加功能.同时能够进行电子钟和密码锁的功能切换,使得该电子钟能够得到更多的实际应用. 

硬件设计思路  

根据所要实现的预期功能,硬件必须要有最小系统模块、LCD显示模块、时钟模块、蜂鸣器模块、温度模块、按键模块等。根据所提供的实验板资料,设计了如下电路(proteus图):

 

最小系统  

最小系统包括16F887单片机、复位模块、4M外部晶振、等部件组成如下最基本电路,其中芯片供电的引脚略去。本课设板所用的单片机为PIC16F887,是877A 的升级,其主要参数与887A类似,但使用更为灵活、有的参数更为细化(如异步通信的波特率为双字节),功能更多,而价格比887A更低,887引脚与877A兼容


LCD显示模块  

本设计采用字符型LCD:LM016L,和书上的LM041L使用方法基本一致,为了节省I/O口,采用4位接线法  实验开发板上使用的是LCD YB1602A,有关编程,主要要点为: 

(1)数据使能端E的控制,高电平变为低电平时写入; 

(2)4位数据线的写入方式,要分别将高4位和低4位写入; 

(3)注意检测LCD忙状态和刷新频率.

时钟和温度模块  

选用始终芯片DS1307、温度芯片TC74,皆通过IIC和单片机通信,时钟芯片带备用3V电池,电阻RA4和RA5设置为数字电阻。DS1307 是实时时钟芯片,它提供秒、分、时、日、月、、年和星期等数据,并能自动计算闰年至2100年。通常时钟芯片是要接备用电池,当主电源掉电时,备用电源为DS1307 提供维持电源,此电源只供DS1307 使用,此时时钟仍正常运行,时钟晶振是典型的32.768kHz。主要注意点为IIC通讯地址不要错误.

按键模块  

采用4*4矩阵按键实现实现时间的设定,修改切换和修改加减等功能,实际上仅使用了第一列的按键,由于本人希望能够进行密码锁和电子钟的切换,所以保留了4*4按键.编程中主要注意按键消抖时间的设置和RB0口弱上拉功能。


其他模块  

本设计还能够实现整点报时和密码控制门开关功能,故加上了蜂鸣器模块和电机模块.


软件设计及说明 

程序设计思路  初始化程序成功后,循环从时钟芯片、TC74里面读出数值并显示,判断时间是否为闹钟时间,同时通过查询的方式判断按键是否按下并进行相应的操作。可以通过查询的方式修改时间和闹钟,并且把闹钟的设定值显示在LCD屏幕上。

主函数流程图和程序

主函数流程图和程序.png

显示模块  

初始化模块后,通过指令:  LCD_WRITE(LINEX+Y,COM);  LCD_WRITE(STR,DAT);  实现LCD的写和显示,LINEX表示X行,Y表示X行的第Y个字符,STR代表字符的对应码值,COM表示写指令,DAT表示写数据。主要注意点为每次读取和输入需要检查LCD是否忙:void LCD_BUSY(void);    

 时钟和温度模块  

始终和温度模块的实现首先要进行正确的IIC初始化: void IIC_CSH()  时钟程序要通过编写和调用始终读写子程序实现: void DS1307(void);   从时钟芯片读出的是BCD码,需要进行转换才可以送入LCD显示。由于只有十位数所以BCD程序十分简单。      

void BCD_2(char,char);          

//DS1307初始化  void WRITE_DS1307(char,char);  

//写DS1307程序 void READ_DS1307(char,char);  

//读DS1307程序  显示温度需要注意当其值为负数时候需要进行取补码再显示,同时显示负号。   void DISP_TC74(signed char); 

时间修改模块  

时钟修改模块为比较难的部分,但是一步一步编写下来就可以完成指定功能。以下为日期修改部分,为时钟修改函数中最复杂的一部分。修改年、月、时、分、秒原理相同。

实验室调试  

用PIC16F887实验板,通过PIC3连接,进行在线调试和脱机运行,调试中- 12 - 12  发现很多问题,除了一些最基本的符号、变量定义缺少等错误,还有以下问题。  

问题一:无法显示时间和温度,IIC通信的led不闪烁。  解决办法:TC74仿真和实物的地址不一样,只需把地址1001101改为1001000   

问题二:按键调整时光标没有和仿真一样闪动  解决办法:由于程序刷新太快,人眼无法分辨,所以只需在按键后面加50ms的延时即可。    

问题三:不能掉电保护,每次脱机或者复位都会进行时钟初始化  解决办法:DS1307初始化前先进行判断秒的最高位是否为1,为1则进行初始化   问题四:温度不能显示负温度  解决方法:要进行正负的判断并且进行反码转换后再进行显示。





责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: 单片机 电子钟

相关资讯