作业帮 > 作文素材 > 教育资讯

万年历

来源:学生作业帮助网 编辑:作业帮 时间:2024/09/23 22:40:25 作文素材
万年历作文素材

篇一:数码万年历的使用说明

数码万年历的使用

操作说明

按键说明:设置键、上调键、下调/定闹键、流水键。

1、时间调整

正常走时状态下,按“设置”键进入时间设置状态,同时年份“闪烁”,可按“上调”或“下调”键修改年份,修改好后按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键修改月份;用同样的方法可对日、时、分、秒进行设置;当秒设定好后,再按“设置”键退出时间设置,回到正常时间状态。

2、12/24小时制切换:

在正常走时状态,按住“上调”键3秒钟,则可进行12小时制与24小时制的切换。 上电复位时,可默认为24小时制或12小时制,由选项决定。

3、开/关整点报时:

在正常走时状态,按一下“上调”键,则可以打开整点报时指示灯和整点报时功能;按一下“上调”键,则可以关闭整点报时指示灯和整点报时功能。

闹钟8组定闹(由按键选项决定), 默认值无效,默认时间为12:00点,

4、闹钟设定:

在正常时间状态下(或天数计时状态),按“定闹”键进入“定闹查询状态”,定闹指示灯点亮,在温度位显示“A1”,表示当前你看到的是“第1组定闹”的信息,在小时、分钟位显示“――∶――”,表示

定闹“无效”;显示“XX∶XX”的具体时间,表示定闹“有效”,按“上调”键可以切换“有效”/“无效”,按“设置”键进入定闹时间设定,且小时位闪烁,按“上调” 或“下调”键修改闪烁位的内容,按“设置”键移动闪烁位置到分钟位,按“上调” 或“下调”键修改闪烁位的内容,再按“设置”键确认并退出定闹时间设定,再按“定闹”键进入下一组闹铃状态,其设置与“第1组定闹”相同,依次类推即可设置所有定闹。

5、生日提醒:

①12组生日提醒,默认值无效,第1到6组默认日期为公历1月1日,第7到12组默认日期为农历1月1日。 ②生日提醒设定: 在最后一组定闹状态,再按一次“定闹”键则进入第一组生日提醒,生日提醒指示灯点亮,在温度位显示“b1”,在公历“月日位”显示有效“生日日期”或无效日期“――――”,则表示生日以“公历日期”为准,若在农历“月日位”显示则表示生日以农历日期为准;按“上调”键可“打开/关闭”该组生日提醒,按“设置”键进入“该组生日提醒日期”设置,按“上调” 或“下调”键修改其内容,按“设置”键移动闪烁位置,再按“设置”键确认该组生日提醒设置,再按“定闹” 键进入下一组生日提醒,依次类推即可设置所有生日提醒,当在最后一组生日提醒时,按“定闹” 键则退到正常时间状态若闹铃中没有一组设置有效,则定闹指示灯熄灭,在任何闹铃时间到正在响闹的状态下只要有键按下,都将关闭闹铃声.

方法2,可供参考:

1、时间的设置:

A------日期时间设置/移动

B------整点闹开关/增加

C------节气灯花样转换/减少

D------定闹设置/移动

(以设置2010年1月28日上午10∶38为例)

按“A”键,“年”闪烁,按“B”或“C”键,将其设置为“2010”年; 再按“A”键,“月”闪烁,按“B”或“C”键,将其设置为“1”月; 再按“A”键,“日”闪烁,按“B”或“C”键,将其设置为“28”日; 再按“A”键,“时”闪烁,按“B”或“C”键,将其设置为上午“10”时;

再按“A”键,“分”闪烁,按“B”或“C”键,将其设置为“38”分; 再按“A”键,“秒”闪烁,按“B”或“C”键,秒从00开始计时;(注:无秒数码管时,此步骤不显示。)

再按“A”键,退出时间的设置。

2、定闹的设置:

按“D”键,进入定闹的设置,月数码管位置显示定闹序号,序号闪烁,按“B”或“C”键,可选择定闹1~4中的某个设置;

再按“D”键时闪烁,按“B”或“C”键其调整为设置值;

再按“D”键分闪烁,按“B”或“C”键其调整为设置值;

再按“D”键,在日数码管位置显示“on”或“--”的定闹状态并闪烁,,

按“B”或“C”键,关闭或开启此定闹,

再按“D”键,退出定闹的设置。

注:4个定闹中只要有1个或1个以上的定闹状态设置为开启,定闹指示灯即亮,只有

