万年历设计.docx
- 文档编号:24516039
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:65
- 大小:365.65KB
万年历设计.docx
《万年历设计.docx》由会员分享,可在线阅读,更多相关《万年历设计.docx(65页珍藏版)》请在冰豆网上搜索。
万年历设计
1概述
1.1研究背景
随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。
单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头。
数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,电子日历钟逐渐受到人们的欢迎。
电子日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。
1.2设计思想及基本功能
设计思想:
基于89C51的定时功能可以把年月日以及时间在LCD上按顺序一个一个显示出来,该系统按照简单实用而且经济,尽量简化电路设计,用最简单的电路布线和选用最经济实用的器件来达到设计要求。
本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。
系统由主控制器AT89C51、时钟电路DS1302、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。
基本功能:
能够显示年、月、日、小时、分和秒。
2总体方案设计
2.1方案选取
单片机在各种电子产品中的应用已经越来越广泛,很多的电子产品利用单片机所取得的便利得到了人们的好评,针对单片机控制显示万年历的智能化要求,实现其自动控制的方案有两种:
方案
(一)利用LCD液晶显示屏对万年历显示;
方案
(二)采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
这二个方案都是基于单片机控制的,不同的是所用的显示方式不同但最终结果一样。
方案
(一)LCD显示比较简洁和清晰
方案
(二)LED数码管显示便宜,显示清晰直观、走时准确、可以进行夜视,显示功能强大。
4.电路设计最终方案决定
综上各方案所述,对此次作品的方案选定:
采用AT89S51作为主控制系统;DS1302提供时钟;LED数码管动态扫描作为显示。
下面图2.1所示是方案
(一)的效果图;图2.2是方案
(二)的效果图:
图2.1方案
(一)LCD显示
图2.2方案
(二)LED显示
基于方便和简洁以及市场上的需求我选用方案
(二)作为本次课程设计
2.2系统框图
方案
(二)的系统框图如图2.5。
图2.2系统框图
2.3总体方案设计
万年历控制系统总体方案设计是基于满足设计要求的前提并且根据理论上的可实现性和硬件上的经济实用性,而进行设计的重要环节。
本章从人们对系统功能需求出发,在综合考虑各种因素的情况下,设计出自动控制系统的总体构架,并且在基本功能需求的基础上尽可能考虑系统的可扩展性。
本控制系统提出可以用手动调节时间和日期
万年历控制系统设计的总体框图如图2.3所示。
图2.3万年历控制器结构框图
3硬件电路设计
3.1电源电路设计
单片机正常工作电压为5V,因此设计的电源电路主要是提供单片机工作电压。
图3.1是为单片机提供电压的电源电路。
在这个电路中采用了三端集成稳压器LM7805,可以输出5V的直流电压以供给单片机。
该部分有2个输出电压,9V和5V。
220V交流市电通过电源变压器变换成交流12V低压,再经过桥式整流电路D1~D4和滤波电容2200uf的整流和滤波,在固定式三端稳压器LM7809的Vin和GND两端形成一个并不十分稳定的直流电压(该电压常常会因为市电电压的波动或负载的变化等原因而发生变化)。
此直流电压经过LM7809的稳压和100uf电容的滤波后,便在稳压电源的输出产生了精度高、稳定度好的直流输出9V电压。
9V电压给可调分流基准芯片TL431提供电源。
TL431的主要作用是给A/D转换芯片TLC1549提供比较精确的参考电压。
9V电源再经过LM7805稳压后,给各个芯片提供电源。
电路见图
三端稳压器是标准化、系列化的通用线性稳压电源集成电路,以其体积小、成本低、性能好、工作可靠性高、使用简捷等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。
三端稳压器的工作原理(以78系列为例)如下:
它与一般分立元件组成的串联式稳压电路基本相似。
不同的是增加了启动电路、保护电路和恒流源。
启动电路是为恒流源建立工作点而设置的。
恒流源随着在基准电压形成和误差放大器电路中,是为了使稳压器能够在比较大的电压变化范围内正常可靠工作。
在芯片内设置了两种较完善的保护电路:
一是过流保护,一是过热保护
图3.1电源电路图
3.2晶振电路
时钟系统是单片机的心脏,在本次设计中,包括中央处理器在内的所有单片机都是时钟系统所提供的节拍工作的。
时钟电路由外接谐振器的时钟振荡器、时钟发生器及关断控制信号等组成。
时钟振荡器是单片机的时钟源,时钟发生器对振荡器的输出信号进行二分频。
CPU的时钟振荡信号有两个来源:
一是采用内部振荡器,此时需要在XTAL1和XTAL2脚连接一只频率范围为0—33MHZ的晶体振荡或陶瓷振荡器及两只30pf电容。
二是采用外部振荡,此时应将外部振荡器的输出信号接至XTAL1脚,将XTAL2脚浮空。
利用单片机内部的定时功能来实现时钟的走时,通过编程实现每50毫秒产生一次中断,中断20次后,秒单元加1,秒单元加到60时,跳回到零再继续加,同时分单元加1。
以次类推,从而实现秒、分、小时、年的走时。
本次设计中采用的是内部振荡器,频率为12MHZ的晶体振荡器及30pf的瓷片电容。
图3.2单片机晶振电路图
3.3复位电路
复位是指在规定的条件下,单片机自动将CPU以及与程序运行相关的主要功能部件、I/O口等设置为确定初始状态的过程。
如果电路参数不符合规定的条件或
干扰导致单片机不能正确的复位,系统将无法进行正常的工作,因此,复位电路
除了要符合厂家规定的参数外,还要滤除可能的干扰。
AT89S52单片机内部有一个由施密特触发器等组成的复位电路。
复位信号是从其9脚,即RST脚输入的。
AT89S52单片机规定,当其处于正常工作状态,且振荡器工作稳定后,在RST端有从高电平到低电平,且高电平时间大于两个机器周期的复位信号时,CPU将完成对系统的复位。
有两点需要注意:
一、复位信号是高电平有效,二、高电平的保持时间必须大于两个机器周期,可见高电平保持时间与振荡频率有关。
本次设计中采用上电复位电路,上电复位是指在系统上电时,RST端自动产生复位所需要的信号将单片机复位,本次设计中的上电复位电路如图所示。
上电时,RST端高电平的维持时间取决于R(1k)和C(22uF)的值。
要使单片机可靠的复位,设计中使其维持的时间足够长。
图3.3复位电路图
3.4时钟电路
1.DS1302的结构及工作原理
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
2.引脚功能及结构
图1所示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK始终是输入端。
DS1302的引脚
3.数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位。
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、
时间寄存器及其控制字见表1。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
4.DS1302实时显示时间的软硬件
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。
图3示出DS1302与89C2051的连接图,其中,时钟的显示用LCD。
5.DS1302与CPU的连接
实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可。
只是选择晶振时,不同的晶振,误差也较大。
另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。
只要占用CPU一个口线即可。
LCD还可以换成LED,还可以使用北京卫信杰科技发展有限公司生产的10位多功能8段液晶显
示模块LCM101,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示RAM,可显示任意字段笔划,具有3-4线串行接口,可与任何单片机、IC接口。
功耗低,显示状态时电流为2μA(典型值),省电模式时小于1μA,工作电压为2.4V~3.3V,显示清晰
6.数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。
图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。
对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。
位1至位5指操作单元的地址。
位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。
控制字节总是从最低位开始输入/输出的。
表6为DS1302的日历、时间寄存器内容:
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。
“WP”
是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
7DS1302的控制字节
DS1302的控制字如表-1所示。
控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出
RAMRD
1A4A3A2A1A0
/CK/WR
表-1DS1302的控制字格式
8数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
如下图-4所示
图-4DS1302读/写时序图
9DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。
表-2DS1302的日历、时间寄存器
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
图3.4DS1302与单片机连接图
3.5键盘电路
键盘在由单片机控制的万年历自动控制系统中的主要作用是通过按键向单片机输入指令,设定时间,年月,是人工控制单片机的主要手段。
在万年历控制系统设计中的键盘为三个。
日期和时间的修改由3个按键构成。
如图-b所示。
键1为向右移;键2为加1;键3为减1
图3.5键盘接口电路
3.6显示电路
常见的LED显示具有清晰明亮的特点。
是显示接口也是绝大多数单片机应用系统必备的部件之一。
发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。
它由若干个发光二极管按一定的规律排列而成。
当某一个发光二极管导通时,相应的一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。
1.显示器的结构
常用的7段显示器的结构如图所示,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。
1位显示器由8个发光二极管组成,其中7个发光二极管a~g控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗,这种笔画的七段显示器能显示的字符较少,字符的形状有些失真,但失控简单,使用方便。
基本显示原理:
时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1,到9后,10秒位加1,秒位回0。
10秒位到5后,即59秒,分钟加1,10秒位回0。
依次类推,时钟最大的显示值为23小时59分59秒。
这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。
同时时钟达到最大值的时候天数也增加一位,知道显示了7后再变为1,同时阴历和阳历的天数也加1,根据不同的月份显示的天数阳历有28,29,30,31天,阴历就要经过计算得到,到了12个月后,年数自动增加1,以此类推,显示万年历的现实。
另外,连接方式总电路图上可以看到,这里就不做说明了,下图为显示部分的电路图。
如图-5所示,采用动态扫描显示,由21个数码管,3-8译码器74LS138接1K限流电阻,再接8550三极管接到共阳数码管的CoM端作为选通位码,每位选择相应的列。
74ls47接
240Ω限流电阻,再接共行的LED数码管的断码。
图3.6LED动态扫描显示
1.阳历算法
阳历的算法比较简单,每十月的总的天数相对来说是固定的。
只有2月份,在闰年是29天,在非闰年是28天。
每个月的日历排法.主要是确定每个月第一天是星期几。
我们知道1901年1月1日是星期二,星期的变化是7天一个周期,比如说要计算1901年2月1日是星期几,可以这样推算:
从1901年1月1日到1901年2月1日总共经过了31天(从表1可看出),31对7取模是3:
i901年1月1日是星期二,加三后,是星期五。
因此1901年2月1日是星期五。
同理,可以推算出从1901—2100年任何一天是星期几。
表1
月份
1
2
3
4
5
6
7
8
9
10
11
12
闰年
31
29
31
30
31
30
31
31
30
31
30
31
非闰年
31
28
31
30
31
30
31
31
30
31
30
31
2.阴历算法
阴历的算法比较复杂,它包含两个部分。
一部分是阳历日和阴历日的对应关系;另一部分则是阳历日和农历节气的对应关系。
下面只介绍与设计有关的阴历和阳历的关系。
表2
比特数
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
数据
!
!
!
!
!
1
!
!
!
1
!
1
x
x
x
x
我们先要做一个数据表,这个数据表里面每2个字节,表示T一个阴所年彝个月份的天教2个字节(共16bit)的具体意义如表2。
其中“!
(0/1)中“0”表示30天,“1”表示29天。
“xxxx(4个比特可表示数值范围0~15)”表示该年中是否有闰月,数值“0”表示无闰月,“1~12”表示某一个闰月。
闰月一般是29天;在200年中(1901~2100年),闰月是30天的,可用一个特殊语句来解决。
这里2OO年需要200x2=400个字节,构成阴历压缩数据表。
有了阴历的数据表后,主要是要确定阳历日和胡历日的对应关系。
我们知道阳历年1901年1月1日,对应的阴历年是对应的阴历日,可用以下算法:
(1)从阳历年1901年1月1日到1901年2月1日,计算出经过了31天;
(2)根据阴历数据表知道阴历年1900年11月有29天,因此31—29=2天。
原来阳历年1901年1月1日对应的阴历日是11日,则有11+1=13;
(3)因为阴历1901年12月份有30天,而13<=30,所以阳历年1901年2月1日对应的阴历年是1900年12月13日。
如果上一步相加得出的散大于当前阴历月的总的天敢,别应该继续减去当前阴历月的总的天数,直到符合条件。
对于月份增加时,还要通过数据表查看是否要经过闰月。
对于其他任何一个阳历日和阴历日的对应关系,都可以通过以上算法求得结果。
4系统软件设计
4.1程序流程框图
主程序流程图
计算阳历程序流程图
图-C时间调整程序流程图
4.2子程序的设计
读、写DS1302子程序
;写1302程序WRITE:
CLRSCLK
NOP
SETBRST
NOP
MOVA,32H
MOVR4,#8
WRITE1:
RRCA;送地址给1302
NOP
NOP
CLRSCLK
NOP
NOP
NOP
MOVIO,C
NOP
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR4,WRITE1
CLRSCLK
NOP
MOVA,31H
MOVR4,#8
WRITE2:
RRCA
NOP;送数据给1302
CLRSCLK
NOP
NOP
MOVIO,C
NOP
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR4,WRITE2
CLRRST
RET
;读1302程序
READ:
CLRSCLK
NOP
NOP
SETBRST
NOP
MOVA,32H
MOVR4,#8
READ1:
RRCA;送地址给1302
NOP
MOVIO,C
NOP
NOP
NOP
SETBSCLK
NOP
NOP
NOP
CLRSCLK
NOP
NOP
DJNZR4,READ1
MOVR4,#8
READ2:
CLRSCLK
NOP;从1302中读出数据
NOP
NOP
MOVC,IO
NOP
NOP
NOP
NOP
NOP
RRCA
NOP
NOP
NOP
NOP
SETBSCLK
NOP
DJNZR4,READ2
MOV31H,A
CLRRST
RET
总结:
经过两周的资料查找和设计,我已完成了单片机系统课程设计。
本文主要介绍和设计的是用单片机实现电子万年历控制和显示。
其中设计为先硬件电路设计然后到软件设计,过程曲折不易。
以89C51单片机作为控制芯片,辅助键盘和显示,还有时钟芯片辅助实现了万年历的显示和运行。
设计的整个过程由简单到复杂一步一步的设计,期间遇到许多问题,比如实验室是否有自己需要的硬件,而绘图软件和自己的电脑系统有些不兼容,让绘图过程难上加难。
期间学会了Protel绘图的好多方法,进一步了解了绘图的过程,以及也学会了Visio绘图软件,虽然学习的不太深入但一些简单的绘图方式还是学会了。
对于所学过的单片机原来以为学的还可以,不过经过课程设计了解到对单片机的学习还是皮毛而已,所以以后加强对单片机的学习和使用。
参考文献
[1]张迎新.单片机微型计算机原理、应用及接口技术.北京:
国防工业出版社,2004
[2]夏路易石宗义.Protel99se电路原理图与电路板设计教程.北京:
北京希望电子出版社,2004
[3]朱玉玺.计算机控制技术.北京:
电子工业出版社,2010
[4]阎石.数字电子技术基础.北京:
高等教育出版社,2009.
附录一:
系统电路图
附录二:
系统程序清单
CONFIG12EQU7FH
TEMPHEQU21H
TEMPLEQU20H
REG2EQU22H
REG3EQU23H
REG4EQU24H
DATEQUP0.7
SCLKEQUP3.2
IOEQUP3.3
RSTEQUP3.4
yearDATA66H
monthDATA65H
weekDATA64H
dayDATA63H
hourDATA62H
mintueDATA61H
secondDATA60H
ORG0000H
LJMPSTART
ORG001BH
LJMPINTT1
START:
;初值
LCALLZJ
SETBEA
MOVSCON,#00H;串行输出,方式0
MOVTMOD,#10H;计数器1,方式1
MOVTL1,#00H
MOVTH1,#00H
MOV32H,#8EH
MOV31H,#00H;允许写1302
LCALLWRITE
MOV32H,#90H
MOV31H,#0A6H;1302充电,充电电流1.1MA
LCALLWRITE
;主程序~~~~~~~~~~~~~~~~~~~~~
MAIN1:
MOV32H,#8DH;读出年
LCALLREAD
MOVyear,31H
MOV32H,#8BH;读出星期
LCALLREAD
MOVweek,31H
MOV32H,#89H;读出月
LCALLREAD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 设计