计算机专业实训报告-lcd显示万年历_第1页
计算机专业实训报告-lcd显示万年历_第2页
计算机专业实训报告-lcd显示万年历_第3页
计算机专业实训报告-lcd显示万年历_第4页
计算机专业实训报告-lcd显示万年历_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南源点教育项目实训报告

LCD显示万年历项目

专业:计算机专业

班级:电子研发二班

姓名:李加诚,

学号:____________、

指导教师:王筝

2012年1月

摘要

随着电子技术的迅速发展,尤其是单片机技术的应用产品已经

走进了千家万户,电子万年历的出现给人们的生活带来了诸多方

便,在家庭居室、大厅、车站和广场等都可以见到各式各样的万年

历。时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研

究,不断创新纪录,电子万年历是一种应用非常广泛的日常计时工

具,数字显示的日历时钟已经越来越流行,特别是适合在家庭居室、

办公室、大厅、会议室、车站和广场等使用,也出现了各式各样的万

年历其中壁挂式LED数码管显示的日历钟已逐渐受到人们的欢迎

LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视

等。并且在万年历上还可以增加很多其他功能比如温度显示、音乐

报时等。而对于这样有读取方便、显示直观、功能多样、电路简

洁、成本低廉等诸多优点,也符合电子仪器仪表的发展趋势,具有

广阔的市场前景。

本毕业论文利用单片机AT89S52,LCD液晶显示屏等设计一个

万年历系统,并采用单片机汇编语言编写系统程序。万年历系统具

有年、月、日和时、分、秒的显示功能,闰年、闰月和时间调整功

能。关键词:万年历AT89S52单片机

电子研发专业工程项目训练任务书

姓名:学号:班级:

项目名称LCD实现万年历指导教师王筝

万年历基本功能:1、时间日期的的显示2、对当,月大小月的3为断

3、对平闰年的判断4、能用按键对时间日期进行调

整5、有闹钟功能

LCD:

周次完成内容提交的成果

1最终确定实训项目为L8显示万

确定项目名

年历。

查阅相关资料给出综合开发工

1项目背景,国内外概况

具,给出项目架构

确定具体模块,最后整合,完成

1分析功能模块,构建流程图表

流程图表的制作。

对项目进行准确定位和确定实现

2总体设计

功能

2硬件设计完成原理图和硬件的焊接工作

3软件设计完成软件的编写

3测试将软件写入,测试其各项功能

方案选型

方案一:

显示模块用LED数码管显示

方案二:

显ZF模块用LCD1602液晶屏显示i液晶显示屏,液晶显示屏的显ZF功能强大,

可显示大量文字,图形,显示多样,清晰

方案选择和方案验证

液晶显ZF屏,液晶显ZF屏的显ZF功能强大,可显ZF大量文字,图形,显ZF多

样,清晰

所以选择方案二。

产品功能描述

1、显示时间功能

通过LCD1602液晶屏显示

第一行对时分秒和星期的显示

第二行实现对年月日的显示

2、时间调整功能

利用独立键盘对时分秒,年月日进行加减的调整

按一次,响应一次

3、闹钟功能

判断当前时间是否和设定的闹钟时间一致,一致则

闹钟响

总体设计

流程图

主程序设计流程图、

按键扫描模块流程图

按键扫描模

时间调整模块流程图

闹钟模块流程图

返回

产品介绍

硬件设计部分:

1、单片机最小系统

C1

U1

>XTAL1P0.0/AD0

P0.1/AD1

P0.2/AD2

XTAI_2P0.3/AD3

XP0.4/AD4

P0.5/AD5

P0.6/AD6

P0.7/AD7

C3rfRST

T—

P2.0/A8

P2.1/A9

10uF

tR1P2.2/A10

SW110kPSENP2.3/A11

ALEP2.4/A12

EAP2.5/A13

SW-SPSTP26Al4

P2.7/A15

P1.0P3.0/RXD

P1.1P3.1/TXD

P12P3.2/INTO

P1.3P3.3/INT1

PI.4P3.4/TO

P1.5P3.5/T1

P1.6P3.&WR

P1.7P3.7W

80C51

2、LCD1602显示模块

edmarket.com.cn

3、八个独立按键控制模块

4、无源蜂鸣器闹钟模块

软件设计部分:

1、按键扫描模块

①功能键扫描模块,实现对万年历功能的调整

②切换键扫描模块,调整时间时,确定调整位置

③调整键扫描模块(加一,减一按键)实现对显示时间的调整

2、时钟显示模块