所有定闹的状态都为关闭时,定闹指示灯才灭。

3、整点闹铃的设置:

在正常运行状态下,按一下“B”键,面板上的整点闹指示灯“亮”表示整点

闹铃已开启,反之,灯“灭”为关闭。

篇二:万年历的算法

摘自: 星期、干支、二十八宿计算公式 打印本页 关闭本窗口

1. 求星期公式

星期=[5+A(实际天数)] mod 7

2. 干支计算公式

六十甲子干支序号,从1->59->0。

六十甲子干支序号=[23+A(实际天数)] mod 60

3. 二十八宿计算公式

二十八宿序号=[23+A(实际天数)] mod 28

4. 实际天数A的计算

A=B(基本天数)+C(闰日天数)

B=(计算年-1)*365+(要计算到年的月日天数)

例:1984年2月1日的基本天数B=(1984-1)*365+(31+1)=723827(天), 其中,31是1月为31天,1为2月1日为1天。

公元308年8月28日的基本天数

B=(308-1)*365+(31+28+31+30+31+30+31+27)=112055+239=112294(天) 这里的(要计算到年的月日天数),用的是公历,月日天数的规则我好 象小学就学过了。哈哈……

C=(计算年-1) div 4 -误差修正值 + fixValue2

fixValue2为0或者1。常值为0,当年数为闰年(公历闰年法)之中的3月 1日之后的为1。

误差修正值推算:

公元元年1月1日至1582年10月14日为0。

1582年10月15日至1699年12月31日为10。

从1701年1月1日起每增加一个世纪累加1,但能被400除尽的世纪不累 加1。此方法推算即可。

--有一个问题,1700年这一年的修正值应为多少呢?算法中正好没有 讲到,但看来应该是10。

例1701年1月1日起误差值为11,而1801年1月1日起误差修正值为12, 而1901年1月1日起误差修正值为13,

但2001年误差修正值仍为13,因为2000年能被400整除,故不累加。而 2101年1月1日起误差修正值为14。

5. 实例:1998.3.15的星期、干支与二十八宿

B=(1998-1)*365+(31+28+15)=728979

C=(1998-1) div 4 - 13 + 0 = 486

A=B+C=728979+486=729465

星期序号=(5+729465) mod 7=0,即为星期日

干支序号=(13+729465) mod 60=58,即为辛酉

二十八宿序号=(23+729465) mod 28=4,即为房

=================================================== 好可怕!还有一些其它公式……但好象有些参数不知道怎么得到:

二十四节交节日算法:

用已知年的交接时辰加上22个小时35分,超过24要减去24,分数足60 进1个小时,即得到8年后的各节交节时辰。

如2000年雨水交节时辰为16时22分,则2008年雨水交节时辰为14时52 分。

因为16时22分+22时35分=38时57分。38-24=14时。

谁知道公元元年到公元八年的交节日,这个算法就可以实现了。--好 象逆算法可以解决这个问题。谁试试?

农历闰月算法:

农历中,二十四节气(十二节气和十二中气)的中气落在月末的话,下 个月就没有中气。农历将这种有节(节气)无气(中气)的月份规定为闰 月。平均计算,19年有七个闰月。

