当前位置:
文档之家› 以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计的电子钟
以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计的电子钟
故障四:温度显示错误。因为时间有限,前面整合两个程序就花了太多的时间,来不及再调整温度显示模块,自己推测,应该是中间函数参数传递出现错误,在主程序的main函数中,显示温度是display_string("00.0C")语句,所以温度一直显示00.0C,事后有时间会再进行参数调整。
故障五:在实验开始时,感觉不懂如何运用proteus,就连对C52进行程序烧写时,都不知道如何才能生成Hex文档,万事开头难,只能踏踏实实一步一步学习,后来请教同学才知道在“Options for Target 1”的Output选项中,要将Create HEX Fil选项勾起来才可以。
但是,时间和日期显示正确,但温度显示错误。温度不能正常显示的主要原因是DS18b20的数据传输不正确,不过到现在为止,还没改正过来。
四、实验过程中故障分析与故障排除的描述
故障一:因为自己的知识有限,所以坦诚的说,源代码都是从网上载的,但是我载了2个程序,一个是运用1602以及18b20和按键处理显示时间以及温度,另一个程序是单运用ds1302和1602显示时间而没有按键处理,所以我做的工作就是这么把这两个程序结合起来,实现显示和调整时间的功能。
DateToStr(&CurrentTime); //从DS1302读取日期
TimeToStr(&CurrentTime); //从DS1302读取时间
显示的程序也要有所改变:display_string(CurrentTime.DateString); //显示日期
此时参数传递过程是先将DS1302内部的时间和日期通过DS1302_GetTime函数读取出来存放到Time中,日期通过DateToStr函数将Time中的数据传到DateString数组中,而时间通过imeToStr函数将Ti me中的数据传到TimeString数组中,最后通过display_string函数显示出来。
1.3时分秒进位算法
当秒,分达到60时,向分进位,且秒数置零,从新开始计数。当时达到24时,也一样处理。
1.4年月日进位算法
因为每个月份的天数都不同,所以事先先设定一数组:
dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31}用以判定12个月的最大值,接着判断天数,当超过本月最大天数时,月份加一,且天数要置1。月份判断比较简单,只要超过12,年份就加1,月份置1。
特别注意DS1302芯片在读取或写入数据时,都是一位一位传送的,并且每传送一位,SCLK信号线要有一个负跳变。即单片机对SCLK咬先送高电平,再送低电平。数据时通过IO进行传送的。
1.3数据处理子程序流程图
否
是
因为DS1302芯片在读取或写入数据时,都是一位一位传送的,并且每传送一位,SCLK信号线要有一个负跳变。所以在对DS1302具体某地址进行一字节数据的写入或读取时,都要调用实时时钟写入一字节(内部函数) DS1302InputByte和实时时钟读取一字节(内部函数)DS1302OutputByte两个函数。
2、在硬件上,选用DS1302,LCD1602相结合,首先DS1302内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作,这样读取数据简单。其次,选用LCD1602进行显示时,数据位串行输入,接口连线少,低功耗,显示清晰。并且本实验的电子钟即要实现时间的现实,还要实现日期的现实,所以若是运用数码管进行显示的话,就算运用动态显示,所占用的IO口多,并且所需的数码管个数多,硬件复杂。
5、总原理图以及主程序流程图:
5.1总的原理图:
5.2主程序流程图:
二、Proteus仿真结果:
三、实验数据计算处理,性能分析
1、数据计算处理:
1.1计算星期数的算法
days=(today.day+1+2*today.month+3*(today.month+1)/5+today.year+today.year/4-today.year/100+today.year/400)%7,由年月日计算星期,用以显示星期数
故障二:通过上面两个函数的合并后,发现编译一直出错,如下图所示:
后来发现,我只是在前面加入头文件"DS1302.h",但是忘记把这个文件放在工程目录下,所以该工程一直找不到,结果一直出错。
故程序都没错,但是就是没反应。偶然之间,发现要长按按键,就可以实现按键调整时间的功能。因为在按键扫描程序中,设置了软件防抖动功能,所以要长按按键,才能调整时间。
各个模块电路原理分析:
1、DS1302时钟采集模块:
1.1电路原理图:
1.2DS1302分析:
首先DS1302是DALLAS公司推出的涓流充电时钟芯片。内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作。
2、性能分析:
首先,lcd能够正确的显示1302芯片上面的时间和日期。
其次,可以通过三个按键: K1, K2和K3键对电子钟进行时间和日期的调整。按K1键进行校时,可以分别对时及分进行单独校时,使其校正到标准时间,校时时需要校正哪一位哪一位就闪烁。按K2键是对闪烁位进行加一的操作。按K3键是对闪烁位进行减一的操作。多次按K1键,当全部闪烁位全闪烁完毕时,就可以退出调整模式。
7、proteus仿真软件
8、Keil C51、PC机
实验设计任务
以DS1302实时时钟芯片和液晶显示屏LCD1602为基础设计一个电子钟,要求:时间和日期可调整,按键采用3个按键;至少在Proteus上调试通过。扩展:闹钟和重要日期提醒功能(增加蜂鸣器),闹铃音乐功能
实验步骤
1、打开Keil软件,新建一个工程文件,选择好芯片,并记得在“Options for Target 1”的Output选项中,将Create HEX Fil选项勾起来。
1.2加减键对时间日期改变处理算法
对于年月日,时分秒来说,每个变量的最大值和最小值都不一样,所以当年月份时分秒改变时,进行处理的算法也不一样,年没有最大值,所以不用采取“封顶”措施,每次年加一处理时,直接自加,而对于月份来说,月份是不能超过13的,所以当月份自加到13时要重新置1,具体处理见程序,在每个语句后,我都有分析注释出来。
3、proteus是一个非常好用的仿真软件,其具有强大的电路原理图绘制功能,且可以实现模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、键盘、LCD系统仿真等多种功能;和keil联合使用时可以检测所编写的程序的正确与否。将keil和proteus联合起来使用是实现电子设计制作的初步阶段,可避免在实际的硬件操作中因为电路原理图或向单片机烧录的程序有误而造成的难以修改的为题。
DS1302芯片广脚介绍:X1、X2为32.768KHz晶振管脚。GND为地。RST复位脚。I/O数据输入/输出引脚。SCLK串行时钟。Vcc1,Vcc2电源供电管脚。与单片机连接的信号线为:DS1302_SCLK接P1^6;实时时钟时钟线引脚
DS1302_IO接P1^7;实时时钟数据线引脚
DS1302_RST接P1^5;实时时钟复位线引脚
电子系统设计实验报告
实验名称
以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计的电子钟
院(系)别
班号
实验日期
2009-6-25到28
实验人姓名
学号
实验目的:
1、能够以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计一款电子钟
2、熟悉DS1302芯片的工作过程
3、熟悉CD1602芯片的工作过程
这里的故障排除过程:目的是在有按键调整时间的程序中,要添加DS1302功能。首先,要在主程序的c文件中,添加#include "DS1302.h"语句,并在main主函数中,加入Initial_DS1302();语句,进行DS1302的初始化,并且添加以下语句:
Initial_DS1302();//初始化DS1302
4.3温度采集显示模块子程序流程图:
在此程序中,要特别注意初始化,写和读取数据时的时序处理。首先,初始化中,主机总线先发送一复位脉冲(最短为480us的低电平信号),接着刻释放总线并进入接收状态。DSl8b20在检测到总线的上升沿之后,等待15-60us,接着DS18b20发出存在脉冲(低电平持续60-240 us)。写数据时序:当主机总线先从高拉至低电平时,就产生写时间隙。读书序:主机总线先从高拉至低电平时,总线只须保持低电平l7ts之后,再将总线拉高,产生读时间隙。
4.2DS18B20芯片以及连线分析
DSl820数字温度计提供9位(二进制)温度读数,指示器件的温度、信息经过单线接口送入DSl820或从DSl820送出。因此从主机CPU到DSl820仅需一条线(和地线),DSl820的电源可以由数据线本身提供而不需要外部电源。
DS18B20广脚说明:VCC为电源线,DQ为数据线,GND为地线。数据线DQ与单片机P1.0相连接。
实验心得:
1、通过本次实验,因为之前接触到的电子系统设计不多,所以一开始,感觉难以入手,就算上网载了很多程序,也看不懂。后来请求同学的帮助,了解了要对各种芯片编写程序时首先应找到该芯片的数据手册,根据数据手册上的说明、时序要求及流程图编写对应程序。
是是是
减1子程序与加1子程序区别只在于修改数值处理不一样,其他都一样。
3、LCD显示模块
3.1LCD显示模块电路原理图
3.2LCD1602芯片以及连线分析
液晶显示器是一种功耗极低的被动式显示器件,1602广脚介绍:D0—D7数据传送引脚,VSS为接地线,VDD为电源线,VEE为LCD驱动电压调节,由此可以调节显示亮度。RS为寄存器选择信号,高电平选择数据寄存器,低电平选择指令寄存器。RW为读写控制信号,高电平读,低电平写。EN使能信号,读状态下高电平有效,写状态下下降沿有效。