①对L8进行初始化

②显示第一行

③显示第二行

3、闹钟模块

①判断当前时间是否和闹钟设定的时间一致

②一致则调用闹铃响应模块,不一致则正常显示

程序源代码:

;程序名称:万年历

;编写人:李加诚

;编写时间;2012.03.10

;程序实现功能:实现万年历时间日期的显示,时间的调整等

.*****************************************

;LCD引脚定义

ENBITP2.6;时钟信号

RSBITP2.4;决定要传送的是

命令还是数据

RWBITP2.5;决定要读

还是写,一般写的时候多.

SJEQUP0;显示时间,日期输入口

HourEQU30H;小时存储单元

MinEQU31H;分钟存储

单元

SecEQU32H;秒钟存储

单元

WeekEQU33H;周期存储单元

DayEQU34H;日存储单

MoonEQU35H;月存储单元

Year_hEQU36H;年(高位)存储

单元

Year_lEQU37H;年(低位)存储

单元

DayBufEQU38H;当月日数

ChangeBufEQU39H;切换键按下次数

缓存

ChangeKeyBITP1.7彻换键

HourKeyBITP1.1;小时调整键

MinKeyBITP1.2;分钟调整键

WeekKeyBITP1.3;星期调整键

DayKeyBITP1.4;日数调整

MoonKeyBITP1.5;月份调整

YearKeyBITP1.6;年数调整

WeiBITP2.1;位选

DuanBITP2.0;段选

bDDOBIT23H.0;抖动标志位

bDD1BIT23H.1

bDD2BIT23H.2

bDD3BIT23H.3

bDD4BIT23H.4

bDD5BIT23H.5

bDD6BIT23H.6

bDD7BIT23H.7

bXYOBIT24H.0;响应标志位

bXY1BIT24H.1

bXY2BIT24H.2

bXY3BIT24H.3

bXY4BIT24H.4

bXY5BIT24H.5

bXY6BIT24H.6

bXY7BIT24H.7

T_DOBIT25H.0;切换屏标志位

bChangeDDBIT25H.1;切换调整键抖动位

bChangeXYBIT25H.2;切换调整键响应位

bffbit26h.3

bHickerBIT25H.3;闪烁标志位

.******************************************

ORG0000H

AJMPSTART

ORG000BH

AJMPT0_Ser

ORG001BH

AJMPT1_Ser

ORG0030H

.***********

J**第初始化****************************

Start:MOVTMOD,#01H;定时器。初

始化

MOVTH0,#3CH

MOVTL0,#0B0H

SETBEA

SETBETO

SETBTRO

MOVTH1,#3CH;定时器1

初始化

MOVTL1,#0B0H

SETBET1

SETBTR1

SETBPXO

MOVHour,#0;小

时初始化

MOVMin,#0汾

钟初始化

MOVSec,#0;秒

钟初始化

MOVWeek,#01;星期初始

MOVDay,#1旧

数初始化

MOVMoon,#1月

份初始化

MOVYear_h,#20;年份初始

化(高位)

MOVYearJ,#11;年份初始

化(低位)

MOV60H,#20;用

于定时器0记满一秒\

MOV61H,#20;用

于定时器1记满一秒

CALLchushihua

…*……主程序**…………*…

Main:

CALLChange;调整键切

CALLDispose;调用扫描

键盘程序

GALLIcddis;调用显7F程序

;CALLNclock;调用闹钟程序

AJMPmain;返回

******调整键切换

****************************************

;输入:ChangeKey(切换调整按键)

;输出:ChangeBuf(切换键按下次数)

;实现功能:得到切换键按下次数,确定该响应哪个调整键

Change:JNBbChangeDD,DY8;判

断切换调整键抖动标志

JBChangeKey,DY8;判

断切换调整调整键是否按下

JBbChangeXY,D8;判

断切换调整调整键是否响应过

SETBbChangeXY;没有响应

过,日响应位置一

INCChangeBuf;按

下次数加一

MOVA,ChangeBufJ

CJNEA,#2,D8;判

断是否按下6次

MOVChangeBuf,#0;按

下八次,将次数清零i

D8:RET

DY8:JNBChangeKey,DD8;判

断切换调整调整键是否按下

CLRbChangeDD;没

有按下,清0抖动标志位

CLRbChangeXY;没

有按下,清零响应标志位

RET

DD8:SETBbChangeDD;按下,抖

动标志位置一

RET

***键盘扫描子程序

;输入:CchangeBuf(调整切换键按下次数)

