当前位置:文档之家› 基于单片机的万年历的设计(毕业论文)

基于单片机的万年历的设计(毕业论文)

青海民族大学

毕业论文(设计)论文题目:基于51 单片机的万年历的设计

青海民族大学毕业论文

摘要

随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活中。日历是人们不可或缺的日常用品。但一般日历都为纸制用品,使用不便,寿命不长。本文借助电路仿真软件Protues对基于AT89S51单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89C51单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCM 点阵液晶显示屏显示。时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。日历能显示阳历和阴历年、月、日以及星期、时、分、秒。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景

关键词:单片机万年历可调 DS1302 12864

Abstract

With the rapid development of world economy and the forthcoming of information era, many kinds of mini-type intelligent domestic electric appliances appear in our life one after another. Calendars are necessary daily goods in people’s life. This paper mainly discuss the design and simulation of electronic calender based on AT89S51 with the help of Protues. On the hardware side, the electronic calendar using AT89C51 microcontroller as the main control center, clock provided by the DS1302 clock chip , 1602LED dot matrix LCD display. Time and date adjusting is carried out by three keys, which can also set the alarm clock.To sum up the calendar has read convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages, conform to the trend of the development of electronic instruments, and has a broad market prospect.

Key words: SCM perpetual calendar DS1302 12864

万年历设计

目录

前言 (1)

1. 方案设计 (2)

1.1 系统基本方案选择和论证 (2)

1.1.1单片机芯片的选择 (2)

1.1.2显示模块选择方案和论证 (2)

1.1.3时钟芯片选择方案与论证 (2)

1.2 电路设计最终方案决定 (3)

2.系统的硬件设计与实现 (4)

2.1 电路设计框图 (4)

2.2 系统硬件概述 (4)

2.2.1 AT89C52概述 (4)

2.2.2 DS1302概述 (6)

2.2.3 12684概述 (7)

3. 系统的软件设计 (8)

3.1 程序流程框图 (8)

3.2 从1302读取日期和时间流程图 (9)

3.3 时间调整程序流程图 (10)

4.系统测试 (10)

4.1硬件测试 (10)

4.2软件测试 (11)

5.结论 (11)

参考文献 (12)

致谢 (13)

附录 (14)

青海民族大学毕业论文

前言

在日新月异的21世纪里,时间对现代人来说更加紧迫,从观太阳、摆钟到现在电子钟,时间的记录方式在不断的更新进步。然而,随着社会、科技的发展,集直观性,精度高,寿命长,功能全等为一体的记录方式更为人们所需求。在电子产业高速发展这一时代背景下,大规模集成电路大量出现,电子钟也因读取方便、显示直观、功能多样、电路简洁等诸多优点随之诞生,它的出现极大地影响了人们的生活,我们的时间记录更为全面和科学。因此,对万年历的研究与探索是具有相当重要的现实意义和实用价值。

电子万年历属于小型智能电子产品,既可广泛应用于家庭,也可应用于银行、医院、学校等公共场所。它利用单片机进行控制,因为单片机具有高可靠性、高性价比、低电压、低功耗等一系列优点;利用DS1302实时时钟芯片进行记时,因为其具有高性能、低功耗、带RAM的实时时钟电路,可对年、月、日、周日、时、分、秒进行计时,同时具有闰年补偿功能等优点;利用12864液晶显示,因为其具有显示功能强大、价格便宜等特点,再外加一些基本系统即可实现时间的调整和显示。因此,电子万年历制作既有市场前景,又能培养单片机的运用能力,无论从实用价值,还是从培养能力的角度来看这都是很有意义的毕业设计课题。

本万年历的设计要实现公历年、月、日,农历年、月、日,星期,时、分、秒,显示公历节日,农历节日,生日,时间段提醒以及节日、生日与时间段的交替显示,并在开机时设置显示作者的相关信息。最终在老师的指导和同学们的帮助下,经过自己的努力完成了这个课题,并从中提高了实践动手、团结合作和综合运用理论知识进行工程实践的能力。

1

万年历设计

1.方案设计

1.1 系统基本方案选择和论证

1.1.1单片机芯片的选择

本设计采用AT89C52芯片作为硬件核心,该芯片内有4K字节的在线编程Flash 存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。

1.1.2显示模块选择方案和论证

方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示。

方案二:LED数码管显示

