单片机课程设计电子时钟.docx
《单片机课程设计电子时钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子时钟.docx(25页珍藏版)》请在冰豆网上搜索。
![单片机课程设计电子时钟.docx](https://file1.bdocx.com/fileroot1/2022-12/13/6eec5d5c-bbe4-44a3-a005-2e9c94a8d77d/6eec5d5c-bbe4-44a3-a005-2e9c94a8d77d1.gif)
单片机课程设计电子时钟
等级:
湖南工程学院
课程设计
课程名称单片机原理与应用
课题名称电子时钟设计
专业电气工程及其自动化
班级1102
学号201101010204
姓名吕磊
指导教师_________肖峰_____________
2014年6月9日
湖南工程学院
课程设计任务书
课程名称单片机原理与应用
课题电子时钟设计
专业班级电气1102
学生姓名吕磊
学号201101010204
指导老师肖峰
审批
任务书下达日期2014年6月9日
任务完成日期2014年6月20日
设计内容与设计要求
设计内容:
本课题以单片机为核心,利用其定时器和6位数码管,设计一个电子时钟。
要求有以下功能:
1、开机时,显示00:
00:
00的时间开始计时;
2、要求有秒,分,时的调节。
3、具有复位功能。
设计要求:
1)确定系统设计方案;
2)进行系统的硬件设计;
3)完成必要的参数计算与元器件选择;
4)完成应用程序设计;
5)进行单元电路及应用程序的调试;
6)写出使用说明书。
主要设计条件
1、MCS-51单片机实验操作台1台;
2、PC机及单片机调试软件;
3、单片机应用系统板1套;
4、制作工具1套;
5、系统设计所需的元器件。
说明书格式
1.课程设计任务书
2.目录
3.说明书内容
1)课题的设计要求、目的、意义
2)系统总体方案选择与说明
3)系统结构框图与工作原理
4)各单元硬件设计说明及计算方法
5)软件设计与说明(包括流程图)
6)调试结果与必要的调试说明
7)使用说明
8)程序清单
9)总结
10)参考文献
附录
附录A系统原理图
附录B程序清单
评分表
进度安排
设计时间为两周
第一周
星期一、上午:
布置课题任务,讲课及课题介绍
下午:
借阅有关资料,总体方案讨论
星期二、确定总体设计方案
星期三、硬件模块方案设计
星期四、软件模块方案设计
星期五、各硬件模块设计
第二周
星期一、各硬件模块设计
星期二、各软件模块设计
星期三、各软件模块设计
星期四、写说明书
星期五、上午:
写说明书,整理资料
下午:
交设计资料,答辩
第1章课程设计要求的目的与意义
通过单片机课程设计,加深对单片机的更深层次的理解,熟悉单片机的内部硬件资源,掌握单片机的编程及技巧,要学会对单片机的各部硬件资源的控制,分配,特别是对单片机中断,定时器的编程方法。
且需要学会利用所学单片机只是独立设置系统的能力。
作为一个电气工程及其自动化专业大三的学生,做这次课程设计的意义是很大的。
这能让我们把我们在课堂上学的知识能够运用到实践当中。
在这次课程设计我们能够学会对一些软件的使用,如proteus和Keiluvision等。
这次我们将所学知识汇聚到了一起,并适当的加入了一些其它的知识,让我们自己动手动脑完成一次课程设计是很有意义的。
第2章总体设计方案选择与说明
2.1设计方案
本电子时钟采用AT89C51单片机为核心器件,将可编程芯片8255A与6个LED数码管连接,用于显示时钟与跑秒。
PA口输出显示段码,PB口输出位码,单片机的P1.0-P1.4、P3.2、P3.3接K1-K6,用于实现表的清零/启动/复位/调整/暂停功能,其可由软件来完成。
由于数码管要显示时钟,还要显示跑秒,利用T0定时器定时1s,T1定时器定时100ms,即0.1s,用R6和R7作为扫描的短延时数据地址。
因此,分别用30H、31H、32H、33H、34H、35H计时钟,即时钟计数器;用40H、41H、42H、43H、44H、45H计跑表,即秒表计数器。
当要显示时钟的时候,就把时钟地址中的数据通过8255A的PA口输出给显示器显示;当要显示跑秒的时候,就把跑秒地址中的数据通过8255A的PA口输出给显示器显示。
第3章系统结构框图和工作原理
3.1系统结构框图
单片机
6个按键输入电路
LED显示器段码驱动电路
6位LED显示电路
LED显示器位码驱动电路
时钟电路
复位电路
图3.1系统结构框图
3.2系统工作原理
利用单片机定时器完成计时功能,定时器1计时中断程序每隔10ms中断一次并当作一个计数,设定定时1秒的中断计数初值阀值为100,每中断一次中断计数加1,当加到100时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。
由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
第4章各单元的硬件设计及说明
4.1键盘接口电路
单片机的P1.0-P1.4、P3.2、P3.3分别接6个按键,用于实现电子时钟的清零/启动/复位/暂停/分钟调节/秒钟调节,独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低,I/O口内部有上拉电阻时,外部可不接上拉电阻。
图4.1键盘借口电路
4.2显示电路
本次需用到六个LED数码管用来分别显示时、分、秒。
将可编程芯片8255A的PB0、PB1、PB2、PB3、PB4、PB5接数码管的1、2、3、4、5、6,然后数码管的A-G分别接74LS245的B0-B7。
8255A的PA口输出显示段码,由一个74LS245驱动输出给LED数码管,PB口输出段码直接输出给LED数码管显示。
时间显示功能通过LED数码管动态扫描来实现,在显示器上进行动态扫描。
图4.2显示电路
4.374LS373作用
当三态允许控制端OE为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,Q随数据D而变。
当LE为低电平时,D被锁存在已建立的数据电平。
图4.374LS373引脚图
第5章软件设计与说明
5.1软件设计
本设计的软件程序包括主程序、中断子程序、时钟显示子程序等。
在整个系统中,在单片机的30H、31H和32H中存储当前时间的小时、分钟和秒。
用LCD显示当前的时间,必须用到分字和合字,因此在33H、34H、35H、36H、37H和38H中存储当前时间的时十位、时个位、分十位、分个位、秒十位和秒个位,方便显示。
本设计有由四个轻触按键组成的小键盘,这些按键可以任意改变当前的状态。
按SECOND键触发秒钟位加1,按MINUTE键触发分钟位加1,按HOUR键触发时钟位加1。
按电平复位电路开关则触发LCD显示复位。
控制子程序数据表为:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
时钟的最小计时单位是秒,但使用定时器的方式1,最大的定时时间也只能达到131ms。
我们可把定时器的定时时间定为50ms。
这样,计数溢出20次即可得到时钟的最小计时单位:
秒。
而计数20次可以用软件实现。
秒计时是采用中断方式进行溢出次数的累积,计满20次,即得到秒计时。
从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。
要求每满1秒,则“秒”单元中的内容加1;“秒”单元满60,则“分”单元中的内容加1;“分”单元满60,则“时”单元中的内容加1;“时”单元满24,则将时、分、秒的内容全部清零。
实时时钟程序设计步骤:
(1)选择工作方式,计算初值;
(2)采用中断方式进行溢出次数累计;
(3)从秒——分——时的计时是通过累加和数值比较实现的;
(4)时钟显示缓冲区:
时钟时间在方位数码管上进行显示,为此在内部;RAM中要设置显示缓冲区,共6个地址单元。
显示缓冲区从左到右依次存放时、分、秒数值;
(5)主程序:
主要进行定时器/计数器的初始化编程,然后反复调用显示子程序的方法等待中断的到来,流程如图4-1所示;
(6)中断服务程序:
进行计时操作;
(7)加1子程序:
用于完成对时、分、秒的加操作,中断服务程序在秒、分、时加1时共三次调用加1子程序,包括:
合字、加1并进行进制调整、分字。
5.2主程序流程图
图5.2主程序流程图
第6章调试结果与调试说明
过proteus仿真,开始后数码管可以正常显示时间,按【暂停】键可以让时钟停止走动,此时按下【调整分钟】和【调整时钟】可以分别调整分钟和时钟,每按一下便增加一。
这时候再按下【复位清零】键,即把时钟显示清零了,然后按【显示秒表】键,可切换到秒表模式并开始计时,最小值为10ms。
按【暂停】键可以暂停计时,按【复位清零】键可以清零秒表,以便开始下一轮的计时。
调试过程中的截图如下:
图6调试过程截图
第7章总结
通过本次的单片机课程设计—电子时钟的设计,我学到了很多课本上无法学到的知识,也让我们对仿真软件等的使用也更熟练了。
在程序方面,我借鉴了实验课本上的程序进行了改进,让自己的程序更优秀。
而且我觉得写程序注释写得越详细越好、不要怕麻烦。
这样方便自己读懂程序,也是有利于让别人能读懂你写的程序。
在反复确认自己的程序正确无误之后,接下来要做的就是模拟仿真了。
我们在书上、网上都查阅了相关芯片的功能、管脚等信息。
也自己研究了一下proteus仿真软件的使用,仔细研究芯片的主要功能及管脚接法,这也就为我们后面比较成功地仿真出结果打好了基础。
当仿真出错时我们反复检查线路连接是否有误,仔细的观察相应管脚在运行时的电位的变化。
我相信,不管是什么电路,经过如此仔细的检查后,任何错误不会遗漏。
当然,这也是我们最终走向成功的原因。
而且在肖老师的辛勤的指导下,最后我们顺利地完成了这次的课程设计。
看见到课本所学知识得以应用,一股成就感油然而生。
这次课程设计加强了我的实际操作能力,提高了我解决实际问题的能力,也锻炼了和同学之间的合作能力,并对本专业的课程充满了浓厚的兴趣,相信有了兴趣,我在以后对本专业的学习会更加得心应手。
第8章参考文献
1、《单片机原理与应用》王迎旭等编机械工业出版社
2、《51系列单片机设计实例》楼然苗等编北京航空航天大学出版社
3、《计算机硬件技术基础实验教程》黄勤等编重庆大学出版社
4、《微型计算机接口技术及应用》刘乐善主编华中科技大学出版社
5、《单片微型计算机原理及接口技术》陈光东等编华中科技大学出版社
附录
附录A系统原理图
系统原理图
附录B程序清单
ORG0000H
LJMPSTART
ORG0003H;INT0中断入口
LJMPS5
ORG000BH;T0中断入口
LJMPY0
ORG0013H;INT1中断入口
LJMPS6
ORG001BH;T1中断入口
LJMPY1
ORG2000H
START:
MOVDPTR,#0FF7FH;8255A初始化
MOVA,#89H;PA口PB口输出方式
MOVX@DPTR,A;方式控制字送控制字入口
S1:
MOV30H,#0
MOV31H,#0
MOV32H,#0
MOV33H,#0
MOV34H,#0
MOV35H,#0
S2:
MOVR0,#14H
MOVTMOD,#11H;T0/T1工作方式
SETBEA;开放总中断
SETBTR0;启动T0
SETBET0;启动定时中断T0
SETBET1;启动定时中断T1
;*******************************时钟主程序*******************
LOOP:
CLRTR1;关闭T1计时
MOVA,#0DFH
MOVDPTR,#0FF7DH;取位控信号(8255A的PB口地址)
MOVX@DPTR,A;显示值转换显示码
MOVA,35H
MOVDPTR,#DIRTAB;七段数码管显示断码首地址
MOVCA,@A+DPTR;查表
MOVDPTR,#0FF7CH;送PA口显示(8255A的PA口地址)
MOVX@DPTR,A
ACALLD1MS;延时1MS
MOVA,#0EFH
MOVDPTR,#0FF7DH;动态扫描循环
MOVX@DPTR,A
MOVA,34H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0F7H
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,33H
MOVDPTR,#DIRTAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FBH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,32H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FDH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,31H
MOVDPTR,#DIRTAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FEH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,30H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
JNBP1.0,Z4;K1键按下进入秒表显示程序
JNBP1.3,S3
JNBP1.2,S4
SJMPLOOP
******************时钟定时中断服务程序************************
Z4:
AJMPZ1
S3:
CLRTR0
SETBIT0
SETBEX0
SETBIT1
SETBEX1
AJMPLOOP
S4:
SETBTR0
CLREX0
CLREX1
AJMPLOOP
S8:
AJMPKEY
Y0:
MOVTH0,#1EH
MOVTL0,#0CFH
DJNZR0,S8;R0初值为14,循环14次,即为1s若不为零则跳转到S8
MOVR0,#14H;到1S则重新给R0赋值14
INC35H;让秒数加1
MOVA,#10
CJNEA,35H,KEY;如果没加到10就跳转到KEY
MOVR0,#14H
MOV35H,#0
INC34H
MOVA,#6
CJNEA,34H,KEY
MOVR0,#14H
MOV35H,#0
MOV34H,#0
MOVR0,#14H
S5:
INC33H
MOVA,#10
CJNEA,33H,KEY
MOVR0,#14H
MOV35H,#0
MOV34H,#0
MOV33H,#0
INC32H
MOVA,#6
CJNEA,32H,KEY
MOVR0,#14H
MOV35H,#0
MOV34H,#0
MOV33H,#0
MOV32H,#0
S6:
INC31H;INT0中断入口
MOVA,#4
CJNEA,31H,L3
MOVA,#2
CJNEA,30H,L3
SJMPL4
L3:
MOVA,#10
CJNEA,31H,KEY
MOVR0,#14H
MOV35H,#0
MOV34H,#0
MOV33H,#0
MOV32H,#0
MOV31H,#0
INC30H
RETI
L4:
MOVR0,#14H
MOV35H,#0
MOV34H,#0
MOV33H,#0
MOV32H,#0
MOV31H,#0
MOV30H,#0
KEY:
RETI
;***********************秒表主程序*****************************
Z1:
SETBTR0
CLREX0
CLREX1
MOV40H,#0
MOV41H,#0
MOV42H,#0
MOV43H,#0
MOV44H,#0
MOV45H,#0
LOOP1:
CLRTR1
MOVA,#0DFH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,45H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0EFH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,44H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0F7H
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,43H
MOVDPTR,#DIRTAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FBH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,42H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FDH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,41H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FEH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,40H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
JNBP1.0,Z3
JNBP1.1,X0
JNBP1.2,M2
M5:
AJMPLOOP1
M2:
AJMPLOOP
Z3:
AJMPZ1
;**********************************************************
X0:
SETBTR1
MOVA,#0DFH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,45H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0EFH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,44H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0F7H
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,43H
MOVDPTR,#DIRTAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FBH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,42H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FDH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,41H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
MOVA,#0FEH
MOVDPTR,#0FF7DH
MOVX@DPTR,A
MOVA,40H
MOVDPTR,#DIRTAB
MOVCA,@A+DPTR
MOVDPTR,#0FF7CH
MOVX@DPTR,A
ACALLD1MS
JNBP1.0,M3
JNBP1.2,M2
JNBP1.3,M5
AJMPX0
Y1:
MOVTH1,#0D8H
MOVTL1,#0F0H
INC45H
MOVA,#10
CJNEA,45H,M4
MOV45H,#0
INC44H
MOVA,#10
CJNEA,44H,M4
MOV45H,#0
MOV44H,#0
INC43H
MOVA,#10
CJNEA,43H,M4
MOV45H,#0
MOV44H,#0
MOV43H,#0
INC42H
MOVA,#10
CJNEA,42H,M4
MOV45H,#0
MOV44H,#0
MOV43H,#0
MOV42H,#0
INC41H
MOVA,#10
CJNEA,41H,M4
MOV45H,#0
MOV44H,#0
MOV43H,#0
MOV42H,#0
MOV41H,#0
INC40H
MOVA,#10
CJNEA,30H,M4
MOV45H,#0
MOV44H,#0
MOV43H,#0
MOV42H,#0
MOV41H,#