;输出:按下次数所对应的调整后的值

;实现功能:由ChangeBuf确定调整键,并对该键进行调整

Dispose:

CALLTMin;查分钟键

CALLTHour;查小时键

CALLTWeek;杳星期键

CALLTDay;查日键

CALLTMoon;查月键

CALLTYear;查年键

RET

;*********分钟调整子程序

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

TMin:MOVA,ChangeBuf

CJNEA,#1,D1

JNBbDD1,DY1;判断分钟

抖动标志

JBMinKey,DY1;判断分钟

调整键是否按下

JBbXY1,D1;判

断分钟调整键是否响应过

SETBbXY1;没有响应过,响

应为置一

INCMin汾

钟加一

MOVA,Min

CJNEA,#60,D1;判断是否加到

60分钟

MOVMin,#0;加

到60分钟,分钟清零

D1:RET

DY1:JNBMinKey,DD1;判断分钟

调整键是否按下

CLRbDD1;没有按

下,清。抖动标志位

CLRbXY1;没有按

下,清零响应标志位

RET

DD1:SETBbDD1;分钟调整键按

下,抖动标志位置一

RET;返

;**********小时调整子程序

THour:MOVA,ChangeBuf

CJNEA,#1,D0

JNBbDD0,DY0;判断小时

抖动标志

JBHourKey,DYO;判断小时

调整键是否按下

JBbXYO.DO;判

断小时调整键是否响应过

SETBbXYO;没有响应过,响

应位置一

INCHour;小时加一

MOVA,HourJ

CJNEA,#24,D0;判断是否加到

24小时

MOVHour,#0;加

到24小时,清零小时单元

DO:RET

DYO:JNBHourKey,DDO;判断小时

调整按键是否按下

CLRbDDO;没有按

下,清零抖动标志位

CLRbXYO;没有按

下,清零响应标志位

RET;返

DDO:SETBbDDO;小时调整键按

下,抖动标志位置一

RET

*星期调整子程序

TWeek:MOVA,ChangeBuf

CJNEA,#1,D2

JNBbDD2,DY2;判断星期

抖动键

JBWeekKey,DY2;判

断星期调整键是否按下

JBbXY2,D2;判

断星期调整键是否响应过

SETBbXY2;没有响应过,置

一响应标志位

INCWeek;星期加一

MOVA,Week

CJNEA,#8,D2;判断是否

达到最大星期值

MOVWeek,#1;达

到最大星期值,星期1

D2:RET

DY2:JNBWeekKey,DD2;判

断星期调整键是否按下

CLRbDD2;没有按

下,清0抖动标志位

CLRbXY2;没有按

下,清零响应标志位

RET

DD2:SETBbDD2;按下,抖动标志

位置一

RET;返

;*********曰调整子程序

TDay:MOVA,ChangeBuf

CJNEA,#1,D3

JNBbDD3,DY3;判断日数

抖动标志

JBDayKey,DY3;判断日调

整键是否按下

JBbXY3,D3;判

断日调整键是否响应过

SETBbXY3;没有响应过,日

响应位置一

INCDay;S

数加一

MOVA,DayJ

CJNEA,DayBuf,D3;判断是否到了当

月最大日数

MOVDay,#1倒

了当月最大日数,,将日数设为1

D3:RET

DY3:JNBDayKey,DD3;判断日调

整键是否按下

CLRbDD3;没有按

下,清。抖动标志位

CLRbXY3;没有按

下,清零响应标志位

RET

DD3:SETBbDD3;按下,抖动标志

位置一

RET;返

;*********月调整子程序

***********************************************

TMoon:MOVA,ChangeBuf

CJNEA,#1,D4

JNBbDD4,DY4;判断月份

抖动标志位

JBMoonKey,DY4;判

断月份调整键是否按下

JBbXY4,D4;判

断月份调整键是否响应过

SETBbXY4;没有响应过,月

份响应位置一

INCMoon;月份加一

MOVA,Moon

CJNEA,#13,D4;判断是否超过最

大月份

MOVMoon,#1;超

过最大月份,将月份设为1月

D4:RET

DY4:JNBMoonKey,DD4;判

断月份调整键是否按下

CLRbDD4;没有按

下,清。抖动标志位

CLRbXY4;没有按

下,清零响应标志位

RET

DD4:SETBbDD4;按下,抖动标志

位置一

RET

;*********年调整子程序

:**********************************

TYear:MOVA,ChangeBuf

CJNEA,#1,D5

JNBbDD5,DY5;判断年抖