数码管具有低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,操作简单方案等优点。但由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,所以不采用LED数码管作为显示。

方案三:LCD12864液晶显示

此液晶具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势和可视面积大,画面效果好,分辨率高,抗干扰能力强等特点,并且能够方便的显示文字和数字。

所以最终选择LCD12864。

1.1.3时钟芯片选择方案与论证

方案一:不使用芯片,采用单片机的定时计数器

这种方法直接采用单片机定时计数器提供信号,模拟时钟的时, 分,秒。如:利

2

青海民族大学毕业论文

用AT80C52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期。采用此种方案

虽然可以减少时钟芯片的使用,节约成本,但实现的时间误差较大,所以不采用此方案。

方案二:并行接口时钟芯片 DS12887

采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大。

方案三:串行接口时钟芯片DS1302

采用DS1302时钟芯片实现时钟,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。

所以,最终选择串行时钟芯片DS1302。

1.2 电路设计最终方案决定

综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用AT89C52作为主控制系统;DS1302提供时钟;12864液晶屏作为显示。

3

万年历设计

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

2.1 电路设计框图

单片机主控模块从DS1302时钟模块读取时间,通过片内芯片处理,将显示结果通过PO口床送至12684液晶显示模块显示出最终的界面;同时,单片机主控模块对键盘进行扫描,有按键按下时进入调整状态,并在12684液晶上显示状态。

2.2 系统硬件概述

2.2.1 AT89C52概述

AT89C52功能特性概述:8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时器/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路;可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式;空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作;掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。

AT89C52的引脚定义及功能:

Vcc :接+5V 电源

Vss :接地

4

青海民族大学毕业论文

5

XTAL1和XTAL2:时钟引脚,外接晶体引线端。当使用芯片内部时钟时,此两引脚端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

RST :复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使引脚输出高电平,设置SFR AUXR 的DISRT0(地址8EH )可打开或关闭该功能。DISRT0位缺省为RESET 输出高电平打开状态。

