基于单片机多功能电子万年历的设计.docx

上传人:b****5 文档编号:28064023 上传时间:2023-07-08 格式:DOCX 页数:43 大小:95.46KB
下载 相关 举报
基于单片机多功能电子万年历的设计.docx_第1页
第1页 / 共43页
基于单片机多功能电子万年历的设计.docx_第2页
第2页 / 共43页
基于单片机多功能电子万年历的设计.docx_第3页
第3页 / 共43页
基于单片机多功能电子万年历的设计.docx_第4页
第4页 / 共43页
基于单片机多功能电子万年历的设计.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

基于单片机多功能电子万年历的设计.docx

《基于单片机多功能电子万年历的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机多功能电子万年历的设计.docx(43页珍藏版)》请在冰豆网上搜索。

基于单片机多功能电子万年历的设计.docx

基于单片机多功能电子万年历的设计

(封面)

XXXXXXX学院

 

基于单片机的多功能万年历设计报告

 

题目:

院(系):

专业班级:

学生姓名:

指导老师:

时间:

年月日

 

一.绪言……………………………………………………………3

二.系统总体方案设计……………….………………………………3

三.硬件系统设计:

…………………….……………………….4

四.系统软件设计………………….……………………………5

五.设计总结……………………………………………………8

六.参考文献……………………………………………………8

七.附录………………………………………………………….9

 

一.绪论

随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

由其是单片机技术的应用产品已经走进了千家万户。

电子万年历的出现给人们的生活带来的诸多方便。

本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。

万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。

因此,研究万年历及扩大其应用,有着非常现实的意义。

本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行。

二.系统总体方案设计

1.系统设计硬件框图

振荡电路

按键调节

DS1302

AT89C51

LED显示频

2.实现的基本原理

在本实验中,我引用了DS1302的时,分,秒功能,当时计数字24时通过74LS164给模块年月日进位,当日模块对应其相应月份进行向月进位时,就给月进位,当月满12时,给年进位。

 

三.硬件系统设计

1.元器件介绍

名称

图形

功能

 

DS1302

 

可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能

 

74LS164

 

74LS164是一个串行输入并行输出的移位寄存器,并带有清除端。

其中;Q0—Q7并行输出端。

A,B串行输入端。

MR清除端,为0时,输出清零。

CP时钟输入端。

 

AT89C51

at89c51单片机是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4Kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准MCS-51指令系统。

功能强大的at89c51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。

 

2.硬件原理图

四.系统软件设计

仿真过程

1、打开PROTEUS软件,并出画单片机电子万年历具体运行电路图。

3、检查所画电路运行图,确保没有错误以后,加载源程序。

4、加载完成后,单击电路图框下的开始按钮,进行仿真,观察LED数码管现实情况,此时LED数码管开始显示数字。

调节开关进行时间的调节。

当秒的显示间隔快与或慢与实际间隔时,调节石英晶体震荡器的频率参数,从而使秒的间隔达到标准。

然后检查电路其它问题,并对其的各参数进行调整,使之正确。

仿真结果

通过对源程序的编译,改正了其中的很多错误,然后运行,保证源程序的正确性。

然后按原理图选择正确合理的电器元件,画出正确的电路图,加载源程序运行,顺利实现了单片机数字电子钟的“小时”、“分钟”、“秒”的显示。

1主程序流程图设计

开始

设置串行口工作方式

设置计数器工作方式

给计数器1,0赋初值

调用1302写操作

启动定时计数器0

定时时间到?

读年月日时分秒

把要显示的数据送到缓冲区

调用显示子程序

结束

N

调用定时中断

Y

2显示模块流程图

基本显示模块设计的重点是由显示代码取得相应的段码、显示段码数据的串行发送,程序流程如图1-11所示。

其中时个位的段码必须加上小数点,即带小数点显示时个位,目的是以小数点符代替时间分割符“-”。

软件秒脉冲发生器其实质是利用了定时器0的定时溢出中断,将它设定为100ms溢出中断,则10次中断的时间正好为1s。

将时间参数设计为100ms的原因有两个:

1)根据系统时钟主频为6M的特点,16位定时器最大定时时间为65536×2M(M为机器周期,这里是2μS),即131ms,取整数100便于计次数;

2)如取的太短,如10ms,则定时器频繁中断,干扰系统正常运行效果。

有了秒脉冲发生器,10次中断为1s,秒指示灯闪亮1次,秒变量单元加1,60后分变量单元加1,如果为60分则时变量单元加1。

任何一个变量的变化,则显示刷新一次(更新)。