动标志位

JBYearKey,DY5;判断年调

整键是否按下

JBbXY5,D5;判

断年调整键是否响应

SETBbXY5;没有响应,年响

应位置一

INCYear_l年加一

MOVA,YearJ

CJNEA,#100,D5;判断是否加到一

百年

MOVYear_l,#0;加到一百

年,将年数清零

D5:RET

DY5:JNBYearKey,DD5;判断年调

整键是否按下

CLRbDD5;没有按

下,清。抖动标志位

CLRbXY5;没有按

下,清零响应标志位

RET

DD5:SETBbDD5;按下,抖动标志

位置一

RET

;***********定时器TO中断程序

:***************************************************

输入:无

;输出:无

;实现功能:时、分、秒、年、月、日、星期的自动累加

TO_Ser:

;PUSHACC

;PUSHPSW

MOVTH0,#3CH;定时器初值初始化

MOVTL0,#0B0H

DJNZ60H,LOOP;满足一秒时间往下执行,否则

跳出中断

MOV60H,#20

INCSec;达到一

秒,秒加一

MOVA,Sec

CJNEA,#60,LOOP;判断是否到了60秒

MOVSec,#0;满了60

秒,秒清零

INCMin;达到一分钟,

分加一

MOVA,Min

CJNEA,#60,LOOP;判断是否到了60分

MOVMin,#0;满了60

分,分清零

INCHour;达到一小时,小

时加一

MOVA,Hour

CJNEA,#24,LOOP;判断是否到了24小时

MOVHour,#0;满了24

小时,小时清零

INCWeek;达到一天,周期

加一

INCDay

MOVA,Week

CJNEA,#08,LOOP1;判断是否到了星

期天

MOVWeek,#01;满了七天,星期

清零

LOOP1:MOVA,Day

CJNEA,DayBuf,LOOP;判断是否到达当月最大

日数

MOVDay,#0;达到最大

日数,日数清零

INCMoon;日数已满,月份

加一

MOVA,Moon

CJNEA,#13,LOOP;判断是否超过12月分

MOVMoon,#1;超过则将

月份置为一月份

INCYear_l;年份加一

MOVA,YearJ

CJNEA,#100,LOOP;判断年份(低位)是

否到了一百年

MOVYear_l,#0;满足一百年,将

年份(低位)清零

INCYear_h;年份(高

位)加一

MOVA,Year_h

CJNEA,#100,LOOP;判断年份(高

位)是否到了一百年

MOVYear_h,#0;满足一百年,将

年份(高位)清零

;POPPSW

;POPACC

LOOP:RETI

;***********定时器1,闪烁标志位定时取反

T1Ser:

;PUSHACC

;PUSHPSW

MOVTH1,#3CH

MOVTL1,#0B0H

DJNZ61H.OT

MOV61H,#20

CPLbHicker

epibff

;POPPSW

;POPACC

OT:RETI

;**************平年闰年判断子程序

***********************************

;输入:YearJ和Year_h,

;输出:DayBuf(二月份的天数)

;确定当年二月份的天数

YearJud:MOVA,YearJ;将年份(低位)送到

A,判断是否为世纪年

CJNEA,#0,L1;不是世纪年,

则跳到L1

MOVA,Year_h;是世纪年,判

断世纪(年份高位)能否被4整除

MOVB,#4;

DIVABJ

MOVA,BJ

CJNEA,#O,Same_Year;不能整除,跳到

Same_Year,该年为平年

AJMPLeap_Year;能整除,跳到

Leap_Year,该年为闰年

L1:MOVB,#4;不是世

纪年,则判断年份是否能被4整除

DIVAB

MOVA,B

CJNEA,#O,Same_Year;不能整除,跳到

Same_Year,该年为平年

AJMPLeap_Year甫罐除,跳到

Leap_Year,该年为闰年

Same_Year:MOVDayBuf,#29;平年则二月只

有28天

AJMP1_2

Leap_Year:MOVDayBuf,#30;闰年则二月有

29天

AJMPL2

l-2:RET

;********************判断月份大小

;输入:Moon月份

输出:DayBuf当月日数

;实现功能:判断当月大小,确定当月的天数

MoonJud:MOVA,Moon

CJNEA,#2,W;判断是否为二

月,不是则判断其他月份

CALLYearJud;二月份,

调用平年闰年判断子程序

AJMPV5;返回

W:CJNEA,#4,V1;不是4月

则跳到V1

AJMPVO

V1:CJNEA,#6,V2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论