单片机数字时钟课程设计报告.docx

上传人:b****5 文档编号:2858649 上传时间:2022-11-16 格式:DOCX 页数:18 大小:93.48KB
下载 相关 举报
单片机数字时钟课程设计报告.docx_第1页
第1页 / 共18页
单片机数字时钟课程设计报告.docx_第2页
第2页 / 共18页
单片机数字时钟课程设计报告.docx_第3页
第3页 / 共18页
单片机数字时钟课程设计报告.docx_第4页
第4页 / 共18页
单片机数字时钟课程设计报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机数字时钟课程设计报告.docx

《单片机数字时钟课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。

单片机数字时钟课程设计报告.docx

单片机数字时钟课程设计报告

第1章绪论

1.设计要求

(1)系统可以按“秒”进行计时.

(2)数字时钟可以显示小时(00-23)、分钟(00-59)和秒(00-59).

(3)可通过按键K1来选择设置“小时”、“分钟”和“秒”.设置时可通过“加”和“减”按键(K2、K3)来调整时间;设置过程中时钟停止计时.

(4)无键按下三秒后,自动进入时钟的计时程序.

2.设计方案

采用AT89C51芯片作为硬件核心,其内部采用FlashROM,具有4KBROM存储空间,能于3V的超低压工作,本系统的计时方案是利用单片机内部的定时/计数器进行中断定时,配合软件延时实现对时、分、秒的计时.

整个系统的控制方案是:

上电后系统自动进入时间显示,从00:

00:

00开始计时.按下P1.0键,进入调秒状态,时钟停止计时;按P1.1或P1.2键可进行加1或减1操作;继续按P1.0键可分别进行分位、时调整;无键按下3秒钟后退出调整状态,自动进入时钟的计时和显示.

整个系统的硬件原理框图如图1.1,它采用的是AT89C51单片机,只用了P1口.为了简化硬件电路,LED显示采用了动态扫描的方式实现,LED采用共阳极数码管,驱动电流由三极管9012提供.为了提高计数精度,所采用的晶振频率为12MHz.

第2章硬件设计

1单片机的选择

本课程选用AT89C51型号的单片机.AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域.

主要性能参数:

·与MCS-51产指令系统完全兼容

·4k字节可重擦写Flash闪速存储器

·1000次擦写周期

·全静态操作:

0Hz-24MHz

·三级加密程序存储器

·128×8字节内部RAM

·32个可编程I/O口线

·2个16位定时/计数器

2.显示方案

由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济.LED有共阴极和共阳极两种.如图2.2所示.

二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压.一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管.当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗.为了保护各段LED不被损坏,需外加限流电阻.

图2.2LED数码管结构原理图

众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动.本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性.所谓软件译码,即由单片机软件完成从数字到显示码的转换.从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节.各段码位与显示段的对应关系如表2.2.

表2.2各段码位的对应关系

段码位

D7

D6

D5

D4

D3

D2

D1

D0

显示段

dp

g

f

e

d

c

b

a

需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系.通常数据口的D0位与a段连接,D1位与b段连接,……D7位与dp段连接,如表1所示,表2.3为用于LED数码管显示的十六进制数和空白字符与P的显示段码.

根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管.将AT89C2051的P1.0~P1.7分别与共阳数码管的a~g及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符.例如:

当P0口输出的段码为11000000,数码管显示的字符为0.

表2.3LED显示段码

字型

共阳极段码

共阴极段码

字型

共阳极段码

共阴极段码

0

C0H

3FH

9

90H

6FH

1

F9H

06H

A

88H

77H

2

A4H

5BH

B

83H

7CH

3

BOH

4FH

C

C6H

39H

4

99H

66H

D

A1H

5EH

5

92H

6DH

E

86H

79H

6

82H

7DH

F

84H

71H

7

F8H

07H

空白

FFH

00H

8

80H

7FH

P

8CH

73H

注:

(1)本表所列各字符的显示段码均为小数点不亮的情况.

(2)“空白”字符即没有任何显示.

数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式.为节省端口及降低功耗,本系统采用动态扫描显示方式.动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制.这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码.在这一瞬时,只有这一位在显示,其他几位则暗.在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态.

第3章软件设计

1.主程序

主程序功能主要是初始化、正常现实时间和判断功能转换键.流程图如图3.1所示.

图3.1主程序流程图

2.定时器T0中断服务程序

定时器T0用于时间计时.定时溢出中断周期可设为50ms,中断进入后,时钟计时累计20次(即1s)时,对秒计数单元进行加1操作.时钟计数单元在定义的6个单元70H~75H中,70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据.最大计时值为23小时59分59秒.在计数单元中采用十进制BCD码计数,秒、分、时之间满60进位.