上述思想的实现均集成在定时器0的中断子程序中。

该设计显示模块流程图如图

将16进制时分数据转化为BCD显示代码

关显示以免显示抖动

通过串口将时十位段码送入对应的LS164

将时个位段码送入对应的LS164

将分十位和个位段码送入各自对应LS164

打开显示

运行结果

 

主要参考资料:

[1]林志琦.基于Proteus的单片机可视化软硬件仿真[M].北京:

北京航空航天大学出版社,2006.9

[2]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:

北京航空航天大学出版社,2006.5

[3]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:

电子工业出版社,2007.4

[4]周润景,张丽娜.PROTEUS入门实用教程[M].北京:

机械工业出版社,2007.9

[5]戴俊峰.嵌入式系统大屏幕LED点阵显示器[J].现代电子技术,2004,27(19):

68-89,72.

[6]冯寿鹏.基于嵌入式系统的LED信息显示技术研究[J].现代电子技术,2005

(1):

15-47.

[7]楼然苗,李光飞.51系列单片机设计实例[M].北京:

北京航空航天大学出版社,2003.3

 

附录:

;*****************************

;*万年历程序*

;*****************************

;67H(高两位年)66H(低两位年)65H(月)64H(星期)

;63H(日)62H(小时)61H(分)60H(秒)57H(农历月)56H(农历日)

;显示缓冲单元CH~7BH(4CH~4BH)年低位,AH~79H(4AH~49H)月,

;78H(48H)星期,H~76H(47H~46H)日,H~74H(45H~44H)时,

;73H72H(43H~42H)分,H~70H(41H~40H)秒,EH~5DH(55H~54H)农历年

;5CH~5BH(53H~52H)农历月,AH~59H(51H~50H)农历日

;闰年标志为F0,定时器T1为调整时候闪烁用

;LCALLGETWEEK

;MOV78H,WEEk

SCLKBITP3.2

IOBITP3.3

RSTBITP3.4

TIME_YEARDATA66H

TIME_MONTHDATA65H

WEEKDATA64H

TIME_DAYDATA63H

HOURDATA62H

MINTUEDATA61H

SECONDDATA60H

DS1302_ADDRDATA32H

DS1302_DATADATA31H

start_yearEQU01;定义查询表起始年份,01--199表示1901-2099年

week_byte1DATA3AH

WEEK_BYTE2DATA3BH

WEEK_BYTE3DATA3CH

WEEK_BYTE4DATA3DH

WEEK_BYTE5DATA3EH

CONvert_yearDATA6dh

CONvert_monthDATA6eh;BIT7为1表示闰月

CONvert_dateDATA6fh

temp_Byte1DATA68h

temp_Byte2DATA69h

temp_Byte3DATA6Ah

temp_Byte4DATA6Bh

temp_Byte5DATA6Ch

;RSEQUP3.0

;RWEQUP3.1

;EEQUP3.5

ORG0000H

AJMPSTART

ORG0003H

RETI

ORG000BH

LJMPINTT2

ORG001BH

LJMPINTT1

ORG30H

;************************************

;*主程序*

;************************************

start:

movR1,#254h;清RAM128单元

movr0,#2

mova,#0

clear:

mov@r0,a

incr0

djnzr1,clear

movr0,A

MOVR1,A

MOVR7,#10;计数器初始计数值

SETBEA;打开总中断

;MOVT2CON,#0

;MOVT2MOD,#0

;MOVTH2,#0

;MOVTL2,#0

;SETBTR2

MOVSCON,#00H;串行输出,方式

MOVTMOD,#11H;计数器,方式;计数器,方式

MOVTL1,#00H;计数器初值65.5MS中断一次

MOVTH1,#00H

MOVTH0,#3CH;计数器50MS中断一次

MOVTL0,#0B0H

CLRP0.6

 

MOVDS1302_ADDR,#8EH

MOVDS1302_DATA,#00H;允许协

LCALLWRITE

MOVDS1302_ADDR,#90H

MOVDS1302_DATA,#0A6H;1302充电,充电电流.1mA

lcallwrite

SETBET0;打开秒闪定时器

SETBTR0

main1:

MOVDS1302_ADDR,#8DH;READOUTYEAR

LCALLREAD

MOVTIME_YEAR,DS1302_DATA

MOVDS1302_ADDR,#8BH;READOUTWEEK

LCALLREAD

MOVWEEK,DS1302_DATA

MOVDS1302_ADDR,#89H;READOUTMONTH

LCALLREAD

MOVTIME_MONTH,DS1302_DATA

