作息钟系统 单片机课程设计.docx
《作息钟系统 单片机课程设计.docx》由会员分享,可在线阅读,更多相关《作息钟系统 单片机课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
作息钟系统单片机课程设计
作息钟系统
一、概述
1.1课题简介
随着计算机技术的发展和在控制系统中的广泛应用,以及设备向小型化、智能化发展,作为高新技术之一的单片机以其体积小、功能强、价格低廉、使用灵活等优势,显示出了很强的生命力。
本设计就是采用AT89C52芯片,设计一个具有报时功能的作息时间控制钟。
利用单片机的定时器功能来计时,时间数据经过单片机由数码管输出显示,当与设定时间相一致时,进行报时。
该控制器可广泛用于学校、工厂等进行时间提醒。
1.2课题研究的目的和意义
本课题利用单片机来进行功能设定,让我们对单片机的功能,设计要求以及其他的一些必备要求有了一定的了解,通过实践,提高了我们的动手与整体把握的能力。
二、硬件系统
2.1主要元器件选用
本系统主要由单片机(AT89C52)、反相器(74LS04)、按键、蜂鸣器、PNP三极管、四联共阴极LED数码显示器等一系列电路组成,对时间进行定时,完成到设定时间报时的功能。
2.2电路分析
①本课题选用AT8952单片机,它是一个低电压,高性能CMOS8位单片机,片内含8Kbytes的可反复擦写的Flash只读程序存储器(ROM)和256bytes的随机存取数据存储器(RAM),AT8952单片机在电子行业中有着广泛的应用。
它的主要性能参数为:
·与MCS—51产品指令和引脚完全兼容
·8k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz—24MHz
·三级加密程序存储器
·256×8字节内部RAM
·32个可编程I/O口线
·3个16位定时/计数器
·8个中断源
·可编程串行UART通道
·低功耗空闲和掉电模式
PDIP封装的AT89C52引脚图
②晶振,如图2-2
在本次课程设计中,采用了外部振荡,在AT89C52芯片内部有一个高增益反相放大器,输入端为芯片引脚XTAL1(19脚),输出端为引脚XTAL2(18脚),在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
根据经验,选取电容为30pF,这样电路就会
图2-2晶振电路稳定。
本次课程中选取了12M的晶振,即一个机器周期为1μS。
③蜂鸣电路
其电路图如左图所示蜂鸣电路接有电阻、三极管和蜂鸣器,构成一定的电路。
电阻选用10kΩ,起保护电路作用,PNP型三极管能放大电流信号。
三极管其发射极接正
图2-3蜂鸣电路极,集电极与蜂鸣器相接,当时间到达设定的时间时,芯片发出信号,经三极管放大后,启动蜂鸣器,蜂鸣器发出声音。
④显示电路,如图2-4
显示器采用四联共阴极LED数码显示器,以其正面对着自己,从左边开始数为1,2等依次下去的,其中四个数码管分别由P1口P1.0~P1.3控制,为1,12,5,9口。
字段直接由CPUP2口的8为双向口线控制,,但考虑到所买器材为共阴数码管,所以接反相器
图2-4显示电路
⑤计数电路和其他,如图2-5
这部分电路图中有8个LED灯和8个保护电阻,阻值均为10kΩ。
其中P0.0口所接的LED用来计秒,闪灭一下各计1s。
闪烁60次后,显示器的秒位增加一,P0.1~P0.7口所接的7个LED灯在蜂鸣器发出蜂鸣声的同时发光。
图2-5计数电路和其他
⑥按键
图2-6按键电路
四个按钮按从上到下的次序记为SW1、SW2、SW3、SW4,开机显示0600(表示6点)。
时间校对:
每按动一次SW2,小时自动加1,持续按住不放,小时持续自动加1;每按一次SW3,分钟自动加1,持续按住不放,分钟自动连续加1,当分钟显示为59时,再按动SW3,分钟将变为00。
设定闹铃时间:
先按SW1,屏幕出现CLR-,再按SW2,屏幕闪,再按SW1,开始设闹铃,按SW2设小时,按SW3设分钟。
时间设好后,再按SW1出现--00,若再按SW3保存闹铃时间,再按SW2恢复时间显示,若按SW1则放弃设置闹铃。
闹铃设置完成。
闹铃时间到,蜂鸣器响,LED灯亮,按SW4,蜂鸣器停止蜂鸣。
三、软件系统
3.1软件设计说明及RAM资源分配
软件采用MCS_51汇编语言编写,使用T0产生50ms时钟信号,通过软件计数器产生时、分、秒信号。
单片机内部RAM资源分配如下表:
RAM单元
资源分配
RAM单元
资源分配
10H
50ms
17H
显示缓冲区时十位
11H
秒计数
18H
定时分单元
12H
分计数
19H
定时时单元
13H
时计数
1AH
控制码单元
14H
显示缓冲区分个位
1B~1FH
备用
15H
显示缓冲区分十位
20H~6FH
时间表格
16H
显示缓冲区时个位
70H~7FH
堆栈区
3.2流程图:
Y
四、调试
4.1电路调试
硬件电路调试过程采用了proteus软件。
在调试过程中发现:
①.在仿真时发现数码管不显示任何数据,于是把程序部分分成多段子程序逐步进行仿真,发现问题存在于数码管为共阴极,未对输出信号进行取反,加了74LS04反相器进行驱动,问题解决。
②.在蜂鸣器发出蜂鸣后需断开电源才可以使其停下,在实际应用中不是很方便,就在原先设计的3个按键的基础上添加了一个用于关蜂鸣器的按键。
4.2实物调试
在焊接实物时,把焊接想的过于理想化,忽略了现实中焊接连线的困难,后来采用了排针,只需将线连接就可以,在焊好以后,进行调试,刚开始的时候,显示器不显示,其他的器件也没反应,查看电路,及焊的情况,在比较薄弱的地方加了一层焊锡,再次进行测试,还是没反应,用万用表进行测量,发现火线和零线之间没有电压,再查看电路时发现AT89C52的20脚和40脚的正负极接反,将其接正后,在调试,显示数据。
五、课程小结
在本次课程实践中,以团队的形式,我们共同的完成了一个课题,从刚开始的设想到后来的完成实物,从查书开始一步一步进行,期间经历了很多困难,有时候会让人崩溃的想放弃,但最后坚持了下来。
在此次实践中,我感触最深就是在焊接时,因为刚开始时过于理想化的设想,让我在排版的时候出现了一些错误,使得在后来焊接的时候比较麻烦,在发现需要交叉线较多的情况下,放弃了继续使用导线连接,直接用排针连接,这样减少了许多可能会出现的错误,比如说短路,虚焊等,但因为先前排版时候的错误,使得在按键的地方放不下排针,因此只能用导线慢慢连接,因此导致了连线比较乱,这给了我个启示,在以后的实践中,一定先要统筹全局,要考虑到全面的版图,不能以一部分一部分为单位,慢慢焊接。
另外,在焊接好电路以后的调试过程中,因为刚开始的显示器并没有显示,让我的心情有点急躁,并没有静下心来慢慢排除故障,但这无济于事,后来慢慢比对电路,向别人请求帮助后,查出了故障,再改正。
通过本次课程设计,让我们再一次体会了学在课堂,精于实践的真理,熟能生巧。
多做多练成为应用型人才很重要,也有助于日后的毕业设计乃至毕业后的工作奠定良好的基础。
致谢:
在这两个星期的课程实践中,经历了种种困难,经过团队的不断努力和请求他人的帮助下,我们顺利的完成了我们的设计,在此,我对我的指导老师庄志红老师和热心帮助过我的同学表示衷心致谢。
六、参考文献
《单片机原理及应用技术》范力旻主编电子工业出版社
《单片机原理及接口技术实践教程》胡建主编机械工业出版社
《单片机课程设计指导》杨居毅主编清华大学出版社
附录
1.
总电路图
2.元器件清单
序号
名称
代号
型号
数量
1
芯片
U1
ST89C52
1
2
晶振
X1
12MHz
1
3
电容
C1,C2
30pf
2
4
电解电容
C3
10uf
1
5
电阻
R1-R8
100Ω
8
6
电阻
R9,R10
10KΩ
2
7
三极管
Q1
PNP
1
8
蜂鸣器
BUZ1
-
1
9
发光二极管
LED1-LED8
LED
8
10
按钮
SW1~SW4
___
4
11
反相器
U2,U3
74LS04
2
12
数码管
---
共阴数码管
1
3.参考程序
SPEAKBITP3.7
DISEQUP1
ControlEQUP0
SW1EQUP3.2
SW2EQUP3.3
SW3EQUP3.4
SW4EQUP3.5
MSEQU10H
SecsEQU11H
MinuteEQU12H
HourEQU13H
T_MinuteEQU18H
T_HourEQU19H
TControlEQU1AH
DAITIEQU1BH
ORG0000H
LJMPMain
ORG000BH
LJMPT0INT
Main:
MOVSP,#70H
MOVIE,#10000010B
MOVTMOD,#01H
MOVMS,#20
MOVSecs,#0
MOVMinute,#0H
MOVHour,#6H
MOVT_Minute,#0
MOVT_Hour,#6
MOVDAITI,#20H
SETBP0.0
SETBSPEAK
CLRF0
CLRB.1
MOVR7,#80
MOVTL0,#0B0H
MOVTH0,#3CH
SETBTR0
LOOP:
MOVR1,#Minute
LCALLSplit
LCALLDISP
LCALLVerify
NOP
LCALLSetup
MOVA,Secs
CJNEA,#5,$+3
JNCLOOP
LCALLCompare
SJMPLOOP
T0INT:
PUSHACC
MOVTL0,#0B0H
MOVTH0,#3CH
DJNZMS,T0Exit
CPLP0.0
MOVMS,#20
MOVA,Secs
INCA
MOVSecs,A
CJNEA,#60,T0Exit
MOVSecs,#0
MOVA,Minute
ADDA,#1
DAA
MOVMinute,A
CJNEA,#60H,T0Exit
MOVMinute,#0
MOVA,Hour
ADDA,#1
MOVHour,A
CJNEA,#24H,T0Exit
MOVHour,#0
T0Exit:
POPACC
RETI
Compare:
MOVR0,#20H
NextTime:
LCALLDISP
MOVA,@R0
CJNEA,Hour,CLP1
INCR0
MOVA,@R0
CJNEA,Minute,CLP2
INCR0
MOVA,@R0
CPLA
MOVControl,A
START:
CLRSPEAK
MOVA,#255
SJMPAMAG
AMAG:
DECA
CJNEA,#0,AMAG
SETBSPEAK
CLRP0.1
CLRP0.2
CLRP0.3
CLRP0.4
CLRP0.5
CLRP0.6
CLRP0.7
JNBSW4,STOP
LJMPSTART
STOP:
MOVR6,#40
DJNZR6,$
SETBSPEAK
SETBP0.1
SETBP0.2
SETBP0.3
SETBP0.4
SETBP0.5
SETBP0.6
SETBP0.7
INCR0
RET
CLP1:
INCR0
CLP2:
INCR0
MOVA,@R0
JNZCLP3
RET
CLP3:
INCR0
CJNER0,#6FH,NextTime
RET
Verify:
JBSW3,VLP3
CLREA
CLRTR0
VLP1:
MOVA,Minute
ADDA,#1
DAA
MOVMinute,A
CJNEA,#60H,VLP2
MOVMinute,#0
VLP:
MOVR6,#40
MOVR1,#Minute
LCALLSplit
LCALLDISP
DJNZR6,$-3
JNBSW3,VLP1
MOVSecs,#0
SETBEA
SETBTR0
RET
VLP3:
JBSW2,Vexit
CLREA
CLRTR0
VLP4:
MOVA,Hour
ADDA,#1
DAA
MOVHour,A
CJNEA,#24H,VLP5
MOVHour,#0
VLP5:
MOVR6,#40
MOVR1,#Minute
LCALLSplit
LCALLDISP
DJNZR6,$-3
JNBSW2,VLP4
MOVSecs,#0
SETBEA
SETBTR0
VExit:
RET
Setup:
JNBSW1,SLP0
RET
SLP0:
MOVR6,#20
MOV14H,#10H
MOV15H,#0AH
MOV16H,#11H
MOV17H,#0CH
LCALLDISP
DJNZR6,$-3
JNBSW1,SLP0
SLP1:
MOVR6,#20
MOV14H,#10H
MOV15H,#0AH
MOV16H,#11H
MOV17H,#0CH
LCALLDISP
DJNZR6,$-3
JBSW3,SLP2
LCALLClear
MOVR6,#50
MOV14H,#10H
MOV15H,#0AH
MOV16H,#11H
MOV17H,#0CH
LCALLDISP
DJNZR6,$-3
RET
SLP2:
JBSW2,SLP1
SETBF0
SETBB.1
SLP21:
MOVR6,#50
MOV14H,#10H
MOV15H,#0AH
MOV16H,#11H
MOV17H,#0CH
LCALLDISP
DJNZR6,$-3
JBSW1,SLP21
SLP22:
MOVR6,#50
MOV14H,#10H
MOV15H,#0AH
MOV16H,#11H
MOV17H,#0CH
LCALLDISP
DJNZR6,$-3
SLP23:
JNBSW1,SLP22
SLP3:
MOVR1,#T_Minute
LCALLSplit
LCALLDISP
JBSW3,SLP6
SLP4:
MOVA,T_Minute
ADDA,#1
DAA
MOVT_Minute,A
CJNEA,#60H,SLP5
MOVT_Minute,#0
SLP5:
MOVR6,#60
MOVR1,#T_Minute
LCALLSplit
LCALLDISP
DJNZR6,$-3
JNBSW3,SLP4
SLP6:
JBSW2,SLP9
SLP7:
MOVA,T_Hour
ADDA,#1
DAA
MOVT_Hour,A
CJNEA,#24H,SLP8
MOVT_Hour,#0
SLP8:
MOVR6,#60
MOVR1,#T_Minute
LCALLSplit
LCALLDISP
DJNZR6,$-3
JNBSW2,SLP7
SLP9:
JBSW1,SLP3
SLP10:
MOVR1,#T_Minute
LCALLSplit
LCALLDISP
JNBSW1,SLP10
MOVTControl,#0
JBSW3,SLP12
SLP11:
MOVA,TControl
INCA
MOVTControl,A
SLP12:
MOVA,TControl
ANLA,#0FH
MOV14H,A
MOVA,TControl
SWAPA
ANLA,#0FH
MOV15H,A
MOV16H,#10H
MOV17H,#10H
MOVR6,#50H
LCALLDISP
DJNZR6,$-3
JNBSW3,SLP11
JNBSW1,SLP15
SLP13:
JBSW2,SLP12
LCALLSTORE
SLP14:
MOVR6,#50H
LCALLDISP
DJNZR6,$-3
JNBSW2,SLP14
CLRF0
CLRB.1
RET
SLP15:
MOVR6,#50H
LCALLDISP
DJNZR6,$-3
JNBSW1,SLP15
CLRF0
CLRB.1
RET
Clear:
MOVR1,#20H
CLRP1:
CLRA
MOV@R1,A
INCR1
CJNER1,#70H,CLRP1
RET
STORE:
MOVR1,DAITI
CJNER1,#6AH,$+3
JCSTLP1
MOVR1,#20H
MOVDAITI,R1
STLP1:
MOV@R1,T_Hour
INCR1
MOV@R1,T_Minute
INCR1
MOV@R1,TControl
INCR1
MOVDAITI,R1
RET
Split:
MOVR0,#14H
MOVA,@R1
ANLA,#0FH
MOV@R0,A
INCR0
MOVA,@R1
SWAPA
ANLA,#0FH
MOV@R0,A
INCR0
INCR1
MOVA,@R1
ANLA,#0FH
MOV@R0,A
INCR0
MOVA,@R1
SWAPA
ANLA,#0FH
MOV@R0,A
RET
DISP:
PUSH00H
MOVR0,#14H
MOVR2,#11111110B
MOVDPTR,#WordTab
JNBF0,DISP0
DJNZR7,DISP1
CPLB.1
MOVR7,#60
SJMPDISP1
DISP0:
CLRB.1
DISP1:
ORLDIS,#00001111B
MOVR3,#20
DJNZR3,$
MOVA,@R0
MOVCA,@A+DPTR
NEXTB:
XRLA,#0xff
MOVP2,A
INCR0
JBB.1,HIDE
MOVA,R2
ANLDIS,A
XRLDIS,#0xff
HIDE:
MOVR3,#10
MOVR4,#255
DJNZR4,$
DJNZR3,$-4
MOVA,R2
RLA
MOVR2,A
JBACC.4,DISP1
DExit:
POP00H
RET
WordTab:
DB3FH,06H,5BH,4FH
DB66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH
DB39H,5EH,79H,71H
DB40H,38H
END
4.实物图如下图所示