单片机数字时钟课设正文Word文档格式.docx
- 文档编号:3176886
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:19
- 大小:222.04KB
单片机数字时钟课设正文Word文档格式.docx
《单片机数字时钟课设正文Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟课设正文Word文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
1.2汇编语言特点
1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2.保持了机器语言的优点,具有直接和简捷的特点。
3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5.经常与高级语言配合使用,应用十分广泛。
1.3芯片简介
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。
2设计原理分析
2.1基本原理
本系统是基于单片机AT89S52制作的数字电子钟。
根据实验要求,完成电子钟、时钟校准以及闹钟功能。
硬件系统设计方面:
采用六位LED数码管,用切换的方式显示时间和设置的闹钟时间;
可调整时间以及闹钟时间;
具有设置闹钟的功能。
软件系统设计方面:
程序采用汇编语言编写,使自己更加理解硬件语言以及其工作原理;
“时钟”基准时间由单片机内部的定时中断提供用一个计数器对定时中断的次数进行计数,可实现“秒”定时,同理可以进行“分”﹑“时”定时;
采用按键查询功能复用,简化了程序的设计;
采用动态扫描法显示6位数码管。
2.2硬件设置
(1)采用6位LED数码管显示时间。
(2)采用“动态扫描驱动”,但所需驱动电流要大。
(3)显示部分也可采用液晶,但液晶成本较高,故采用七段数码管显示。
(4)键盘的按键数目较多时则采用行列式矩阵结构为好。
“一键多用”的构思和设计能大为减少按键的数目。
2.3软件方案
(1)“时钟”基准时间由单片机内部的定时中断提供,定时时间应是“秒”的整除数,且长短适宜。
最长不能超过16位定时器的最长定时时间;
最短不能少于中断服务程序的执行时间。
通常来说基准时间越短,越有利于提高时钟的运行精确度。
(2)用一个计数器对定时中断的次数进行计数,可以进行“分”﹑“时”定时。
(3)LED数码管显示器采用“动态扫描驱动”时要注意的是:
驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间短),而驱动信号的间歇时间必须小于“余辉时间”(电流大余辉时间长),驱动电流大小受硬件电路能力和LED数码管极限功耗制约。
(4)动态扫描显示方式在更新显示内容时,因LED数码管余辉的存在可能会造成显示字符的模糊,新内容写入显示器之前须将所有的LED数码管熄灭。
3设计流程图
3.1主程序流程图
当有不同按键按下时,进入不同的服务子程序,同时在查询的时候判断是不是整点,有没有到达闹铃设置的时间,进入服务子程序采用的是查询的模式。
3.2闹铃程序流程图
实现闹钟功能主要有两个步骤,首先是能在按键中把闹钟数值写进寄存器,实现存储功能。
其次是根据在查询按键服务程序中作判别,检查当前时间是否与闹铃时间相等,如果相等,则使在相应时间时对蜂鸣器提供驱动电流即可。
就实现了闹钟设置的功能。
3.3TO中断子程序流程图
4系统仿真
利用proteus软件对以上系统进行仿真。
电子秒表与闹钟的系统可分为四个环节,分别是单片机控制系统、时间显示模块、控制键模块和闹铃模块。
通过若干模块的协调工作就可以完成相应的时间调整和定时闹钟的相应功能以及显示功能。
单片机控制系统由可编程可擦除只读存储器AT89C51构成,此设计中用到了C51单片机的中断系统,并行口设计和定时器等功能。
时间显示模块显示部分采用六位一体共阳数码管,自左到右分别显示时时-分分-秒秒。
控制键模块,其中K1键为闹钟设置键,K2为小时设置键,K3为分钟设置键。
闹铃模块采用SPEAKER,当定时时间到时,P1.7产生连续脉冲SPEAKER报警。
5程序及运行结果
5.1源代码
/**************************************
;
变量地址分配
*********************************************************/
HourEQU3AH;
小时计数器的地址
MinuteEQU3BH;
分钟计数器的地址
SecondEQU3CH;
秒计数器的地址
P1ValEQU3DH;
数码管位驱动值的地址
ClockModeBIT20H.0;
模式(正常走时/闹时)设置寄存器地址,
值为0时正常走时,为1时闹时设定
AlarmOnOffBIT20H.1;
闹钟开启/关闭标志,为0关闭,为1开启
AlarmTimeOnBIT20H.2;
此位为1时表示闹时时间到
DispHourEQU21H;
小时显示寄存器的地址
DispMinuteEQU22H;
分钟显示寄存器的地址
DispSecondEQU23H;
秒显示寄存器的地址
AlarmHourEQU2EH;
闹时小时计数器的地址
AlarmMinuteEQU2FH;
闹时分钟计数器的地址
k1BITP3.2;
闹钟设置键
k2BITP3.3;
小时设置键
k3BITP3.5;
分钟设置键
ORG0000H
AJMPMain
ORG0BH
AJMPTimeInt
ORG0020H
Main:
MOVSP,#70H
MOV39H,#14H
MOVHour,#12
MOVMinute,#00
MOVSecond,#00
MOVAlarmHour,#06
MOVAlarmMinute,#00
CLRClockMode
CLRAlarmTimeOn
SETBp1.7
MOVTMOD,#00000001B
MOVTH0,#03CH
MOVTL0,#0B0H
MOVIE,#82H
SETBTR0
L1:
JBK1,CheckMinuteKey
LCALLDelay
SETBClockMode
LCALLAlarmSet
CheckMinuteKey:
JBK3,CheckHourKey
MOVA,Minute
ADDA,#1
MOVMinute,A;
CJNEA,#60,NotOver1
MOVMinute,#0
NotOver1:
JNBK3,$
CheckHourKey:
JBK2,CheckAlarm
MOVA,Hour
MOVHour,A
CJNEA,#24,NotOver2
MOVHour,#0
NotOver2:
JNBK2,$
CheckAlarm:
;
JNBAlarmTimeOn,ToReturn
LCALLLOOP
ToReturn:
AJMPL1
**********************************************
定时器Timer0中断服务程序
TimeInt:
PUSHACC
PUSHPSW
SETBRS0
CLRRS1
DJNZ39H,NotoneSecond
LCALLClock
LCALLConvertoBuffer
NotoneSecond:
LCALLScanDisplay
POPPSW
POPACC
RETI
ScanDisplay:
MOVR1,#30H
MOVR4,#11111110B
MOVA,R4
PLAY:
MOVP2,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
INCR1
RLA
JNBACC.6,LD1
MOVR4,A
AJMPPLAY
LD1:
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
共阳段码表"
0"
"
1"
2"
"
3"
4"
5"
6"
7"
8"
9"
不亮"
Clock:
MOVA,Second
MOVSecond,A
CJNEA,#3CH,NotOverFlow
MOVSecond,#0
MOVMinute,A
CJNEA,#18H,NotOverFlow
NotOverFlow:
JNBAlarmOnOff,NotAlarm
CJNEA,AlarmMinute,NotAlarm
CJNEA,AlarmHour,NotAlarm
SETBAlarmTimeOn
NotAlarm:
RET
ConvertoBuffer:
JBClockMode,DispAlarmSet
MOVA,Second;
MOVDispSecond,A;
MOVA,Minute;
MOVDispminute,A;
MOVA,Hour;
MOVDispHour,A
AJMPConvert
DispAlarmSet:
JBAlarmOnOff,AlarmOn
MOVDispSecond,#00H
AJMPNext
AlarmOn:
MOVDispSecond,#11
Next:
MOVA,AlarmMinute
MOVDispminute,A
MOVA,AlarmHour
Convert:
MOVA,DispSecond
MOVB,#10
DIVAB
MOV@R1,B
MOV@R1,A
MOVA,DispMinute
MOVA,DispHour
*************************************
闹时设置子程序
AlarmSet:
JNBK1,$
CheckArmMinuteKey:
JBK3,CheckArmHourKey
CL1:
SETBAlarmOnOff
MOVAlarmMinute,A
CJNEA,#60,ArmNotOver1
MOVAlarmMinute,#0
ArmNotOver1:
CheckArmHourKey:
JBK2,AlarmSetEnd
SETBAlarmOnOff
MOVAlarmHour,A
CJNEA,#24,ArmNotOver2
MOVAlarmHour,#0
ArmNotOver2:
JBK3,AlarmSetEnd
ACALLCL1
AlarmSetEnd:
JBK1,AlarmSet
**************************************
闹时服务子程序
LOOP:
CLRP1.7
ACALLDelay1
SETBP1.7
JBK1,LOOP
CLRAlarmOnOff
AlarmReturn:
延时子程序
DELAY1:
MOVR3,#15
LOOP1:
MOVR5,#90
NOP
LOOP2:
DJNZR5,LOOP2
DJNZR3,LOOP1
Delay:
MOVR6,#05H
Del:
MOVR7,#08Fh
DJNZR7,$
DJNZR6,Del
END
5.2仿真运行截图
6心得体会
通过这次课程设计,加强了我们动手、思考和解决问题的能力。
在设计过程中,经常会遇到这样那样的情况,就是心里想着这样的程序可以行得通,但实际接上总是实现不了,因此耗费在这上面的时间用去很多。
我觉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。
平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。
而且还可以记住很多东西。
比如一些程序的调用,通过动手实践让我们对调用映象深刻。
所以这个课程设计对我们的作用是非常大的。
设计程序时,我发现只有细心才能做到完美,首先是参数设置,还有结果显示部分的设置,兼顾到方方面面去考虑是很需要的,否则只是一纸空话。
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
课程设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
参考文献
[1]
姚燕南.微型计算机原理.西安:
西安电子科技大学出版社,2002
[2]
艾德才.微型接口技术编程.北京:
清华大学出版社,2002
[3]
冯博琴.单片微型计算机原理与接口技术.北京:
清华大学出版社,2000
[4]薛钧毅.单片微型计算机原理及应用.西安:
西安交通大学出版社,2005
[5]陈希林.汇编语言程序设计.北京:
高等教育出版社,2004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 时钟 正文