但二十四个节气的十二节气和十二中气是怎么分的呢?我没有资料, 估记应该是一节气一中气这样交叉。 :(

unit CNYear;

interface

uses sysutils;

type TCNDate = Cardinal;

function DecodeGregToCNDate(dtGreg:TDateTime):TCNDate;

function

GetGregDateFromCN(cnYear,cnMonth,cnDay:word;bLeap:Boolean=Fal se):TDateTime;

function GregDateToCNStr(dtGreg:TDateTime):String;

function isCNLeap(cnDate:TCNDate):boolean;

implementation

const cstDateOrg:Integer=32900; //公历1990-01-27的TDateTime表 示 对应农历1990-01-01

const cstCNYearOrg=1990;

const cstCNTable:array[cstCNYearOrg..cstCNYearOrg + 60] of

WORD=( // unsigned 16-bit

24402, 3730, 3366, 13614, 2647, 35542, 858, 1749, //1997

23401, 1865, 1683, 19099, 1323, 2651, 10926, 1386, //2005

32213, 2980, 2889, 23891, 2709, 1325, 17757, 2741, //2013

39850, 1490, 3493, 61098, 3402, 3221, 19102, 1366, //2021

2773, 10970, 1746, 26469, 1829, 1611, 22103, 3243, //2029

1370, 13678, 2902, 48978, 2898, 2853, 60715, 2635, //2037

1195, 21179, 1453, 2922, 11690, 3474, 32421, 3365, //2045

2645, 55901, 1206, 1461, 14038); //2050

//建表方法:

// 0101 111101010010 高四位是闰月位置,后12位表示大小月,大月30 天,小月29天,

//闰月一般算小月,但是有三个特例2017/06,2036/06,2047/05

//对于特例则高四位的闰月位置表示法中的最高为设置为1 特殊处理 用wLeapNormal变量

// //2017/06 28330->61098 2036/06 27947->60715 2047/05

23133->55901

//如果希望用汇编,这里有一条信息:农历不会滞后公历2个月. //将公历转换为农历

//返回:12位年份+4位月份+5位日期

function DecodeGregToCNDate(dtGreg:TDateTime):TCNDate; var

iDayLeave:Integer;

wYear,wMonth,wDay:WORD;

i,j:integer;

wBigSmallDist,wLeap,wCount,wLeapShift:WORD;

label OK;

begin

result := 0;

iDayLeave := Trunc(dtGreg) - cstDateOrg;

DecodeDate(IncMonth(dtGreg,-1),wYear,wMonth,wDay);

if (iDayLeave < 0) or (iDayLeave > 22295 )then Exit;

//Raise Exception.Create('目前只能算1990-01-27以后的'); //Raise Exception.Create('目前只能算2051-02-11以前的'); for i:=Low(cstCNTable) to High(cstCNTable) do begin

wBigSmallDist := cstCNTable[i];

wLeap := wBigSmallDist shr 12;

if wLeap > 12 then begin

wLeap := wLeap and 7;

wLeapShift := 1;

end else

wLeapShift := 0;

for j:=1 to 12 do begin

wCount:=(wBigSmallDist and 1) + 29;

if j=wLeap then wCount := wCount - wLeapShift;

if iDayLeave < wCount then begin

Result := (i shl 9) + (j shl 5) + iDayLeave + 1;

Exit;

end;

iDayLeave := iDayLeave - wCount;

if j=wLeap then begin

wCount:=29 + wLeapShift;

if iDayLeave < wCount then begin

Result := (i shl 9) + (j shl 5) + iDayLeave + 1 + (1 shl 21);

Exit;

end;

iDayLeave := iDayLeave - wCount;

end;

wBigSmallDist := wBigSmallDist shr 1;

end;

end;

//返回值:

// 1位闰月标志 + 12位年份+4位月份+5位日期 (共22位) end;

function isCNLeap(cnDate:TCNDate):boolean;

begin

result := (cnDate and $200000) <> 0;

end;

function

GetGregDateFromCN(cnYear,cnMonth,cnDay:word;bLeap:Boolean=Fal se):TDateTime;

var

i,j:integer;

DayCount:integer;

wBigSmallDist,wLeap,wLeapShift:WORD;

begin

// 0101 010010101111 高四位是闰月位置,后12位表示大小月,大月30 天,小月29天,

DayCount := 0;

if (cnYear < 1990) or (cnYear >2050) then begin

Result := 0;

Exit;

end;

for i:= cstCNYearOrg to cnYear-1 do begin

wBigSmallDist := cstCNTable[i];

if (wBIgSmallDist and $F000) <> 0 then DayCount := DayCount + 29;

DayCount := DayCount + 12 * 29;

for j:= 1 to 12 do begin

DayCount := DayCount + wBigSmallDist and 1;

wBigSmallDist := wBigSmallDist shr 1;

end;

end;

wBigSmallDist := cstCNTable[cnYear];

wLeap := wBigSmallDist shr 12;

if wLeap > 12 then begin

wLeap := wLeap and 7;

wLeapShift := 1; //大月在闰月.

end else

wLeapShift := 0;

for j:= 1 to cnMonth-1 do begin

DayCount:=DayCount + (wBigSmallDist and 1) + 29; if j=wLeap then DayCount := DayCount + 29; wBigSmallDist := wBigSmallDist shr 1;

end;

if bLeap and (cnMonth = wLeap) then //是要闰月的吗? DayCount := DayCount + 30 - wLeapShift;

result := cstDateOrg + DayCount + cnDay - 1; end;

//将日期显示成农历字符串.

function GregDateToCNStr(dtGreg:TDateTime):String; const hzNumber:array[0..10] of string=('零','一','二','三',' 四','五','六','七','八','九','十');

function ConvertYMD(Number:Word;YMD:Word)(转 载 于:wWW.smHAida.cOM 海达范文网:万年历):string; var

wTmp:word;

begin

result := '';

if YMD = 1 then begin //年份

while Number > 0 do begin

result := hzNumber[Number Mod 10] + result; Number := Number DIV 10;

end;

Exit;

end;

if Number<=10 then begin //可只用1位

if YMD = 2 then //月份

result := hzNumber[Number]

else //天

result := '初' + hzNumber[Number];

Exit;

end;

wTmp := Number Mod 10; //个位

if wTmp <> 0 then result := hzNumber[wTmp]; wTmp := Number Div 10; //十位

result:='十'+result;

if wTmp > 1 then result := hzNumber[wTmp] + result;

篇三:电子万年历设计

长 沙 学 院

《单片机原理及应用》

课程设计说明书

题系

(

目 )

电子万年历设计 电子与通信工程系

专业(班级) 姓学指起

名 号

导止

教日

师 期

《单片机原理及应用》课程设计任务书

系(部):电信系 专业:

摘要

二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。

单片机作为当今领域应用广泛的电子器件,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。

本设计由单片机STC89C52芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,设计了一个简易的电子时钟,它由5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。

关键词 :电子万年历, 时钟电钟,单片机,DS1302,液晶LCD1602。

目 录

一.设计方案 ........................................................................................................................................................... 1 二.硬件单元电路设计 ........................................................................................................................................... 1

1.单片机主控制模块的设计 ......................................................................................................................... 1 2.DS1302时钟电路模块的设计 .................................................................................................................... 3 3.LCD1602显示电路模块的设计 .................................................................................................................. 3 4.按键电路模块的设计 ................................................................................................................................. 4 三.软件设计流程图 ............................................................................................................................................... 5 四.仿真结果与实物展示 ....................................................................................................................................... 5

1.Protues仿真结果 ........................................................................................................................................ 6 2.实物展示 ....................................................................................................................................................... 6 五.设计心得 ........................................................................................................................................................... 6 参考文献 ................................................................................................................................................................... 7

一.设计方案

本设计采用STC89C52单片机为核心的单片机控制芯片,利用单片机强大的控制能力及其控制的准确性,灵活的编程设计和丰富的IO端口,通过与DS1302时钟芯片进行不断通信从而获得实时时间,并将获得的信息通过1602LCD显示出来,还可以通过相应的不同按键调整相应的值。

本设计系统可以分为硬件部分和软件部分两大部分,其中硬件部分可以分为七个模块:稳压电源模块、串口下载模块单片机控制模块、LCD1602显示模块、DS1302时钟模块、按键设置模块。软件部分包括主程序、初始化程序、LCD显示程序、读/写DS1302数据程序、延时程序等组成。系统总体方案设计原理框图1-1所示。

图1.1 系统总体方案设计原理框图

二.硬件单元电路设计

1.单片机主控制模块的设计

(1)单片机采用STC89C52,STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。STC89C52单片机引脚图如图1.2所示。

图2.1 STC89C52单片机引脚图

STC89C52单片机引脚介绍:

Vss(20脚):接地 VCC(40脚): 主电源+5V

XTAL1(19脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。

XTAL2(18脚): 接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS

篇四:万年历与计算器

题 目:基于单片机的万年历带计算器

学生名字:袁康

学生班级:本电气

学生学号:

成 绩:

批改老师:

电子设计竞赛教程 考试(设计报告) 122 2012010143236 2014年12月25日

目录

摘要 ??????????????????????Ⅰ

一、绪论?????????????????????1

二、系统方案分析?????????????????2

三、硬件设计???????????????????2

3.1、系统框架图??????????????????3 3.2、LCD1602的原理及其应用 ?????????????3 3.3、时钟芯片DS1302的工作原理????????????5

四、软件设计???????????????????7 4.1软件流程???????????????????7 4.2软件仿真???????????????????8

五、系统调试 ??????????????????8

六、结语 ????????????????????9 附录1参考文献?????????????????10 附录2元件清单?????????????????10

摘要

随着科技的快速发展,电子万年历是一种非常广泛日常计时工具,在现代社会越来越流行。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。本文使用单片机与时钟芯片DS1302,位主要部件,设计了一款实用的电子万年历,并附带计算器功能,能进行加、减、乘、除。

关键字:单片机,万年历,DS1302,计算器

Abstract

With the rapid development of technology, electronic calendar is a very wide range of daily timing tool, more and more popular in modern society. It can be years, months, days, hours, minutes and seconds for timing, but also with leap year compensation and other features. This article uses the microcontroller clock chip DS1302, place the main components, designed a practical electronic calendar, and comes with a calculator function, can add, subtract, multiply, and divide.

Keywords: SCM, calendar , calculator

一、绪论

众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本设计要制作的就是单片机于生活中最为常见的几种应用——简易计算器和电子万年历。本简易计算器和电子万年历以AT89S52单片机作为核心,可以显示简易的计算和时间,时间可以人为设定;另外还可以显示当前的日历,显示格式为年(四位),月(两位),日(两位)。设置时间的位切换、设定数值、启动定时器、切换日历通过外部中断来实现。简易计算器不仅可以进行简易的计算还可以显示时间。简易计算器显示电路由LCD1602组成, 制作该装置的材料需要有软硬件的支持,硬件方面STC89C52单片机,晶振,电源,液晶屏LCD1602,DS1302时钟芯片。

本次设计选用DALLAS公司生产的日历时钟芯片DS1302来作为实时时钟芯片,为本系统提供详细的年、月、日、星期和小时、分钟、秒等时间信息,而且DS1302的使用寿命长,误差小,功耗低等优点。电子万年历采用直观数字显示,可以同时显示年、月、日、时、分、秒等信息,还具有定时和时间校准等功能。该电路采用STC89C52RC单片机作为核心,功耗小,电压可选用3.3~5.5V电压供电。本次设计在电子万年历的基础上加上了计算器,通过切换键来实现两个功能的互换。计算器可以进行加、减、乘、除的运算。

本系统硬件部分由STC89C52RC单片机、DS1302时钟芯片、1602液晶显示器、4*4键盘等部分构成;拥有时间设置、时间显示、计算器、功能切换等功能。

具体实现功能如下:

(1)显示年、月、日、时、分、秒等信息

(2)具有可调整日期和时间功能

(3)与即时时间同步(不接外部电源)

(4)按切换键后可进行简单的四则运算

二、系统方案分析

经过多方面的研究与资料的查找,我们发现,基本上都是使用DS1302来作为时钟芯片,这是做电子万年历的热门手法,不过万年历带计算器的倒是很少见。而显示方面,有的使用数码管,有的使用液晶显示器,有的使用点阵扫描,甚至有的使用复古的辉光管。所以我们提出以下方案:

1、用单片机作为核心,用DS1302作为时钟芯片,用4*4矩阵按键作为计算器按键,用LCD1602液晶显示器来显示。

2、用单片机作为核心,用DS1302作为时钟芯片,用4*4矩阵按键作为计算器按键,用两个4位一体集成数码管来显示。

3、用单片机作为核心,用DS1302作为时钟芯片,用4*4矩阵按键作为计算器按键,用两个16*16点阵来显示。

经过探讨,我们使用的89C52单片机只有4个P口,4*4矩阵键盘得占用一个P口,调时按钮与时钟芯片合起来也占用一个P口,剩下两个P口,不足以供给显示两个16*16点阵,而两个4位一体数码管,在显示计算时由于位数的限制,会使计算范围大受限制,所以我们最终选用方案1来进行本次设计。

三、硬件设计

本系统以AT89S52单片机为核心,本系统选用12MHZ的晶振,,使得单片机有合理的运行速度。起振电容22pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。DS1302时钟芯片选用32.768KHz的晶振,以此保持时间的准确性。并在后备电源处提供了后备电源,当没有外接电源时,后备电源就供电,这样就可以保持时钟芯片的不断电及掉电也可以准确计时。本系统中的后备电源采用3v的电子电源,其寿命可达一年以上。液晶显示器采用背光的,本次设计选用16引脚的LCD1602。

1、本课题设计的是简单的计算器和万年历,可以进行四则运算和显示时间,为了得到较好的显示效果,所以采用背光LCD1602显示数据和结果;

2、计算器部分:键盘包括数字键(0-9)、符号键(+、-、*、/、.)、清除键(ON/C)和等号键(=),故需要16个按键,设计中采用4*4矩阵键盘;

篇五:电子万年历

电子万年历设计

摘 要

随着现代生活节奏的不断加快,时间对于我们每个人来说也越来越重要,我们都需要有工具来度量时间。电子万年历作为一种应用广泛的日常计时工具,由于它具有读取方便、显示直观、价格低廉等诸多优点,在当代社会中的应用也越来越广泛,大大方便了人们的生活和工作。

本设计是基于单片机技术原理,采用AT89S52单片机芯片作为主控制器,并采用时钟芯片DS1302来实现时钟,通过硬件电路的制作及软件程序的编制,利用单片机的控制作用通过共阳极数码管显示时间,实现显示阳历的年、月、日、星期、时、分、秒以及阴历的月、日的功能,还具有掉电继续计时的功能。

本设计主要由按键模块、显示模块、DS1302时钟模块、AT89S52主控制系统组成,其中按键电路采用3个按键构成独立连接式键盘,显示电路采用19个共阳极数码管构成,并利用74LS164译码器将二进制代码转化为对应的高低电平信号,并利用74LS138芯片来实现数码管的动态选择。时钟模块采用DS1302芯片,它的使用寿命长、误差小,满足电子万年历需要精确计时的要求。

关键词:AT89S52,DS1302,数码管,译码器

I

THE DESIGN OF ELECTRONIC CALENDAR

ABSTRACT

As the pace of modern life continues to increase,time is becoming more and more important for us. We all need the tools to measure time. As a widely used timing tool, Electronic calendar has many advantages, such as easy to read, direct display and low cost. In modern society, it is becoming more and more extensive and makes our life and work easier.

This design is based on principles of single-chip computer, using chip AT89S52 as the core controller and clock chip DS1302 as the clock. By combining the hardware circuits and software programs preparation, using common anode LED to display time under the control of single-chip computer. It can display the date of solar calendar and lunar calendar. It can continue to measure time after power lost.

This design consists of four main parts, including key module, display module, DS1302 clock module and AT89S52 master control system. Buttons circuit uses three buttons to make up the independent keyboard. Display circuit consists of 19 common anodes LED. It uses 74LS164 to translate binary code into the corresponding high level signal and uses 74ls138 to choose the corresponding digital tube. The clock module uses clock chip DS1302, DS1302 meets the requirement of accurate timekeeping because of its long service life and small error.

KEY WORDS:AT89S52,DS1302,Digital tube,Decoder

II

目 录

前 言 ................................................. 1

第1章 系统设计方案的选择 .............................. 3

1.1 电子万年历的设计意义 ...................................................................3 1.2 国内外同类设计的发展概况 ..........................................................3 1.3 设计要求 .............................................................................................4 1.4 设计方案的选择与论证 ...................................................................5

1.4.1 单片机芯片的选择 .....................................................................5 1.4.2 时钟芯片的选择 .........................................................................5 1.4.3 显示模块的选择 .........................................................................6 1.4.4 键盘模块的选择 .........................................................................6 1.5 本设计的最终方案 ............................................................................6

第2章 系统的硬件设计与实现 ............................ 7

2.1 电路设计总框图 ................................................................................7 2.2 系统的硬件概述 ................................................................................7 2.3 主要单元电路的设计 .......................................................................8

2.3.1 AT89S52主控制系统设计 ........................................................8 2.3.2 键盘模块设计 ........................................................................... 13 2.3.3 时钟模块设计 ........................................................................... 14 2.3.4 显示模块的设计 ...................................................................... 18

第3章 系统的软件设计 ................................. 23

3.1 主程序流程图 .................................................................................. 23 3.2 阳历程序设计 .................................................................................. 24

3.2.1 DS1302初始化 ......................................................................... 24 3.2.2 BCD码转化为十进制子程序 ................................................ 27 3.3 时间调整程序的设计 .................................................................... 27 3.4 阴历程序的设计 ............................................................................. 29

III

3.4.1 计算阳历天数的程序设计 ..................................................... 29 3.4.2 阳历转阴历程序 ....................................................................... 32

结 论 ................................................ 33

参考文献 .............................................. 34

致 谢 ................................................ 36

附 录 ................................................ 37

IV

前 言

在当代繁忙的工作与生活中,时间与我们每个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已。

万年历是采用数字电路实现对时、分、秒的数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。电子万年历采用直观的数字显示,可以同时显示年、月、日、周、时、分、秒等信息,还具有时间校准功能。

综上所述,万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

国内外电子万年历的设计已经比较成熟了,它可以采用很多种设计方案,每种方案各有自己的优缺点。国内外电子万年历的设计主要有以下几种设计方案。

第一种设计方案是采用可编程逻辑器件设计。这种方案采用PLD器件,设计起来结构清晰,各个模块从硬件上设计起来相对简单,控制与显示模块间的连接也比较方便,但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也会相对多些,从成本上来讲,用可编程逻辑器件来设计并没什么优势可言。

第二种设计方案是采用ARM来设计。ARM微处理器的功能特别强大,

1

作文素材