电子表实训报告.docx
《电子表实训报告.docx》由会员分享,可在线阅读,更多相关《电子表实训报告.docx(15页珍藏版)》请在冰点文库上搜索。
电子表实训报告
深圳职业技术学院
SHENZHENPOLYTECHNIC
实训报告
主题:
电子表的设计与制作
系部:
机电学院
专业:
电气自动化
班级:
09电气自动化4
组员:
淳,毛威
日期:
2010年5月13日
一、设计目标
1.用4位的7段显示器显示分,秒,以24小时方式工作
2.用开关可以调节显示器的时间及日期显以及切换显示的容
3.可以设置闹钟
4.可以调节时间及日期
5.在闹钟时间到达时蜂鸣器会发声
二、设计方框图
显示时间,如果有中断,调节时间和闹钟
三、元器件介绍
1.AT89C51:
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式
系统提供了一种灵活性高且价廉的方案
2.4位7段共阳显示器:
4位是同时显示六位阿拉伯数字,而每一个数字又是七段码显示的;七段是指一个数码显示的阿拉伯数字是由七位二进制数控制的,共阳是指相应的二进制为1时不亮,为0时亮。
在实验中显示器的作用是显示时间。
四、设计原理
设计程序分为主程序,中断程序和各种功能程序。
2.6位7段共阳显示器:
六位是同时显示六位阿拉伯数字,而每一个数字又是七段码显示的;七段是指一个数码显示的阿拉伯数字是由七位二进制数控制的,共阳是指相应的二进制为1时不亮,为0时亮。
在实验中显示器的作用是显示时间。
四、设计原理
设计程序分为主程序,中断程序和各种功能程序。
主程序要完成系统的初始化,接受键值并根据键号实现不同的功能,以及判断闹铃时间是否到,如果时间到,则启动响铃。
中断服务程序包括定时计数器0和定时计数器1的中断服务程序,定时计数器0的中断程序实现50ms定时,并每中断20次就修改当前的,分,秒值。
外部中断0实现日期,时间,以及闹钟的转化,当单片机复位之后显示的时间的时和分钟,按一下外部中断0按钮,转化显示的秒钟,在按一下显示的是日期的月份和日,在按一下的话显示的就是闹钟的当前的设定时间。
而外部中断1实现的是调整时间,日期,闹钟,秒钟,如果当前显示的是分钟和秒钟的话,那么现在外部中断1可以调整秒钟;如果是月份的话那么就是可以调整日的显示;如果当前显示的是闹钟的时间,那么你就可以调整显示的闹钟的时间那么就可以改变闹铃响的时间,即是设定闹铃。
五、电路安装与调试过程
因为是用protues进行仿真,所以并没有实际的电路图,仿真的电路如下所示。
按开始按钮开始仿真,显示时间,调节开关可以控制时间,可以控制闹铃。
但刚开始时调节时钟时经常出错,还不能熟练掌握,多调试几次才能每次都准确的调节。
电子表仿真图如下:
六、训练总结
1.这次课程设计,我想到要做电子表主要是因为在大一大二的时候做过类似的题目,曾经用电路板接过数字钟,也用Multisim软件做过仿真,也用EDA工具做过实验,所以很想用单片机做个试试,看与之前的数字钟相比,用单片机做的优势与劣势在哪里。
2.因为这次用的protues软件之前从未接触过,做起来难免手忙脚乱的,一大堆难题需要解决,甚至是软件的安装都是经过一段时间摸索才真正掌握的。
借助老师的给的关于protues软件的PPT,不断的学习,以及和同学的交流,逐渐了解的软件的使用,能够制作一些简单的设计,比如流水灯,用数码管显示数字等。
3.经过不断的做试验,我还学会了protues软件和Keil软件的连接,应用Keil编译程序,然后用protues仿真。
因为protues软件本身自带编译器,也可以借助轻松汇编编写好汇编程序再在protues中添加进去就行了。
两种方法相比,个人觉得第二种方法更方便些,但如果编译不通过的话,只能知道出错的行,修改起来比较困难;第一种方法应用起来麻烦一些,必须先安装Keil软件和让它们相连接的软件,但用起来相当顺手,不论是汇编语言还是C语言。
4.我的课程设计是借鉴老师所给的材料,在完成整个电路的连接之后,想要进行仿真时,经常出现错误,有时编译失败,有时是数码管不亮,有时是控制开关失灵,有时是闹钟设置失效,在不断的检查过后一个完整的电子表终于呈现出来了!
5.在选择编成语言时,我同时选择了C语言和汇编两种进行,在多次比较之后还是选用汇编,因为虽然C语言程序相对一些,但因为我对汇编语言更为熟悉,最终还是选择汇编。
电子表的汇编程序对于我来说,想要全部理解还有困难的,只能大概明白。
6.在protues软件中,对于初学者而言,寻找器件,连接器件都有些困难,毕竟对软件不熟悉,有些器件的名称又不清楚,如果查找查不到时只有一个一个寻找,相当的费时。
通过这些练习,我才真正明白熟能生巧的道理,不管做什么都需要多多练习。
7.经过一个月的学习,通过查找各种资料,我对于电子表的设计原理和步骤有了更进一步的了解,也增加了我对单片机学习的兴趣,平时也可以选用各种软件完成单片机的一些种设计。
附录:
元器件清单
AT89C2051
1个
LED数码管
4个
12MH晶振
1个
22uf电解电容
1个
220uf电解电容
1个
510电阻
7个
2.2k电阻
5个
10k电阻
2个
30PF电容
1个
0.1PF电容
1个
PNP8550三极管
5个
蜂鸣器
1个
电子表程序:
ESCEQU22H
MSECEQU21H
MECEQU23H
ORG0000H
AJMPMAIN
ORG000BH
AJMPTIME0;定时器0实现自动计数
ORG0003H
AJMPWZD0;外部中断0实现时间,日期,秒表转换
ORG0013H
AJMPWZD1;外部中断1实现设置显示值
ORG0100H
MAIN:
MOVIE,#87H;开中断
SETBPX1;设置外部中断1以为优先级
MOVTMOD,#01H;使用定时器方式1
MOVTH0,#3CH;赋50ms初值
MOVTL0,#0B0H
MOVTCON,#15H;开定时器0,及选择中断触发方式
MOVMSEC,#20;赋值一秒钟初值
MOVR4,#00H;标志位清零(中断0)
MOVR5,#00H;秒表初值
MOVR0,#00H;分钟初值
MOVR1,#00H;小时初值
MOVR6,#01H;日期日初值
MOVSP,#3FH;设置堆栈初始值
MOVR7,#01H;月份初值
MOVESC,#06H;闹钟分钟的初始值
MOVMEC,#00H;闹钟小时的初始值
SETBP3.1
MW1:
SETBP3.0
SETBP3.7
SETBP3.5
SETBP3.4
ACALLCLOCK;调用闹钟子程序
CJNER4,#00H,MW7;判断显示时钟
MOVA,R0
AJMPWEI
MW7:
CJNER4,#01H,MW8;判断显示秒钟
MOVA,R5
AJMPWEI
MW8:
CJNER4,#02H,MW12;显示日期
MOVA,R6
AJMPWEI
MW12:
MOVA,ESC;显示闹钟的分钟
WEI:
ACALLSHOW;调用子程序将数据写给p1口
CLRP3.0
ACALLDELAY
SETBP3.0;调用子程序将数据写给p1口
ACALLSHOW1
CLRP3.7
ACALLDELAY
SETBP3.7
CJNER4,#00H,MW9;判断显示时钟
MOVA,R1
AJMPWEI1
MW9:
CJNER4,#01H,MW10;判断显示秒钟
MOVA,#00H
AJMPWEI1
MW10:
CJNER4,#02H,MW13
MOVA,R7;显示日期
AJMPWEI1
MW13:
MOVA,MEC;显示当前闹钟的小时
WEI1:
ACALLSHOW
CLRP3.5
ACALLDELAY;调用延时子程序
SETBP3.5
ACALLSHOW1
CLRP3.4
ACALLDELAY
AJMPMW1
;-----------------------------
SHOW:
MOVB,#0AH
DIVAB
MOVR2,A
MOVA,B
MOVDPTR,#TAB
MOVCA,A+DPTR
MOVP1,A
RET
;------------------------
SHOW1:
MOVA,R2
MOVCA,A+DPTR
MOVP1,A
RET
;------------------------
TIME0:
MOVTH0,#3CH;赋50ms初值
MOVTL0,#0B0H
DJNZMSEC,MW4;判断1s到否
MOVMSEC,#20
INCR5;秒钟加1
CJNER5,#60,MW4;判断1分钟
MOVR5,#00H
INCR0
CJNER0,#60,MW4;判断1小时
MOVR0,#00H
INCR1
CJNER1,#24,MW4;判断24小时
MOVR1,#00H
ACALLMONTH;调用月份子程序
MW4:
NOP
RETI
;---------------------------------
AN11:
INCR6;31天子程序
CJNER6,#32,AB1
MOVR6,#01H
INCR7
CJNER7,#13,AB1
MOVR7,#01H
AB1:
NOP
RET
;------------------------------------
AN12:
INCR6;30天子程序
CJNER6,#30,AB2
MOVR6,#01H
INCR7
CJNER7,#13,AB2
MOVR7,#01H
AB2:
NOP
RET
;---------------------------------
WZD0:
INCR4;标志为加1(中断0)
CJNER4,#04H,MW3;判断标志位
MOVR4,#00H
MW3:
NOP
RETI
WZD1:
CJNER4,#00H,OU;等于0是调时分(中断1)
INCR0
CJNER0,#60,MW6
MOVR0,#00H
INCR1
CJNER1,#24,MW6
MOVR1,#00H
OU:
CJNER4,#01H,MW5;等于1是调秒钟
INCR5
CJNER5,#60,MW6
MOVR5,#00H
SJMPMW6
MW5:
CJNER4,#02H,OU1
ACALLMONTH;调用月份子程序
AJMPMW6
;等于3调节闹钟的时间
OU1:
PUSHACC;保护现场
MOVR3,ESC
MOVA,MEC
INCR3
CJNER3,#60,OU7
MOVR3,#00H
INCA
CJNEA,#24,OU7
MOVA,#00H
OU7:
MOVESC,R3
MOVMEC,A
POPACC;恢复现场
MW6:
NOP
RETI
;-------------------------------------
TAB:
DB40H,79H,24H,30H,19H,12H,02H,78H,00H,18H
DELAY:
MOV09H,#1;延时子程序
DEL1:
MOV10H,#1
DEL2:
NOP
DJNZ10H,DEL2
DJNZ09H,DEL1
RET
;-------------------------------------
MONTH:
CJNER7,#1,AN2;判断月份子程序
ACALLAN11
AJMPMW2
AN2:
CJNER7,#3,AN3
ACALLAN11
AJMPMW2
AN3:
CJNER7,#5,AN4
ACALLAN11
AJMPMW2
AN4:
CJNER7,#7,AN5
ACALLAN11
AJMPMW2
AN5:
CJNER7,#8,AN6
ACALLAN11
AJMPMW2
AN6:
CJNER7,#10,AN7
ACALLAN11
AJMPMW2
AN7:
CJNER7,#12,AN8
ACALLAN11
AJMPMW2
AN8:
CJNER7,#2,AN9;判断2月份
ACALLAN12
AJMPMW2
AN9:
CJNER7,#13,AN10;判断30天的月份
AJMPMW2
AN10:
INCR6
CJNER6,#31,MW2
MOVR6,#01H
INCR7
CJNER7,#13,MW2
MOVR7,#01H
MW2:
NOP
RET
;--------------------------------------闹钟子程序
CLOCK:
PUSHACC;保护现场
MOVA,R0
CJNEA,ESC,OU6;判断闹钟时间到否
MOVA,R1
CJNEA,MEC,OU6
CLRP3.1
AJMPEXIT
OU6:
SETBP3.1
EXIT:
POPACC;恢复现场
RET
END