基于51单片机电子万年历论文

更新时间:2024-05-03 21:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于51单片机电子万年历毕业论文

摘 要:

电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。

万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。

关键词:

时钟电钟;DS1302;DS18B20;动态扫描;单片机

~~~~~~目录~~~~~~

一、设计要求与方案论证 ???????????????????????????4

1

1.1 设计要求 ????????????????????????????????4 1.2 系统基本方案选择和论证 ?????????????????????????4 1.2.1单片机芯片的选择方案和论证 ?????????????????????4 1.2.2 显示模块选择方案和论证 ???????????????????????4 1.2.3 时钟芯片的选择方案和论证 ??????????????????????4 二.系统的硬件设计与实现???????????????????????????5 2.1 电路设计框图 ??????????????????????????????5 2.2 系统硬件概述 ??????????????????????????????5 2.3 主要单元电路的设计 ???????????????????????????6 2.3.1单片机主控制模块的设计 ???????????????????????6 2.3.2时钟电路模块的设计 ?????????????????????????6 2.3.3电路原理及说明 ???????????????????????????7 2.3 4显示模块的设计 ???????????????????????????8 三、系统的软件设计 ?????????????????????????????9 3.1程序流程框图 ??????????????????????????????9 3.2 子程序的设计 ??????????????????????????????9 3.2.1读、写DS1302子程序 ????????????????????????10 五、作品总结????????????????????????????????12 六、致谢词?????????????????????????????????12 参考文献??????????????????????????????????13 附录一:系统电路图?????????????????????????????14 附录二:系统程序清单????????????????????????????15 附录三:系统使用说明书???????????????????????????40

2

一、设计要求与方案论证 1.1 设计要求:

(1)基本要求

① 具有年、月、日、星期、时、分、秒等功能; ② 万年历具有闰月识别显示功能;

③ 具备年、月、日、星期、时、分、秒校准功能;

( 2 ) 创新要求 ① 万年历具有阴历显示功能; ② 具有测量室内温度功能;

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

1.2.1单片机芯片的选择方案和论证:

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用AT89S52作为主控制系统.

1.2.2 显示模块选择方案和论证:

方案一:

采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏. 方案二:

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

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 所以采用了LED数码管作为显示。

1.2.3时钟芯片的选择方案和论证:

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二:

3

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、

分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.

1.3 电路设计最终方案决定

综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;数字式温度传感器;LED数码管动态扫描作为显示。

二.系统的硬件设计与实现 2.1 电路设计框图

LED数码管动态扫描显示模块 AT89S52 键盘模块 主控制模 DS1302时钟模块 2.2 系统硬件概述

本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由21个数码管,74ls138、74ls47译码器构成。使用动态扫描显示方式对数字的显示。

块 2.3 主要单元电路的设计

2.3.1单片机主控制模块的设计

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

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 所示

4

图-1 主控制系统

2.3.2时钟电路模块的设计

图-2示出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进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。

图-2 DS1302的引脚图

2.3.3电路原理及说明

5

3.2 子程序的设计

3.2.1 读、写DS1302子程序 ;写1302程序WRITE: CLR SCLK NOP

SETB RST NOP

MOV A,32H MOV R4,#8 WRITE1:

RRC A ;送地址给1302 NOP NOP CLR SCLK NOP NOP NOP

MOV IO,C NOP NOP NOP

SETB SCLK NOP NOP

DJNZ R4,WRITE1 CLR SCLK NOP

MOV A,31H MOV R4,#8 WRITE2: RRC A

NOP ;送数据给1302 CLR SCLK NOP NOP MOV IO,C NOP NOP NOP

SETB SCLK NOP NOP

DJNZ R4,WRITE2

CLR RST RET

;读1302程序 READ:

CLR SCLK NOP NOP SETB RST NOP

MOV A,32H MOV R4,#8 READ1:

RRC A ;送地址给1302 NOP

MOV IO,C NOP NOP NOP