MOVDS1302_ADDR,#87H;READOUTDAY

LCALLREAD

MOVTIME_DAY,DS1302_DATA

MOVDS1302_ADDR,#85H;READOUTHOUR

LCALLREAD

MOVHOUR,DS1302_DATA

MOVDS1302_ADDR,#83H;READOUTMINTUE

LCALLREAD

MOVMINTUE,DS1302_DATA

MOVDS1302_ADDR,#81H;READOUTSECOND

LCALLREAD

MOVSECOND,DS1302_DATA

MOVR0,TIME_YEAR;年分离,送显示缓存

LCALLDIVIDE

MOV7BH,R1

MOV4BH,R1

MOV7CH,R2

MOV4CH,R2

MOV78H,WEEK

MOV48H,WEEK

MOVR0,TIME_MONTH;月分离,送显示缓存

LCALLDIVIDE

MOV79H,R1

MOV49H,R1

MOV7AH,R2

MOV4AH,R2

MOVR0,TIME_DAY;日分离,送显示缓存

LCALLDIVIDE

MOV76H,R1

MOV46H,R1

MOV77H,R2

MOV47H,R2

MOVR0,HOUR;小时分离,送显示缓存

LCALLDIVIDE

MOV74H,R1

MOV44H,R1

MOV75H,R2

MOV45H,R2

MOVR0,MINTUE;分分离,送显示缓存

LCALLDIVIDE

MOV72H,R1

MOV42H,R1

MOV73H,R2

MOV43H,R2

MOVR0,SECOND;秒分离,送显示缓存

LCALLDIVIDE

MOV70H,R1

MOV40H,R1

MOV71H,R2

MOV41H,R2

LCALLGENGXIN;更新农历程序

MOVR0,CONVERT_MONTH;农历月分离,送显示缓存

LCALLDIVIDE

MOV5BH,R1

MOV52H,R1

MOV5CH,R2

MOV53H,R2

MOVR0,CONVERT_DATE

LCALLDIVIDE

MOV59H,R1

MOV50H,R1

MOV5AH,R2

MOV51H,R2

LCALLGETWEEK

MOV78H,WEEK

LCALLDISPLAY

GOON:

JNBP1.1,SETGG;调整日历

;JNBP1.4,QIDONG;启动秒钟指示灯

;LCALLQIDONG

AAA:

JNBF0,SSS

CLRP1.0;闰月,则p1.0清,指示灯亮

LJMPMAIN1

SSS:

SETBP1.0;非闰月,则p1.0置位,指示灯灭

LJMPMAIN1

SETGG:

LJMPSETG

QIDONG:

LCALLDISPLAY;秒钟指示灯开启/关闭

;JNBP1.4,QIDONG

;LCALLQIDONG

CPL30H;30

JB30H,ON

CLRTR0

CLRET0

AJMPQDOUT

ON:

SETBTR0

SETBET0

QDOUT:

AJMPAAA

;*****************************

;*秒灯闪烁程序*

;*****************************

INTT2:

PUSHACC;累加器入栈保护

PUSHPSW;状态字入栈保护

CLRET0;关T0中断允许

CLRTR0;关闭定时器T0

MOVA,#0B7H;中断响应时间同步修正

ADDA,TL0;低位初值修正

MOVTL0,A;重装初值(低位修正值)

MOVA,#3CH;高位初值修正

ADDCA,TH0;

MOVTH0,A;重装初值(高位修正值)

SETBTR0;开启定时器T0

CLRPSW.4

DJNZR7,INTT2OUT

MOVR7,#10

CPL20H

JB20H,S1

SETBP0.7;秒指示灯闪烁

AJMPINTT2OUT

S1:

CLRP0.7

INTT2OUT:

POPPSW;出栈

POPACC

SETBET0

RETI

;*********************************

;*写程序*

;*********************************

WRITE:

CLRSCLK

NOP

SETBRST

NOP

MOVA,DS1302_ADDR

MOVR4,#8

WRITE1:

RRCA;送地址给

NOP

NOP

CLRSCLK

NOP

NOP

NOP

MOVIO,C

SETBSCLK;送入地址在时钟上升沿有效

NOP

NOP

NOP

NOP

DJNZR4,WRITE1

CLRSCLK

NOP

MOVA,DS1302_DATA

MOVR4,#8

WRITE2:

RRCA

NOP;送数据给,时钟上升沿,数据输入

CLRSCLK

NOP

NOP

MOVIO,C

NOP

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR4,WRITE2

CLRRST

RET

;*******************************

