广州职业技术学院GUANGZHOU POLYTECHNIC
实训报告
主题:数字钟的设计与制作
系部:机电学院
专业:自动化
班级:自动化4
组员:
日期:2011年11月3日
一、设计目标
1.数字钟工作电压为5伏.
2.用4位的7段显示器显示小时、分、秒和月日,时间以24小时循环。
3. 用其中的一个开关可以调节显示器的时间及日期之间的切换。
4.另一个开关可以校对时间和日期。
二、设计方框图
显示时间,如果有中断,调节时间和闹钟
三、元器件介绍
1.AT89C2051:AT89C2051是一种带2K字节闪速可编程可擦除的8位只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造
技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,而AT89C2051是它的一种精简版本。
四、设计原理
设计程序分为主程序,中断程序和各种功能程序。
主程序要完成系统的初始化,接受键值并根据键号实现不同的功
能,以及判断闹铃时间是否到,如果时间到,则启动响铃。
中断服务程序包括定时计数器0和定时计数器1的中断服务程序,定时计数器0的中断程序实现50ms定时,并每中断20次就修改当前的,分,秒值。
外部中断0实现日期,时间的转化,当单片机复位之后显示的时间的时和分钟,按一下外部中断0按钮,转化显示的秒钟,在按一下显示的是日期的月份和日,在按一下的话显示的就是闹钟的当前的设定时间。
而外部中断1实现的是调整时间,日期,秒钟,如果当前显示的是小时和分钟的话,那么现在外部中断1可以调整分钟;如果是月份的话那么就是可以调整日期的显示,如果当前显示的是秒的话,那么外部中断1就可以调整秒得变化。
五、电路安装与调试过程
因为是用protues进行仿真,所以并没有实际的电路图,仿真的电路如下所示。
按开始按钮开始仿真,显示时间,调节开关可以控制时间。
但刚开始时调节时钟时经常出错,还不能熟练掌握,多调试几次才能每次都准确的调节。
电子表仿真图如下:
六、调试中注意的几个问题
七、训练总结
1.这次课程设计,我想到要做数字钟主要是因为在大一大二的时候做过类似的题目,曾经用电路板接过数字钟,也用Multisim软件做过仿真,也用EDA工具做过实验,所以很想用单片机做个试试,看与之前的数字钟相比,用单片机做的优势与劣势在哪里。
2.因为这次用的protues软件之前练习的较少,就连元器件的英文都不记得,一大堆难题需要解决,甚至是软件的安装都是经过一段时间摸索才真正掌握的。
借助老师的给的关于protues软件的PPT,不断的学习,以及和同学的交流,逐渐了解的软件的使用,能够制作一些简单的设计,比如流水灯,用数码管显示数字等。
3.经过不断的做试验,我还学会了protues软件和Keil软件的连接,
应用Keil编译程序,然后用protues仿真。
因为protues软件本身自带编译器,也可以借助汇编编写好汇编程序再在protues中添加进去就行了。
两种方法相比,个人觉得第二种方法更方便些,但如果编译不通过的话,可以找到出错的地方,但修改起来比较困难;第一种方法应用起来麻烦一些,必须先安装Keil软件和让它们相连接的软件,但用起来相当顺手,不论是汇编语言还是C语言。
4.在完成整个电路的连接之后,想要进行仿真时,经常出现错误,有时编译失败,有时是数码管不亮,有时是控制开关失灵。
5、特别注意在用kill软件编程的过程中,延时子程序循环的时间要长一点,否则在用protues进行仿真时,看不到数码管的闪烁,应为cpu反应不过来。
但在单片机中下载时,延时子程序循环的时间要短一点,这样硬件仿真是就不会看到数码管闪烁。
6.在protues软件中,对于初学者而言,寻找器件,连接器件都有些困难,毕竟对软件不熟悉,有些器件的名称又不清楚,如果查找查不到时只有一个一个寻找,相当的费时。
通过这些练习,我才真正明白熟能生巧的道理,不管做什么都需要多多练习。
7.经过一个月的学习,通过查找各种资料,我对于数字钟的设计原理和步骤有了更进一步的了解,也增加了我对单片机学习的兴趣,平时也可以选用各种软件完成单片机的一些种设计。
附录:
元器件清单
数字钟设计程序:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INTT0 ;定时器
AJMP INTX1 ;外部中断1
ORG 0100H
MAIN:MOV 08H,#20
MOV R0,#00H ;显示秒
MOV R1,#08H ;显示分钟
MOV R2,#02H ;显示小时
MOV R5,#01H ;显示日期并赋初值
MOV R6,#01H ;显示月份并赋初值
MOV R4,#00H ;中断0标志位
MOV SP,#3FH ;避开堆栈
MOV TMOD,#01H ;定时器0以方式1定时
MOV TH0,#3CH ;置定时器初值
MOV TL0,#0B0H
MOV TCON,#15H
MOV IE,#87H ;开放中断
C0: SETB P3.5
SETB P3.4
SETB P3.1
SETB P3.0
CJNE R4,#00H,DF1 ; 判断显示秒钟
MOV A,R0
AJMP C1
DF1: CJNE R4,#01H,DF8 ;判断显示分钟小时MOV A,R1
AJMP C1
DF8: MOV A,R5 ;显示日期
C1: MOV B,#10
DIV AB
MOV 10H,A
MOV A,
CLR P3.5
ACALL DELAY
SETB P3.5
MOV A,10H
MOVC A,@A+DPTR
MOV P2,A
CLR P3.4
ACALL DELAY
SETB P3.4
CJNE R4,#00H,DF4 ; 判断显示时和分
MOV A,#0
DF4: CJNE R4,#01H,DF5 ;判断显示秒钟MOV A,R2
AJMP A3
DF5: MOV A,R6 ;显示日期
A3: MOV B,#10
DIV AB
MOV R3,A
MOV A,B
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
CLR P3.1
ACALL DELAY
SETB P3.1
MOV A,R3
MOV P2,A
CLR P3.0
ACALL DELAY
AJMP C0
TAB:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DELAY:MOV 20H,#5 ;延时子程序
DEL1: MOV 21H,#5
DEL2: NOP
DJNZ 21H,DEL2
DJNZ 20H,DEL1
RET
INTT0:MOV TH0,#3CH ;重新赋50ms初值
MOV TL0,#0B0H
DJNZ 08H,D1 ;判断是否到1s
MOV 08H,#20
INC R0 ;秒钟加1
MOV R0,#00H
INC R1
CJNE R1,#60,D1 ;判断1小时
MOV R1,#00H
INC R2
CJNE R2,#24,D1 ;判断24小时
MOV R2,#00H
INC R5
CJNE R5,#31,D1
MOV R5,#01H
INC R6
CJNE R6,#13,D1
MOV R6,#01H
D1: NOP
RETI
INTX0:INC R4 ;中断0标志为加1
CJNE R4,#03H,D2 ;判断标志位
MOV R4,#00H
D2: NOP
RETI
INTX1:CJNE R4,#00H,A1 ;判断标志位等于0就显示秒INC R0
CJNE R0,#60,D3
MOV R0,#00H
A1: CJNE R4,#01H,A2 ;判断标志位等于1就显示分钟和小时INC R1
CJNE R1,#60,D3
MOV R1,#00H
INC R2
CJNE R2,#24,D3
MOV R2,#00H
A2: CJNE R4,#02H,D3 ;判断标志位等于2就显示日期和月份
INC R5
CJNE R5,#31,D3
MOV R5,#01
INC R6
CJNE R6,#13,D3
MOV R6,#01
D3: NOP
RETI
END
2011年11月3日星期四。