数字万年历设计综述.docx
- 文档编号:26994360
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:31
- 大小:454.15KB
数字万年历设计综述.docx
《数字万年历设计综述.docx》由会员分享,可在线阅读,更多相关《数字万年历设计综述.docx(31页珍藏版)》请在冰豆网上搜索。
数字万年历设计综述
江西理工大学应用科学学院
微机控制系统课程设计报告
题目:
数字万年历设计
姓名:
曹振林
学号:
08060111328
专业班级:
电气113班
指导教师:
完成时间:
2014年06月27日
设计报告
综合测试
平时
总评
格式
(10分)
内容
(10分)
图表
(5分)
功能测试
(35分)
答辩
(20分)
考勤
(20分)
指导教师签名:
摘要
在电子技术迅速发展的今天,尤其是随大规模集成电路出现,给人类生活带来了根本性的改变。
特别是单片机领域中的应用产品已经走进了大部分人的家庭。
电子万年历的出现给人们的生活带来的诸多方便。
本设计首先描述系统总体模块工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。
本设计以数字集成电路技术为基础,单片机技术为核心。
本系统以单片机的进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。
单片机具有体积小,成本低,抗干扰能力强,面向控制,可以实现分机各分布式控制等优点。
本文研究的万年历系统就是利用单片机上述的优点,采用目前市场性价比比较高的STC89C52单片机控制、以DS1302时钟芯片计时、以LCD1602液晶屏显示,系统主要有单片机控制电路,时钟电路,显示电路及校正电路四个模块组成。
本文阐述了系统的硬件工作原理,所应用的各个接口模块的功能以及工作过程。
系统程序采用C语言编写,用protel2000画出电路图,经keil软件进行调试后在仿真软件中进行仿真测试,可以显示年、月、日、星期、时、分、秒,并具有校准功能和与即时时间同步的功能。
此万年历具有读取方便、显示直观、功能多样、电路设计新颖、功能强大、结构简单等优点,符合电子仪器仪表的发展趋势,具有广阔的市场应用前景。
关键词:
电子万年历51系列单片机 时钟芯片 FLASH存储器 液晶显示
1、绪论
多功能数字万年历已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站、码头、医院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
随着技术的发展,人们已不再满足于钟表原先简单的报时功能,希望出现一些别的功能,诸如日历的显示、闹钟的应用等,以带来更大的方便,而所有这些,又都是以数字化的电子时钟为基础的。
因此,研究实用电子时钟及其发展应用,有着非常现实的意义,具有很大的实用价值。
由于数字集成电路技术的发展和采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便等优点它还用于计时、自动报时及自动控制等各个领域。
虽然现在市场上已有现成的电子钟集成电路芯片出售,价格便宜,使用灵活,如可以随意设置时、分、秒的输出,改变显示数字的大小等,并且由于集成电路技术的发展,特别是MOS集成电路技术的发展,使电子钟具有体积小、携带方便,但是这里介绍的实用电子钟可以满足使用者的一些特殊要求,输出方式灵活、功耗低、对时准确、性能稳定、维护方便等优点。
多功能数字万年历是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能
1.1设计任务
通过对本题的设计,进一步熟悉单片机控制系统,并了解系统设计的一般规律。
用P89V51RB2设计一个数字万年历,实现时间的显示功能。
1.2设计要求
(1)用DS1302或HT1380设计一个数字万年历。
(2)通过一个四位数码管显示年月日小时分钟的循环显示。
(3)可通过按键设置时间。
(4)写出详细的设计报告(含操作说明),给出全部电路和源程序。
1.3设计意义
(1)、在学习了《单片机原理与应用》和《微型级数机控制技术实用教程》课程后,为了加深对理论知识的理解,学习理论知识在实际中的运用,培养动手能力和解决实际问题的经验让学生接触专用时钟芯片DS1302,并会用DS1302芯片开发时钟模块,应用到其他系统中去。
熟悉WAVE软件调试程序和仿真.;
(2)、通过实验提高对单片机的认识;
(3)、通过实验提高焊接、布局、电路检查能力;
(4)、通过实验提高软件调试能力;
(5)、进一步熟悉和掌握单片机的结构及工作原理;
(6)、通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法;
(7)、通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术;
(8)、通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
2、设计方案介绍
2.1用户板设计步骤及过程
按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、显示模块、键盘接口模块共4个模块组成,电路系统构成框图如图2.1所示。
主控芯片使用51系列P89V51RB2单片机,时钟芯片使用美国DALLAs公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。
采用DSl302作为主要计时芯片,可以做到计时准确。
更重要的是,DSl302可以在很小电流的后备电源(2.5—5.5v电源,在2.5v时耗电小于300nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
显示模块采用普通的共阳LED数码管,键输入采用查询法实现调整功能。
图2.1电子万年历电路系统构成框图
2.2芯片工作原理
2.2.1P89V51RB2单片机概述
P89V51RB2是一款增强型80C51微控制器,包含16kB的Flash程序存储器和1024个字节的数据RAM。
图2.2P89V51RB2最小系统电路图
P89V51RB2的典型特性是他的X2方式选项。
利用该特性,用户可以将编写的应用程序以传统的80C51时钟频率(每个机器周期包含12个时钟)或X2方式(每个机器周期包含6个时钟)的时钟频率运行,选择X2方式可在相同时钟频率下获得2倍的执行速度,这样还可以极大地降低电磁干扰(EMI)。
Flash程序存储器支持并行编程和串行在系统编程(ISP)。
并行编程方式提供了高速的分组编程(页编程)方式,可节省编程成本和上市时间。
ISP编程方式不需要专用烧录器、所需外围电路简单、可靠性强,近年来得到了广泛的应用。
目前,许多新型的单片机均具有此功能。
P89V51RB2也可以采用在应用中编程(IAP),允许随时对Flash程序存储器重新配置,即使是应用程序正在运行也不例外。
2.2.2P89V51RB2单片机的特性
*80C51核心处理单元;
*5V的工作电压,操作频率为0~40MHZ;
*具有ISP(在系统编程)和IAP(在应用中编程)功能;
*通过软件或ISP选择支持12时钟(默认)或6时钟的工作模式;
*SPI(串行外围接口)和增强型UART;
*PCA(可编程计数器阵列),具有PWM和捕获/比较功能;
*4个8位I/O口,含有3个高电流P1口(每个I/O口的电流为16mA);
*3个16位定时器/计数器;
*可编程看门狗定时器(WDT);
*8个中断源,4个中断优先级;
*2个DPTR寄存器;
*低EMI方式(ALE禁能);
*兼容TTL和COMS逻辑电平;
*低电检测及低功耗模式。
2.2.3时钟电路DS1302
(1)DS1302的性能特性
*实时时钟,可对秒、分、[小]时、日、周、月以及带闰年补偿的年进行计数;
*用于高速数据暂存的31×8位RAM;
*最少引脚的串行I/o;
*2.5—5.5V电压工作范围;
*2.5V时耗电小于300nA;
*用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;
*简单的3线接口;
*可选的慢速充电(至Vcc1)的能力。
D51302时钟芯片包括实时时钟/日历和3l字节的静态RAM。
它经过一个简单的串行接口与微处理器通信。
实时时钟/日历提供秒、分、时、日、周、月和年等信息。
对于小于31天的月利月末的日期自动进行调整,还包括闰年校正的功能。
时钟的运行可以采用24H或带AM(上午)/PM(下午)的12H格式。
采用三线接口与cPu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
Dsl302有主电源/后备电源双电源引脚:
Vcc1在单电源与电他供电的系统中提供低电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源,在这种运用方式中,Vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。
DS1302由Vcc1或vcc2中较大者供电。
当vcc2大于Vcc1十0.2v时,vcc2v给DSl302供电;当vcc2小于Vcc1时,DSl302由Vcc1供电。
(2)DSl302数据操作原理
Dsl302在任何数据传送时必须先初始化,把RsT脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。
无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。
在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写人数据。
时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
如果在传送过程中置RsT脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RsT脚必须保持低电平。
只有在scLK为低电平时,才能将RsT置为高电平。
D引302的引脚及内部结构图如图2.3所示,表2.1为各引脚的功能。
引脚号
引脚名称
功能
1
VCC2
主电源
2、3
X1,X2
振荡源,外接32768KHZ晶振
4
GND
地线
5
RST
复位/片选线
6
I/O
串行数据输入/输出端(双向)
7
SCLK
串行数据输入端
8
VCC1
后备电源
表2.1DS1302引脚功能
图2.3DS1302引脚及内部结构
DSl302的控制字如图2.4所示。
控制字节的最高有效位(位7)必须是逻辑1;如果它为0,则不能把数据写入到DSl302中。
位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。
位5—1(A4一A0)指示操作单元的地址。
最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。
控制字节总是从最低位开始输入/输出。
为了提高对32个地址的寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。
位6规定时钟或RAM,而位0规定读或写。
在时钟/日历寄存器中的地址9—31或RAM寄存器中的地址31不能存储数据。
在多字节方式中,读或写从地址0的位0开始。
必须按数据传送的次序写最先的8个寄存器。
但是,当以多字节方式写RAM时,为了传送数据不必写有31字节。
小管是否写了全部31字节,所写的每一字节都将传送至RAM。
图2.4DS1302的控制字
DSl302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
其H历、时间寄存器及其控制字见表3.2,其中奇数为读操作,偶数为写操作。
时钟暂停:
秒寄存器的位7定义位时钟暂停位。
当它为1时,DS1302停止振荡,进入低功耗的备份方式.通常在对Dsl302进行写操作时(如进入时钟调整程序),停止振荡。
当它为0时,时钟将开始启动。
AM—PM/12—24[小]时方式:
[小]时寄存器的位7定义为12或24[小]时方式选择位。
它为高电平时,选择12[小]时方式。
在此方式下,位5是AM/PM位,此位是高电平时表示PM,低电平表示AM。
在24[小]时方式下,位5为第二个10[小]时位(20一23h)。
表2.2内部寄存器地址和内容
Dsl302的品振选用32.768kHz,电容推荐值为6PF,因为振荡频率较低,也可以不接电容.对计时精度影响不大。
3、程序的设计
3.1程序流程图
3.1.1系统总流程图
系统总流程图如图4.1所示,流程图分析:
首先系统初始化,系统开始运行,当有设置键按下时进入功能设置模式,无按键按下时读取时间数据送入LCD1602液晶屏显示,在功能设置模式下设置时间完成后再送数据到LCD1602液晶屏显示。
图3.1主程序流程图
3.1.2时钟程序流程图
图4.2时钟程序流程图
时钟流程图如图4.2所示。
流程图分析:
DS1302开始计时时,首先进行初始化,当有中断信号时,读取时钟芯片的数据送入液晶屏显示,这是若有设置键按下时,进行时间修改,完成后将数据送入时钟芯片;若没有设置键按下时,则直接送入EPROM,送入液晶屏显示。
3.1.3显示程序流程图
图4.3显示程序流程图
显示程序流程图如图4.3.流程图分析:
首先对1602显示屏进行初始化,然后检查忙信号,若BF=0,则获得显示RAM地址,写入相应的数据显示;若BF=1,则代表模块在进行内部操作,不接受任何外部指令和数据,直到BF=0为止。
4、硬件的设计
4.1显示电路的设计
显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。
图4.1显示电路
4.2晶振电路设计
晶振电路用于产生单片机工作所需要的时钟信号,单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地工作。
通常在引脚Xl和X2跨接石英晶体和两个补偿电容构成自激振荡器。
在许可范围内,C1,C2的值越低越好,C值偏大虽有利于振荡器的稳定,但会增加起振的时间,应使C2大于C1值,这样可使上电时,加快晶振起振。
图4.2晶振电路
4.3时钟电路
图4.3时钟电路
4.4系统程序的设计
因为使用了时钟芯片DSl302,阳历程序只需从DSl302各寄存器中读出年、周、月、日、[小]时、分、秒等数据,再处理即可。
在首次对DSl302进行操作之前,必须对它进行初始化,然后从Dsl302中读出数据,再经过处理后,送给显示缓冲单元。
阳历程序流程图见下图所示。
图4.4阳历程序流程图
4.5时间调整程序设计
调整时间用2个调整按钮,1个作为移位、控制用,另外1个作为加和减用,分别定义为控制按钮、加按钮。
在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。
闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50ms。
利用定时器计时,当达到50ms溢出时,就送给该位熄灭符,在下一次溢出时。
再送正常显示的值,不断交替,直到调整该位结束。
此时送正常显示值给该位,再进人下一位调整闪烁程序。
5、调试总结及改进
(1)DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。
在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。
若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。
(2)在仿真头调试时候,我发现在LED显示板上能够正常显示数字,但是秒位不能记数,检查DS1302的连接(没有错,接触也良好),说明了这片DS1302不能记数,然后换掉DS1302后此时不但可以正常显示数字,而且可以正常记数,说明刚才那片是坏的。
(3)(2M)晶振的调试,在调试晶振的时候发现,在没有给电路同电的时候,晶振两端输出波形是个不稳定的正弦波,而通电后也是个正弦波,但是中间一个引脚接地时候,波形比较稳定,接示波器时间长了,发现DS1302很发烫(时间很短内温度达到很高),但是不接示波器,时间长点也不会出现发烫现象。
我认为是示波器引脚上的电和电路板上的电相通的原因。
致谢
本文能得以完成,在此我要感谢我的指导老师王琪。
是他用他的课余时间为我们讲解这次设计的原理以及帮我们找相关的器件,在实物完成后不厌其烦得为我们进行调试和指导;还要感谢我们的专业课老师,是他们教会了我有关PCB的制作,单片机相关知识;此外,还要感谢老师,是他用他的课余时间帮我制版,给了我不少帮助;同时还要感谢我的同学,给我的论文提出意见,帮我拍出了实验效果图。
这里我要再一次由衷的感谢,感谢那些给予我帮助的人。
参考文献
[1]赵亮,侯国锐.《单片机C语言编程与实例》(人民邮电出版社)2003.9
[2]潘永雄等.《新编单片机原理与应用》(西安电子科技大学出版社)2007.2
[3]吴金戌《8051单片机实践与应用》(清华大学出版社)
[4]刘勇《数字电路》(电子工业出版社)
[5]谭浩强《C语言程序设计》(清华大学出版社)
[6]高峰《单片微型计算机与接口技术》(科学出版社)
[7]张齐《单片机应用系统设计技术》(电子工业出版社)
[8]王静霞《单片机应用技术C语言版》(电子工业出版社)
[9]李朝青《单片机原理及接口技术主编》(北京航空航天大学出版社)
[10]魏小康《protel99se电路设计与制版入门与提高》(人民邮电出版社)
附录
附录一元器件清单
序号
名称与规格
数量
序号
名称与规格
数量
1
电容30pF
2
6
时钟模块DS1302
1
2
晶振32.768KHz
1
7
驱动器ULN2803
1
3
电阻470
8
8
PNP
4
4
电阻500
1
9
发光二极管(红)
1
5
按钮开关
4
10
四位共阳数码管
1
附录二硬件原理图
附录三源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharsecond,minute,hour,day,month,year,week;
uchartime[5];
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
ucharcodewei[]={
0xf7,0xfb,0xfd,0xfe
};
uchara,b,temp;
sbits0=P0^0;
sbits1=P0^1;
sbits2=P0^2;
sbits3=P0^3;
sbitled=P2^7;
sbitSCLK=P3^4;
sbitIO=P3^5;
sbitRST=P3^6;
bitsetflag;
ucharreaddata(ucharaddr)
{
uchari,j,k;
RST=0;
SCLK=0;
RST=1;
for(i=0x01,j=0;j<8;j++)
{
if(addr&i)
IO=1;
else
IO=0;
SCLK=1;
i=i<<1;
SCLK=0;
}
k=0;
for(i=0;i<8;i++)
{
k>>=1;
SCLK=0;
if(IO)
k|=0x80;
SCLK=1;
}
RST=0;//!
!
!
保证ds1302完整的数据读取,直接这样写:
REST=0;CLK=1;此处也可以正常显示
SCLK=0;
_nop_();
SCLK=1;
return(k);
}
/*******************************************
*函数功能:
ds1302数据写入
*入口参数:
8位地址,8位数据
*返回:
无
********************************************/
voidwritedata(ucharaddr,uchardat)
{
uchari,j;
RST=0;
SCLK=0;
RST=1;
for(i=0x01,j=0;j<8;j++)
{
if(addr&i)
IO=1;
else
IO=0;
SCLK=1;
i=i<<1;
SCLK=0;
}
for(i=0x01,j=0;j<8;j++)
{
if(dat&i)
IO=1;
else
IO=0;
SCLK=0;
SCLK=1;
i=i<<1;
}
RST=0;
SCLK=1;
}
/*******************************************
*函数功能:
ds1302初始化
*入口参数:
无
*返回:
无
********************************************/
voidInit1302()
{
writedata(0x8e,0x00);//控制写入WP=0
writedata(0x90,0x00);
writedata(0x80,((0/10)<<4)|(0%10));//秒
writedata(0x82,((14/10)<<4)|(14%10));//分
writedata(0x84,((7/10)<<4)|(7%10));//时
writedata(0x86,((7/10)<<4)|(7%10));//日
writedata(0x88,((7/10)<<4)|(7%10));//月
writedata(0x8a,((4/10)<<4)|(4%10));//星期
writedata(0x8c,((10/10)<<4)|(10%10));//年
writedata(0x8e,0x80);
}
voidwrite1302()
{
writedata(0x8e,0x00);//控制写入WP=0
writedata(0x90,0x00);
writedata(0x80,0x00);//秒
writedata(0x82,time[4]);//分
writedata(0x84,time[3]);//时
writedata(0x86,time[2]);//日
writedata(0x88,time[1]);//月
writedata(0x8a,0x03);//星期
writedata(0x8c,time[0]);//年
writedata(0x8e,0x80);
}
/*********************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 万年历 设计 综述