3.显示子程序

数码管显示的数据放在内存单元70H~75H中,其中70H~71H存放秒数据,72H~73H]存放分数据,74H~75H存放时数据,每一单元内均为十进制BCD码.由于采用软件动态扫描实现数据显示功能,显示用的十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出70H~75H中的某一地址中的数据,然后查表得对应的显示段码从P0口输出,P2口将对应的数码管位选中供电,就能显示该地址单元的数据值.

4.定时器T1中断服务程序

进行时间调整是,正在被调整的时间以闪烁的形式表现,定时器T1用于产生闪烁的时间间隔,每隔0.3s闪烁一次.

5.调时功能程序

通过按键K1来选择设置“小时”、“分钟”和“秒”.

通过“加”和“减”按键(K2、K3)来调整时间

6.延时程序

因为系统是动态显示,为了确保系统在有效显示时间范围内必须执行显示程序,所以使用延时程序.

7.结论

这次课程设计项目虽然是最简单的数字时钟设计,但用的技术和知识是源于课本又远远高于课本的,比如说AT89C51基本操作知识,汇编语言方面的知识等.

我负责的是软件设计的时间设置以及T1中断部分,运用到了按键部分以及定时器/计数器部分的知识.通过这次自己编写程序,使我摆脱了以往单纯的理论知识学习状态,并且在和实际设计的结合锻炼了我的综合运用所学的专业基础知识.不过在这次课设中我也遇到了不少问题,实际操作时才发现课堂知识和实际运用还是有差距的,不过最终还是在老师或同学的帮助下一个一个解决了.

通过这次对课程设计,我也认识到自己对单片机应用方面的知识的贫乏,对于书本上的很多理论知识还不能灵活运用,有很多我们掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识.同时还从中学到了一件很重要的东西,那就是如何从理论到实践的转化.此次的课程设计给我奠定了一个实践基础,我会在以后的学习,生活中磨练自己,使自己掌握更多的技术能力.

8.参考文献

[1]杨忠义.单片机课程设计指导.北京:

清华大学出版社,2009.201~217

[2]靳达.单片机应用系统开发实例导航.北京:

人民邮电出版社,2004.1~37

[3]南建辉.MCS-51单片机原理及应用实例.北京:

清华大学出版社,2004.92~117

[4]刘海成.单片机及应用系统设计原理与实践.北京:

北京航天航空大学出版社,2009.129~180

附录

ORG0000H

AJMPMAINT;转主程序

NOP

ORG000BH

AJMPINT01;转定时器T0中断程序

NOP

ORG001BH

AJMPINT11;转定时器T1中断程序

NOP

MAINT:

MOVR0,#7FH;00H~7FH单元清零

CLRA

WZ1:

MOV@R0,A

DJNZR0,WZ1

MOVSP,#30H;置堆栈指针

MOV5AH,#0AH;放入“熄灭符”数据

MOVTMOD,#11H;设T0,T1为16位定时器

MOVTL0,#0B0H;置50ms定时初值

MOVTH0,#3CH

MOVTL1,#0B0H

MOVTH1,#3CH

SETBEA;开中断

SETBET0;允许T0中断

SETBTR0;启动T0

MOVR4,#14H;用于产生1s定时

MAINT1:

LCALLXSZCX;调用显示子程序

JNBP1.0,SJTZ0;功能键按下,进入调时程序

SJMPMAINT

******T0中断服务程序******

INT01:

PUSHACC;保护现场

PUSHPSW

CLRET0;关T0中断

CLRTR0;关定时器T0

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

ADDA,TL0

MOVTL0,A

MOVA,#3CH

ADDCA,TH0

SETBTR0;启动定时器T0

DJNZR4,INT0U;20次中断未到退出中断

AD1:

MOVR4,#14H;R4重新赋值

MOVR0,#51H;指向秒计时单元(50H,51H)

LCALLADD1;调用加1s程序

MOVA,R3;秒数据放入A

CLRC;清进位标志

CJNEA,#60H,AD2;小于60s吗

AD2:

JCINT0U;小于60s退出中断

CLRA;大于或等于60s,清秒计数单元

MOV@R0,A

DECR0

MOV@R0,A

MOVR0,#57H;指向分计时单元(56H,57H)

ACALLADD1;调用加1min程序

MOVA,R3;分数据放入A

CLRC

CJNEA,#60H,AD3;小于60min吗

AD3:

JCINT0U;小于60min退出中断

CLRA;大于或等于60min,清分计数单元

MOV@R0,A

DECR0

MOV@R0,A

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

当前位置:首页 > 表格模板 > 调查报告

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

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