;*读程序*

;*******************************

READ:

CLRSCLK

NOP

NOP

SETBRST

NOP

MOVA,DS1302_ADDR

MOVR4,#8

READ1:

RRCA

NOP

MOVIO,C

NOP

NOP

NOP

SETBSCLK;送入地址在时钟上升沿有效

NOP

NOP

NOP

;CLRSCLK

CLRSCLK

NOP

NOP

DJNZR4,READ1

MOVR4,#8

READ2:

CLRSCLK

NOP

NOP

NOP

MOVC,IO

NOP

NOP

NOP

NOP

NOP;从ds1302中读取数据,时钟下降沿有效

RRCA

NOP

NOP

NOP

NOP

SETBSCLK

NOP

DJNZR4,READ2

MOVDS1302_DATA,A

CLRRST

RET

;*******************************

;*公历设置程序*

;*******************************

SETG:

CLRTR0

CLRET0

SETBTR1

SETBET1

CLR08H

CLR09H

CLR0AH

CLR0BH

CLR0CH

CLR0DH

CLR0EH

CLR0FH

MOVDS1302_ADDR,#8EH

MOVDS1302_DATA,#00H;允许写

LCALLWRITE

MOVDS1302_ADDR,#80H

MOVDS1302_DATA,#80H;1302停止振荡

LCALLWRITE

GWAIT:

LCALLDISPLAY

JNBP1.1,GWAIT

SETG1:

LCALLDISPLAY

JNBP1.1,SETGMON

JNBP1.3,GADDYEAR

JNBP1.4,GDECYEAR

JNBF0,SSSYEAR

CLRP1.0;闰月,则p1.1清,指示灯亮

LJMPSETG1

SSSYEAR:

SETBP1.0

AJMPSETG1

SETGMON:

AJMPSETG2

GADDYEAR:

MOVR7,66H;年加

LCALLADD1

MOV66H,A

GADDYEAR1:

LCALLGETWEEK;年加同时换算出星期

LCALLYMD;转换农历月日

MOVDS1302_ADDR,#8CH;年值送

MOVDS1302_DATA,66H

LCALLWRITE

MOVDS1302_ADDR,#8AH;星期值送

MOVDS1302_DATA,64H

LCALLWRITE

MOVR0,66H

LCALLDIVIDE;年分离送显示缓冲

MOV4BH,R1

MOV7BH,R1

MOV4CH,R2

MOV7CH,R2

MOVR0,64H

LCALLDIVIDE;星期分离送显示缓冲

MOV48H,week

MOV78H,week

WAIT1:

LCALLDISPLAY

JNBP1.3,WAIT1

AJMPSETG1

GDECYEAR:

MOVR7,66H;年减

LCALLDEC1

MOV66H,A

LCALLGETWEEK;年减同时换算出星期

LCALLYMD;转换农历月日

MOVDS1302_ADDR,#8CH;年值送

MOVDS1302_DATA,66H

LCALLWRITE

MOVDS1302_ADDR,#8AH;星期值送

MOVDS1302_DATA,64H

LCALLWRITE

MOVR0,66H

LCALLDIVIDE;年分离送显示缓冲

MOV4BH,R1

MOV7BH,R1

MOV4CH,R2

MOV7CH,R2

MOVR0,64H

LCALLDIVIDE;星期分离送显示缓冲

MOV48H,week

MOV78H,week

WAIT2:

LCALLDISPLAY

JNBP1.4,WAIT2

AJMPSETG1

SETG2:

SETB0AH;调月时闪标志

GWAIT3:

LCALLDISPLAY

JNBP1.1,GWAIT3

SETG3:

LCALLDISPLAY

JNBP1.1,SETGDAY

JNBP1.3,GADDMONTH

JNBP1.4,GDECMONTH

JNBP1.2,JUMPYEAR

JNBF0,SSSMONTH

CLRP1.0;闰月,则p1.1清,指示灯亮

LJMPSETG3

SSSMONTH:

SETBP1.0

AJMPSETG3

JUMPYEAR:

LCALLDISPLAY

CLR0AH

JNBP1.2,JUMPYEAR

AJMPSETG1

SETGDAY:

AJMPSETG4

GADDMONTH:

MOVR7,65H;月加

LCALLADD1

MOV65H,A

CJNEA,#13H,GADDMONTH1

MOV65H,#01H

GADDMONTH1:

LCALLGETWEEK;月加同时换算出星期

LCALLYMD;转换农历月日

MOVDS1302_ADDR,#88H;月值送

MOVDS1302_DATA,65H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1