单片机课程设计定时闹钟的设计.docx
《单片机课程设计定时闹钟的设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计定时闹钟的设计.docx(22页珍藏版)》请在冰豆网上搜索。
![单片机课程设计定时闹钟的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/9/e916b18b-400f-40f1-b30c-e0c0391a4a27/e916b18b-400f-40f1-b30c-e0c0391a4a271.gif)
单片机课程设计定时闹钟的设计
提供全套毕业论文,各专业都有
河南城建学院
电子技术基础课程设计报告
定时闹钟
姓名:
连波
学号:
094412130
专业班级:
0944121
指导老师:
张洛花
所在院系:
电气与信息工程学院
2014年12月24日
摘要
本设计是一个定时闹钟,它仅使用单片的40引脚单片机完成闹钟的全部功能。
设计目的是为了学习和巩固单片机知识,使对已学过的基础知识能有更深入的理解,学会独立思考、独立思考、独立工作,以及提高对所学应用基本理论分析和解决实际问题的能力。
本文设计的定时闹钟采用80c51芯片,用汇编语言进行编程,时、分、秒用6位LED数码管显示。
在电路中通过四个按键S1、S2、S3和S4来进行定时和调时,定时时间到通过喇叭发出报警声。
设计系统的主要功能
·能显示时时-分分-秒秒。
· 能够设置定时时间、修改定时时间。
· 到定时时间能发出报警
1系统总体方案及硬件设计
1.1 系统总体方案
1)由于要显示数字时间,所以需要6位数码管。
2)时间的定时用时钟电路,修改时间和定时用手动按键控制,报警声通过喇叭发出。
3)80c51单片机加上外围器件(2个3位共阳数码管,8个限流电阻和一个蜂鸣器)和应用程序(ISIS7Professional软件和KEIL编译软件),构成相应的应用系统。
1.2系统设计方框图
1.3硬件设计
1.3.1芯片:
80c51
80c51芯片内不包含一个8位中央处理器cpu,4kb程序存储器ROM,128B随机存取存储器,RAM,4个8位并行I/O接口,1个全双工串行通信接口,2个16位定时器、计数器级及21个特殊功能寄存器。
由先进CMOS工艺制造并带有非易失性Flash程序存储器全部支持12时钟和6时钟操作P89C51X2和P89C52X2/54X2/58X2分别包含128字节和256字节RAM32条I/O口线3个16位定时/计数器6输入4优先级嵌套中断结构1个串行I/O口可用于多机通信I/O扩展或全双工UART以及片内振荡器和时钟电路。
此外,由于器件采用了静态设计,可提供很宽的操作频率范围,频率可降至0。
可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结CPU但RAM定时器,串口和中断系统仍然工作掉电模式保存RAM的内容但是冻结振荡器导致所有其它的片内功能停止工作。
由于设计是静态的时钟可停止而不会丢失用户数据运行可从时钟停止处恢复。
.1.3.2蜂鸣器
由P3.7口控制蜂鸣器,使其定时时间到能发出报警声。
1.3.3时钟电路
单片机的时钟产生方法有两种:
内部时钟方式和外部时钟方式。
本系统中单片机采用内部时钟方式。
最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHz~12MHz之间。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在20pF~100pF之间取值。
单片机的时钟电路:
如图所示
限流电阻:
8个10k电阻
控制按键:
本系统要进行时间的调整和定时,因此用4个手动按键对其进行控制。
1.3.4显示器模块的设计
利用2个七段数码管6个选位引脚连接C51单片机P2.5–P2.0接口,其他8个引脚分别通过限流电阻与C51单片机的P0.0-P0.7和共阳极数码管连接。
数码管:
单片机中通常使用7段LED,LED是发光二极管显示器的缩写。
LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,颜色鲜艳,配置灵活,与单片机接口方便而得到广泛应用。
LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。
如图所示
2软件设计
2.1划分模块
根据设计要求,定时闹钟程序可分为以下几个模块:
1)显示时间的设置;
2)闹钟时间的设置:
4)定时时间的响应。
3.2程序流程图
程序流程图
2.3汇编程序
ORG0000H
LJMPSTART
ORG000BH
LJMPTIME
;;;;;;;;初始化;;;;;;;;
START:
MOVSP,#50H
MOV20H,#00H;定义秒
MOV21H,#00H;定义分
MOV22H,#00H;定义时
MOV23H,#01H;定义闹钟分钟
MOV24H,#01H;定义闹钟小时
MOV25H,#00H
MOV26H,#01H
MOV30H,#00H;BCDSECOND
MOV31H,#00H
MOV32H,#00H;BCDMINUTE
MOV33H,#00H
MOV34H,#00H;BCDHOUR
MOV35H,#00H
MOV36H,#01H
MOV37H,#00H
MOV38H,#01H
MOV39H,#00H
MOV50H,#00H;按键次数
MOVTMOD,#01H;16位计数器
MOVTH0,#03CH;赋初值
MOVTL0,#0B0H
MOVIE,#87H;中断允许
SETBTR0;启动T0
MOVR2,#14H
MOVP2,#0FFH
CLRP3.7
;;;;;;;;主程序;;;;;;;;;
MAIN:
LCALLTIMEPRO;调用闹钟判断
GB:
LCALLDISPLAY1;调用时间显示
JBP1.3,M1;P1.3=1时转移S4没有按下
LCALLSETTIME;调用SETTIME调时子程序
LJMPMAIN
M1:
JBP1.2,M2;P1g.2=1时转移 S3
LCALLSETATIME;调用SETATIME子程序
LJMPMAIN
M2:
JBP1.0,M4;P1.0=1时转移S1
LCALLLOOKATIME;调用LOOKATIME显示闹钟子程序
M4:
LJMPMAIN
;;;;;;;;延时子程序;;;;;;
DELAY:
MOVR4,#030H
DL00:
MOVR5,#0FFH
DL11:
MOVR6,#9H
DL12:
DJNZR6,DL12
DJNZR5,DL11
DJNZR4,DL00
RET
;;;;;;;时间调整;;;;;;;
SETTIME:
;设置时间
L0:
LCALLDISPLAY1
MM1:
JBP1.3,L1;P1.3=1时转移
MOVC,P1.3
JCMM1
LCALLDELAY1;延时
JCMM1
MSTOP1:
MOVC,P1.3;P1.3为0时转移
JNCMSTOP1
LCALLDELAY1;延时
MOVA,50H
INC50H
CJNEA,#00H,HJ1
LJMPL0
HJ1:
MOVC,P1.3
JNCMSTOP1
INC22H;小时自加一
MOVA,22H
CJNEA,#18H,GO12;小时计数循环
MOV22H,#00H;复位
MOV34H,#00H
MOV35H,#00H
LJMPL0
L1:
JBP1.1,L2;P1.1=1时转移
MOVC,P1.1
JCL1
LCALLDELAY1;延时
JCL1
MSTOP2:
MOVC,P1.1;P1.1=0时转移
JNCMSTOP2
LCALLDELAY1;延时
MOVC,P1.1
JNCMSTOP2
INC21H;分钟加一
MOVA,21H
CJNEA,#3CH,GO11;分钟计数循环
MOV21H,#00H;复位
MOV32H,#00H
MOV33H,#00H
LJMPL0
GO11:
MOVB,#0AH
DIVAB
MOV32H,B;将A的低4位存入32单元
MOV33H,A;将A的高4位存入33单元
LJMPL0
GO12:
MOVB,#0AH
DIVAB
MOV34H,B;将A的低4位存入34单元
MOV35H,A;将A的高4位存入35单元
LJMPL0
L2:
JBP1.0,L0;P1.0=1时转移
MOVC,P1.0
JCL2
LCALLDELAY1;延时
MOVC,P1.0
JCL2
STOP1:
MOVC,P1.0;P1.0=0时转移
JNCSTOP1
LCALLDELAY1;延时
MOVC,P1.0
JNCSTOP1
MOV50H,#00H
LJMPMAIN
;;;;;;设置闹钟;;;;;;;;
SETATIME:
LCALLDISPLAY2;调用DISPLAY2显示闹钟
N0:
LCALLDISPLAY2
MM2:
JBP1.2,N1;P1.2=1时转移
MOVC,P1.2
JCMM2
LCALLDELAY1;延时
JCMM2
MSTOP3:
MOVC,P1.2;P1.2=0时转移
JNCMSTOP3
LCALLDELAY1;延时
MOVA,50H
INC50H
CJNEA,#00H,HJ2
LJMPN0
HJ2:
MOVC,P1.2
JNCMSTOP3
INC24H;小时加一
MOVA,24H
CJNEA,#24,GO22;小时计数循环
MOV24H,#00H;复位
MOV38H,#00H
MOV39H,#00H
LJMPN0
N1:
JBP1.1,N2;P1.1=1时转移
MOVC,P1.1
JCN1
LCALLDELAY1;延时
JCN1
MSTOP4:
MOVC,P1.1;P1.1=0时转移
JNCMSTOP4
LCALLDELAY1;延时
MOVC,P1.1
JNCMSTOP4
INC23H;分钟加一
MOVA,23H
CJNEA,#60,GO21;分钟计数循环
MOV23H,#00H;复位
MOV36H,#00H
MOV37H,#00H
LJMPN0
GO21:
MOVB,#0AH
DIVAB
MOV36H,B;将A的低4位存入36单元
MOV37H,A;将A的高4位存入37单元
LJMPN0
GO22:
MOVB,#0AH
DIVAB
MOV38H,B;将A的低4位存入38单元
MOV39H,A;将A的高4位存入39单元
LJMPN0
N2:
JBP1.0,N0;P1.0=1时转移
MOVC,P1.0
JCN2
LCALLDELAY1;延时
MOVC,P1.0
JCN2
STOP2:
MOVC,P1.0
JNCSTOP2
LCALLDELAY1
MOVC,P1.0
JNCSTOP2
MOV50H,#00H
LJMPMAIN
TIMEPRO:
MOVA,21H
MOVB,23H
CJNEA,B,BK;判断定时闹钟的分钟
MOVA,22H
MOVB,24H
CJNEA,B,BK;判断定时闹钟的小时
SETB25H.0
MOVC,25H.0
LCALLTIMEOUT;调用TIMEOUT
BK:
RET
TIMEOUT:
X1:
LCALLBZ;调用喇叭响应程序
LCALLDISPLAY2;延时
CLR25H.0;调用喇叭响应程序结束
JBP1.0,X1;P1.0=1时转移
LCALLDELAY;延时
CLR25H.0
LJMPDISPLAY1
BZ:
CLRP3.7
MOVR7,#250;喇叭响应时间
T2:
MOVR6,#124
T3:
DJNZR6,T3
DJNZR7,T2
SETBP3.7
RET
LOOKATIME:
LCALLDISPLAY2
MM:
JNBP1.0,LOOKATIME
LCALLDELAY1
LJMPMAIN
DELAY1:
MOVR4,#14H;时间延时
DL001:
MOVR5,#0FFH
DL111:
DJNZR5,DL111
DJNZR4,DL001
RET
;***********定时**************
TIME:
PUSHACC;保护现场
PUSHPSW
MOVTH0,#03CH;初值
MOVTL0,#0B0H
DJNZR2,RET0
MOVR2,#14H
MOVA,20H
CLRC
INCA;秒自加一
CJNEA,#3CH,GO1;秒计数循环
MOV20H,#0;复位
MOV30H,#0
MOV31H,#0
MOVA,21H
INCA;分钟自加一
CJNEA,#3CH,GO2;分钟计数循环
MOV21H,#0H;复位
MOV32H,#0
MOV33H,#0
MOVA,22H
INCA;小时自加一
CJNEA,#18H,GO3;小时计数循环
MOV22H,#00H;复位
MOV34H,#0
MOV35H,#0
AJMPRET0
GO1:
MOV20H,A
MOVB,#0AH
DIVAB
MOV31H,A;将A的低4位存入31单元
MOV30H,B;将A的高4位存入30单元
AJMPRET0
GO2:
MOV21H,A
MOVB,#0AH
DIVAB
MOV33H,A;将A的低4位存入33单元
MOV32H,B;将A的高4位存入32单元
AJMPRET0
GO3:
MOV22H,A
MOVB,#0AH
DIVAB
MOV35H,A;将A的低4位存入35单元
MOV34H,B;将A的高4位存入34单元
AJMPRET0
RET0:
POPPSW;恢复现场
POPACC
RETI
;;;******显示子程序**********
DISPLAY1:
MOVR0,#30H
MOVR3,#0FEH
MOVA,R3
PLAY1:
MOVP2,A
MOVA,@R0;取要显示的数据
MOVDPTR,#DSEG1;指向字形段码首地址
MOVCA,@A+DPTR
CPLA;查表取字形段码
MOVP0,A;指向P0口
LCALLDL1
MOVP2,#0FFH
MOVA,R3;判断是否显示到最低位
RLA;左移一位
JNBACC.6,LD1
INCR0;缓冲器地址加一
MOVR3,A
LJMPPLAY1
LD1:
RET
DISPLAY2:
PUSHACC;保护现场
PUSHPSW
MOVR0,#36H
MOVR3,#0FBH
MOVA,R3
PLAY2:
MOVP2,A
MOVA,@R0;取要显示的数据
MOVDPTR,#DSEG1;指向字形段码首地址
MOVCA,@A+DPTR
CPLA;查表取字形段码
MOVP0,A;指向P0口
LCALLDL1;调用DL1
MOVP2,#0FFH
MOVA,R3;判断是否显示到最低位
RLA;左移一位
JNBACC.6,LD2
INCR0;缓冲器地址加一
MOVR3,A
LJMPPLAY2;调用PLAY2
LD2:
POPPSW
POPACC;恢复现场
RET
;;;;;;;DELAY;;;;;;;;
DL1:
MOVR7,#20H
DL:
MOVR6,#20H
DL6:
DJNZR6,$
DJNZR7,DL
RET
DSEG1:
DB3FH,06H,5BH,4FH,66H;七段码表
DB6DH,7DH,07H,7FH,6FH
END
3protell软件仿真:
通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置。
定时时间到能发出报警声,使用KEIL软件编辑程序,生成HEX文件,然后用protel进行仿真,系统运行初始状态:
按下S1键显示闹钟,松开后显示时间;按下S4键进入时间修改模式,再按S4键时间的时加1,按S2分加1,调整结束后按下S1恢复正常显示;按下S3键进入闹钟修改模式,再按S3键闹钟的时加1,按S2分加1,调整结束后按下S1恢复正常显示。
4课程设计体会:
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在,作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。
通过本次单片机原理及应用课程设计使我充分认认到了课程设计的理要性和必要性,本次设计使我对已学过的基础知识有了更深入的理解,学会了独立思考、独立工作以及对应用所学基本理论分析和解决实际问题的能力有了很大的提高。
另外,本次设计使我的实际操作技能得到了训练,同时也进一步培养了我严谨的科学作风。
回顾起此次单片机课程设计,从选题到定稿,从理论到实践,在整整两个星期的日子里,可以说得是苦多于甜,但是从中却学到很多很多的的东西,不但巩固了以前所学过的知识,而且对单片机原理课外知识也的到了拓展。
做的过程中,开始的确遇到了不少困难的问题,比如说芯片管脚不熟悉怎么放置,对单片机汇编语言掌握得不好等等,同时在这过程中也发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过单片机课程设计之后,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我们还学会了如何去培养创新精神和严谨的科学作风,从而不断地战胜自己,超越自己。
更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
参考文献:
[1].何宏.单片机原理及接口技术教程.北京:
国防工业出版社,2008.4
[2].李广弟.单片机基础.北京:
北京航空航天大学出版社,1992
[3].何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994
[4].张毅刚.单片机原理及接口技术.哈尔滨:
哈尔滨工业大学出版社,1990
附1:
元器件清单
元器件名称
型号
数量
7段4位共阴数码管
7SEG-MPX4-CC
2
51单片机
AT89C51
1
按钮
BUTTON
4
电容
CAP
2
晶振
CRYSTAL
1
继电器
G2R-14-DC5
1
PNP三极管
PNP
1
电阻
RES
4
排阻
RESPACK-8
1
蜂鸣器
SPEAKER
1
电源
POWER
4
接地
GROUND
4
发光二极管
LED
1