ALE/PROG :当访问外部程序存储器或数据存储器时,ALE (地址锁存器允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。 PSEN :程序存储允许(PSEN )输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN 信号。

EA/VPP :外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H —FFFFH ),EA 端必须保持低电平(接地)。需要注意的是:如果加密位LB1被编程,复位时内部会锁存EA 端状态。如EA 端为高电平(接Vcc 端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的变成电压Vpp.

PO P1 P2 P3口:四个I/O 口,其中P3口还具有第二功能: 端口引脚 第二功能 端口引脚 第二功能 P3.0 RXD (串行输入口) P3.4 T0(定时/计数器0) P3.1 TXD (串行输出口)

P3.5 T1(定时/计数器1)

P3.2 0INT (外中断0)

P3.6 WR (外部数据存储器写通道) P3.3 1INT (外中断1)

P3.7

RD (外部数据存储器读通道)

万年历设计

AT89C52管脚图及控制电路:

2.2.2 DS1302概述

DS1302功能特性概述:提时钟计数功能,可以对秒、分钟、小时、日、月、年、星期的计数;年计数可达到2100年;有31*8位的额外数据暂存寄存器;采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM

数据;内部有一个31×8的用于临时性存放数据的RAM寄存器;具有主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

AT89C52的引脚定义及功能:

Vcc1:备用电源

Vcc2:主电源

X1和X2:振荡源,外接32.7、68KHz晶振

I/O:串行数据输入端(双向)

SCLK:输入端 RST:复位端

6

青海民族大学毕业论文

DS1302管脚图及控制电路:

2.2.3 12684概述

12684功能特性概述:显示内容128×64点;全屏点阵;2M ROM总共提供8192

个汉字(16×16点阵);16K ROM总共提供128个字符(16×8点阵);工作温度:-20

—70摄氏度,存储温度:-30—80摄氏度。

引脚定义及功能:

VSS:电源地

VDD:电源正

V0:液晶显示器驱动电器(可调)

RS:RS=“H”,表示DB0—DB7为显示数据;RS=“L”,表示DB0—DB7为控制指

R/W:R/W=“H”,E=“H”,数据被督导DB0—DB7;R/W=“1”,E=“H→L”,DB0—DB7 的数据被写到IR或DR

DB1-7:数据线

PSB:串并口选择

NC:空脚

RST:复位脚

VOUT:倍压输出脚

LEDA/K:背光电源,A正 K负

7

万年历设计

12864管脚图及控制电路

3.系统的软件设计

该系统的软件设计方法与硬件设计相对应,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序将各程序模块连接起来。电子万年历的程序主要包括3个方面的内容:一是DS1302从单片机中读取数据进行计数,二是利用按键进行时间的调整,三是单片机中读取DS1302中的数据驱动LED12684显示时间。

3.1 程序流程框图

主程序流程框图如下图所示,12864,DS1302的数据读取及指令写入函数均已在各自的头文件中完成,在主程序中只须引用即可。

8

青海民族大学毕业论文

3.2 从1302读取日期和时间流程图

9

万年历设计

3.3 时间调整程序流程图

4.系统测试

4.1硬件测试

在Protues仿真结束后,于焊接板上完成了硬件组装。在调试硬件时遇到过很多问题,但只要细心、认真检查这些问题都是可以避免的,主要问题及解决办法现列如下:

(1)接通电源后LCD12864没有正确的显示。在不通电状态下用万用表检测电路是否正常连接,在检查回路时没有发现问题,怀疑是单片机驱动电路有问题,加载了所有端口的LED的驱动程序,所有端口都能正常工作,排除是单片机驱动电路有问题这一可能性;再次对电路进行检查发现排阻太小,换成10K的排阻后,LCD正常显示。

(2)电路工作一段时间之后有的芯片发热严重。经查发现原来是有尖锐的管脚

10

青海民族大学毕业论文

刺破邻近的漆包线造成短路,断掉该线并再次连接可解决问题。

(3)接通后液晶正常显示了,但是在时间位置全部显示“?”号,初步判断是时间未正确读取,经过仔细用万用表检查,发现DS302接地端接触不良,解决后显示正常。

4.2软件测试

(1)程序烧入后,开机画面正常,可是一进入显示界面就有未知符号出现,后又恢复正常,且调时也没问题。初步判断与显示程序无关,经过反复调试,发现是开机画面结束后为对12864液晶进行初始化,最后修改后问题得以解决。

(2)修改时间、日期时农历没有自动对应上。把不相关的程序暂时屏蔽,地农历的子程序独立调试,发现在调用农历自动更新时,对十进制和十六进制处理不好,所以会造成错乱。最后把相应的十进制进行修改,使得可以与十六进制对应,最后解决了此问题。

5.结论

通过对电子万年历的设计,从中不仅学习到了新知识,还丰富了许多的设计经验。例如进行程序编写时,由于思路的不清晰,导致程序问题不断出现,还不知从何而解,最后静下心来,仔细理了一下编程思路,再一步一步往下编写,遇到问题一个一个解决,这样既锻炼自己又节约了时间。经过这一个多月的努力,从开始准备资料到硬件电路的制作,再到毕业论文的完成,其中有问题不能得以解决的烦恼,也有收获新知的快乐。而且,经过这次设计真的理解了理论与实践的差别,没有扎实的理论,实践过程要走很多弯路,而实践中又会遇到很多理论上不曾提到过的问题。所有,我们要有脚踏实地,认真严谨,实事求是的学习态度,也要有不怕困难、坚持不懈、吃苦耐劳的精神去面对困难。

11

万年历设计

参考文献

杨子文.单片机原理及应用 .西安:西安电子科技大学出版社,2006

彭伟.单片机C语言程序设计实训100例.北京:电子工业出版社,2009

阎石.数字电子技术基础.北京:高等教育出版社,2006

陈正振.电子电路设计与制作.广西:广西交通职业技术学院信息工程系,2007 胡汉才.单片机原理与接口技术.北京:清华大学出版社,2004

何小艇.电子系统设计[M].杭州:浙江大学出版社,2007

李光飞.单片机课程设计实例指导.北京:北京航空航天大学出版社,2004.

马忠梅.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2003 侯玉宝.基于proteus的51系列单片机设计与仿真.北京:电子工业出版社,2008 郭荣生.电子技术实验与实践济南:中国石油大学出版社,2007

王法能.单片机原理及应用.北京:科学出版社 2004

12

青海民族大学毕业论文

致谢

我的大学生活将随着这个毕业论文而随之结束,在大学这四年的学习和生活中,我不仅学到了丰富的专业知识,还学会了怎么为人处世,怎么面对困难,怎么奋发向上,怎么学会关心别人。在学校期间,有太多的感动让我们怀念,有太多的人让我们难忘,有太多的笑声与快乐。总之,有太多太多值得怀念的东西,它将是我们一生宝贵的财富。

在这个毕业设计阶段,我学习到了新知识,丰富了实践经验,还对我们这个专业的工艺流程有了更深刻的理解,对我们毕业后从事本专业工作打下了结实的基础。因为这个过程,我们就拥有了比别人更多的专业体验,在面试中我们就比别人多了一个砝码。

在大学最后的这个阶段,经过一个月的努力终于完成了电子万年历设计,在此要感谢的人有很多,首先感谢学校提供的优越实验环境,使我能全身心的投入到我的设计中。感谢物理与电子工程学院,有大量量参考文献供我们查阅。感谢我的指导老师孙老师给我的仔细检查和改正。感谢同我一起探讨学习的同学们。还要感谢实验室老师的大力支持,当印制电路板生成后,借出各种调试工具,使系统在最短的时间里调试成功,使本系统能顺利实现。

13

万年历设计

14

附 录

附录一 元器件明细表:

元件名称

数量 元件名称

数量 AT89C52 1个 10K 电阻 1个 DS1302 1个 22UF 电解电容

1个

LCD12864 1个 30PF 电容 2个 排阻(10K )

1个 12M 晶振 1个 按钮

5个

32.768k 晶振

1个

附录二 仪器设备清单

仪器名称

数量 仪器名称 数量 RF-2148USB 智能编程器 1个

EDA 实验箱

1个

附录三 电路原理图

青海民族大学毕业论文附录四 PCB图

附录五实物图

15

万年历设计

附录六程序清单

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar sec,min,hour,day,month,year,week;

bit w;

uchar next;

void DelayUs2x(unsigned char t)

{

while(--t);

}

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

void delay(uint ms) // 延时子程序

{

uint a,b,c; //ms=1000为1.015s

for(a=2;a>0;a--)

for(b=46;b>0;b--)

for(c=ms;c>0;c--);

}

sbit RS = P2^4;

sbit RW = P2^5;

sbit E = P2^6;

sbit RES = P2^1;

sbit PSB = P2^0;

sbit sclk=P1^0; //1302串行时钟sbit I_O=P1^1; //1302数据端口

sbit rst=P1^2; //1302复位

16

青海民族大学毕业论文

sbit k1=P3^4; //功能健

sbit k2=P3^5; //时间加

sbit k3=P3^6; //时间减

sbit k4=P3^7; //确定键

#define DataPort P0 //单片机 P0<------> 液晶DB0-DB7

uchar code DayCode1[9]={0x00,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3}; uint code DayCode2[3]={0x111,0x130,0x14e};

uchar LunarMonth,LunarDay,LunarYear;

bit c_moon;

uchar code YearCode[300]=

{

0x0C,0x96,0x45, //2000 297

0x4d,0x4A,0xB8, //2001 300

0x0d,0x4A,0x4C, //2002 303

0x0d,0xA5,0x41, //2003 306

0x25,0xAA,0xB6, //2004 309

0x05,0x6A,0x49, //2005 312

0x7A,0xAd,0xBd, //2006 315

0x02,0x5d,0x52, //2007 318

0x09,0x2d,0x47, //2008 321

0x5C,0x95,0xBA, //2009 324

0x0A,0x95,0x4e, //2010 327

0x0B,0x4A,0x43, //2011

0x4B,0x55,0x37, //2012

0x0A,0xd5,0x4A, //2013

0x95,0x5A,0xBf, //2014

0x04,0xBA,0x53, //2015

0x0A,0x5B,0x48, //2016

0x65,0x2B,0xBC, //2017

0x05,0x2B,0x50, //2018

0x0A,0x93,0x45, //2019

0x47,0x4A,0xB9, //2020

0x06,0xAA,0x4C, //2021

0x0A,0xd5,0x41, //2022

0x24,0xdA,0xB6, //2023

0x04,0xB6,0x4A, //2024

0x69,0x57,0x3d, //2025

0x0A,0x4e,0x51, //2026

0x0d,0x26,0x46, //2027

0x5e,0x93,0x3A, //2028

0x0d,0x53,0x4d, //2029

0x05,0xAA,0x43, //2030

17

相关主题
文本预览
相关文档 最新文档