SETB SCLK NOP NOP NOP

CLR SCLK NOP NOP

DJNZ R4,READ1 MOV R4,#8 READ2:

CLR SCLK

NOP ;从1302中读出数据 NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP

11

NOP NOP NOP

SETB SCLK NOP

DJNZ R4,READ2 MOV 31H,A CLR RST RET

五、作品总结

在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品。达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。相互学习、相互讨论、研究。完了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。反而达到事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次比赛中学到了很多很多东西,这是最重要的。总之,参加电子竞赛我们的能力得到了全方位的提高。

致谢词

感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。

在做作品的日子里得到了刘老师的悉心指导,在此向我们的指导教师致以诚挚的谢意。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我们对这次的作品完成有了信心和动力,也给了我们很多无私的帮助和支持,我们在此深表谢意。

姓名:龚泽汗

参考文献

1 2

刘勇 编 数字电路 电子工业出版社 2004

陈正振 编 电子电路设计与制作 广西交通职业技术学院信息工程系 2007

3 杨子文 编 单片机原理及应用 西安电子科技大学出版社 2006 4 王法能 编 单片机原理及应用 科学出版社 2004

2010年5月20日

附录一:系统电路图

12

13

附录二:系统程序清单

CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0.7 SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 year DATA 66H month DATA 65H week DATA 64H day DATA 63H hour DATA 62H mintue DATA 61H second DATA 60H

ORG 0000H LJMP START ORG 001BH LJMP INTT1

START: ;初值 LCALL ZJ

SETB EA

MOV SCON,#00H ; 串行输出,方式0 MOV TMOD,#10H ;计数器1,方式1 MOV TL1,#00H MOV TH1,#00H

MOV 32H,#8EH

MOV 31H,#00H ;允许写1302 LCALL WRITE MOV 32H,#90H

MOV 31H,#0A6H ;1302充电,充电电流1.1MA

LCALL WRITE

;主程序~~~~~~~~~~~~~~~~~~~~~ MAIN1:

MOV 32H,#8DH ;读出年 LCALL READ MOV year,31H

MOV 32H,#8BH ;读出星期 LCALL READ MOV week,31H

MOV 32H,#89H ;读出月 LCALL READ MOV month,31H

MOV 32H,#87H ;读出日 LCALL READ MOV day,31H

MOV 32H,#85H ;读出小时 LCALL READ MOV hour,31H

MOV 32H,#83H ;读出分钟 LCALL READ

MOV mintue,31H

MOV 32H,#81H ;读出秒 LCALL READ

MOV second,31H

;~~~~~~~~~~~~分离缓存~~~~~~~~ MOV R0,year ;年分离,送显示缓存 LCALL DIVIDE MOV 7BH,R1 MOV 4BH,R1 MOV 7CH,R2 MOV 4CH,R2 MOV 78H,week

MOV 48H,week

MOV R0,month ;月分离,送显示缓存 LCALL DIVIDE MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2

MOV R0,day ;日分离,送显示缓存 LCALL DIVIDE MOV 76H,R1

14

MOV 46H,R1

MOV 77H,R2 MOV 47H,R2

MOV R0,hour ;小时分离,送显示缓存 LCALL DIVIDE MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2

MOV R0,mintue ;分钟分离,送显示缓存 LCALL DIVIDE MOV 72H,R1 MOV 42H,R1 MOV 73H,R2

MOV 43H,R2

MOV R0,second ;秒分离,送显示缓存 LCALL DIVIDE MOV 70H,R1 MOV 40H,R1 MOV 71H,R2 MOV 41H,R2 CLR EA

LCALL TOUTOU SETB EA

LCALL DISPLAY

LCALL GENGXIAN ;更新农历程序 JNB P0.1,SETG111

JNB F0,SSS setb P0.4 ;非闰月,则p0.4清零,指示灯亮 LJMP MAIN1 SETG111: LJMP SETG SSS:

clr P0.4 ;闰月,则p0.4置位,指示灯不亮 LJMP MAIN1

;~~~~~~~~~~~~~~ 温度 TOUTOU:

LCALL CHUSHI LCALL RDTEMP MOV A,TEMPL

ANL A,#11110000B

MOV TEMPL,A MOV A,TEMPH

ANL A,#00000111B ORL A,TEMPL SWAP A MOV 25H,A MOV A,25H MOV B,#64H DIV AB MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV 10H,A RET

CHUSHI:

LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#4EH LCALL WRITE111 MOV A,#CONFIG12 LCALL WRITE111 RET

RDTEMP:

LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#44H LCALL WRITE111 LCALL DL1MS LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL,A LCALL ERAD111 MOV TEMPH,A RET RESET: LA:

15

MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#06H SETB F0 LJMP S_PLAY Y7:

CJNE R2,#00H,Y71 LCALL CHECKRE ;查前一个月是否为闰月

CJNE A,#06H,Y72

MOV 56H,#29H ;前一个月是闰月 MOV A,R4 ;R2中为0,则为前一个月

ANL A,#0FH ;的最后一天 JNZ Y73 MOV 56H,#30H MOV 57H,#06H SETB F0 LJMP S_pLAY Y73:

MOV 57H,#06H SETB F0

LJMP S_PLAY Y72:

MOV 56H,#29H ;前一个月不是闰月 MOV A,R6 JB ACC.0,Y74 MOV 56H,#30H Y74:

MOV 57H,#06H CLR F0 LJMP S_PLAY Y71:

MOV A,R2 ;R2中为日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#07H CLR F0

LJMP S_PLAY

RY7:

CJNE R2,#00H,RY71

MOV 56H,#29H ;R2中为0,则为前一

个月

MOV A,R5 ;的最后一天 JB ACC.6,RY72 MOV 56H,#30H RY72:

MOV 57H,#07H CLR F0 LJMP S_PLAY RY71:

MOV A,R2 ;R2中为日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#07H SETB F0

LJMP S_PLAY

Y8:

CJNE R2,#00H,Y81 LCALL CHECKRE ;查前一个月是否为闰月 CJNE A,#07H,Y82

MOV 56H,#29H ;前一个月是闰月 MOV A,R4 ;R2中为0,则为前一个月 ANL A,#0FH ;的最后一天 JNZ Y83

MOV 56H,#30H MOV 57H,#07H SETB F0 LJMP S_PLAY Y83:

MOV 57H,#07H SETB F0

LJMP S_PLAY

Y82:

MOV 56H,#29H ;前一个月不是闰月 MOV A,R5

JB ACC.6,Y84 MOV 56H,#30H Y84:

MOV 57H,#07H CLR F0

LJMP S_PLAY

Y81:

MOV A,R2 ;R2中为日的值

26

DL1MS:

MOV R6,#14H DL1:

MOV R7,#19H DL2:

DJNZ R7,DL2 DJNZ R6,DL1 RET

;数据表~~~~~~~~~~~~~~~~~~~`~~ TAB:

DB

35,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00H DB

31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00H DB

28,25H,04H,71H,48,66H,42H,00H,37,33H,22H,00H

DB

25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00H DB

22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H

DB

49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60H

DB

46,53H,24H,00H,35,25H,54H,00H,24,41H,

52H,41H

DB

42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H DB

40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H

DB

36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H DB

33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00H DB

30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H

DB

27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H

DB

23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H DB

21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H

DB

47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H DB

44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30H END

27

附录三:系统使用说明书

如电路原理总图可知,本电路具有年、月、日、周日、时、分、秒、温度和农历功能, 总共由21个LED数码管显示,如下图-a所示。

图-a

日期和时间的修改由3个按键构成。如图-b所示。键1为向右移;键2为加1;键3为减1。

图-b

28

本文来源:https://www.bwwdw.com/article/rkig.html

Top