单片机课设电子闹钟设计.docx
《单片机课设电子闹钟设计.docx》由会员分享,可在线阅读,更多相关《单片机课设电子闹钟设计.docx(20页珍藏版)》请在冰豆网上搜索。
![单片机课设电子闹钟设计.docx](https://file1.bdocx.com/fileroot1/2023-1/7/6c372695-5d34-4b6c-8950-c6f7a22ecb72/6c372695-5d34-4b6c-8950-c6f7a22ecb721.gif)
单片机课设电子闹钟设计
一概述
1.1 课程设计的目的和意义
本文是利用AT89C51单片机结合七段显示器设计一个简易的定时闹铃时钟,可以放在计算机教室或是实验室中使用,由于用七段显示器显示数据,在夜晚或黑暗的场合中也可以使用。
可以设置现在的时间及显示闹铃设置时间,若时间到则发出一分钟闹铃响。
本课程设计主要用到AT89C51单片机定时器时间计时处理、按键扫描及七段显示器扫描的设计方法等等。
闹钟与我们的日常生活密不可分,通过闹钟的设计可以使我们进一步熟悉和掌握单片机的内部结构和工作原理,掌握单片机仿真软件Proteus的使用方法。
1.2课程设计所需元件
AT89C51×1,8255A×1,7SEG-MPX6-CC×1,AVX0402NPO33P×2,CRYSTAL×1,3WATT10K×3,BUTTON×3,10WATT1K×8,74LS00×1,SOUNDER×1,MINRES300R×1,SW-SPDT×1。
1.3设计任务
在熟练掌握单片机及其仿真系统的使用方法的基础上,综合应用单片机原理,微机原理,微机接口技术等专业知识,设计采用一个AT89C51单片机控制的定时闹钟。
二系统总体方案及硬件设计
2.1总体设计框图
该数字定时闹钟是由AT89C51单片机控制的,采用24小时制计时。
基于单片机的数字定时闹钟在设计时需要解决三个方面的主要问题:
一是LED显示模块的驱动和编程,二是有关单片机中定时器的使用,三是如何利用单片机的外中断实现时钟功能和运行模式的转化。
数字定时闹钟系统框图如图一所示,包括主电路和显示电路两大部分。
2.2主电路
主电路图如图三所示。
该电路使用P3端口的P3.0端口线实现整点报时功能;同样使用P3端口的P3.0端口实现闹钟功能。
整点报时信号用SOUNDER来模拟。
当整点时,P3.0端口所接的SOUNDER闹一分钟。
图二中的开关K4用于闹钟控制。
当K4=1时(开关处于ON的位置),打开闹钟,使之在预定时间起闹;当K4=0时(开关处于OFF的位置),则关闭闹钟。
另外,在闹钟响起时,K4也可以作为止闹开关使用,若不止闹,则闹一分钟。
闹钟信号也是用SOUNDER来模拟的。
按键Kl、K2、K3以及开关K5、K6的定义如表一所示。
表一按键功能
按键
键名
功能
K5
校时键
进入校时状态
K6
闹钟校时键
进入闹钟校时状态
K3
转换键
校分后切换到校时
校时后切换到时钟状态
闹钟校分后切换到校时
闹钟校时后切换到时钟状态
K1
+
校分或校时的时候使其加1递增
K2
-
校分或校时的时候使其减1递减
本设计采用的AT89C51单片机是ATMEL89系列单片机。
ATMEL89系列单片机是ATMEL公司的8位Flash单片机系列。
89系列单片机是以8031为核心构成的,它和8051系列单片机是兼容的,其最大特点是片内含有Flash存储器。
其功能特点为:
(1)由于内部含有Flash存储器,因此在系统的开发过程中可以十分容易地进行程序的修改,大大地缩短了系统的开发周期。
同时,在系统工作过程中,能有效地保存一些数据信息,即使外界电源损坏也不影响信息的保存。
(2)89系列单片机的端子和8051系列是一样的,因此,当89系列单片机取代8051系列单片机时,可以直接进行代换。
(3)89系列单片机采用静态时钟方式,可以节省电能。
这对于降低便携式产品的功耗十分有用。
(4)一般的OTP产品,一旦错误编程就成了废品。
而89系列单片机内部采用了Flash存储器。
所以,错误编程之后仍可以重新编程,直到正确为止,因此不存在废品。
(5)用89系列单片机设计的系统,可以反复进行系统试验。
每次试验可以编入不同的程序,这样可以保证用户的系统设计到最优。
而且随着用户的需要和发展,还可以进行修改,使系统能不断追随用户的最新要求。
AT89C51单片机的结构与8051系列基本相近,片内有128B的RAM,有6个中断源,有片内振荡器,只是片内有一个4KB的Flash存储器,输出端子和指令系统都与8051系列兼容。
其引脚功能见上图
AT89C51是用静态逻辑来设计的,其工作频率可下降到0Hz,并提供两种可用软件来选择的省电方式,即空闲方式和掉电方式。
在空闲方式中,CPU停止工作,而RAM、定时器计数器、串行口和中断系统都继续工作。
在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,故只保存片内RAM中的内容,直到下一次硬单片机选择AT89C51,时钟系统通过将XTAL1与XTAL2分别接1u的电容,并将一晶振与两电容分别并联最后引出接地。
复位电路通过引脚RST接出,此系统采用上电加按钮电平复位方式。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效将EA接高电平作为掉电保护,P0、P1、P2、P3分别与外围器件相连。
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
三软件系统设计
3.1软件设计说明
数字定时闹钟的秒信号是利用单片机定时器T0产生的。
由于开发机的晶振频率为6MHz,使得T0的最大定时时间远远小于1秒,因此,在设计时采用了硬件计数与软件计数相结合的方式。
即通过T0产生一定的定时时间,然后再利用软件进行计数,从而产生1秒钟的时间信号。
在设计中,定时器T0采用了中断方式。
当定时时间到时,单片机产生中断,在T0的中断服务程序中实现时、分、秒的累加。
并且,该中断的优先级别高于其它中断,因此,保证了定时闹钟走时准确。
在设计中,利用外部中断0和外部中断1分别作为校时和闹钟校时按键的触发输入。
当需要校时时,拨动K5或K6开关,便产生外部中断,进入相应的中断服务程序。
在外部中断0和外部中断1的中断服务程序中,都只有一条“表示有按键”的标志位置1的指令,然后在主程序中用查询标志位的方式判断是否有键按下。
若查得标志位为1则进入校时子程序进行校时处理;若为0则照常进行时间显示。
当拨动K5开关时,进入校时状态,用户可以方便地校准时间。
当拨动K6开关时,便进入闹钟校时状态,这时,可以根据需要设置起闹时间。
在闹钟校时期间,时钟继续计数,即闹钟校时不影响时钟走时。
3.2定时闹钟程序流程图
合理的软件结构是设计出一个性能优良的单片机应用系统的基础,根据系统的定义,可以把整个工作分解为若干个相对独立的操作,采用模块化的设计方法,它具有便于设计和调试、容易完成、可供多个程序共享等优点。
程序设计中重新设置初值时一开始设为#0ACH,后来发现数字定时闹钟走时有点慢,所以改为#0ACH。
设计写显示数据段码程序时,向28H送的值一开始定为#1,发现LED有闪烁现象,所以后来定为#2。
8255A的控制字为80H。
数字定时闹钟的主程序流程图如图六所示,校时子程序如图七所示。
编写程序如下:
ORG0000H
LJMPMAIN
ORG0003H
SETBPSW.5
NOP;外部中断INT0,校时
RETI
ORG000BH;定时器T0,定时0.1秒中断
LJMPCLOCK
ORG0013H;外部中断INT1,闹钟校时
SETB7FH
RETI
ORG0030H
MAIN:
MOVSP,#60H
MOVTMOD,#01H;设置T0为定时器,方式1工作
MOVIE,#87H
SETBPT0;T0优先中断
MOVTL0,#0B7H;T0设置初值
MOVTH0,#3CH
MOV20H,#00H;清内存单元
MOV21H,#00H
MOV22H,#00H
MOV23H,#00H
MOV50H,#06H
MOV51H,#28H
MOV52H,#00H
MOVDPTR,#0300H;8255控制字
MOVA,#80H
MOVX@DPTR,A
CLRPSW.5;清标志位
CLR7FH
SETBTR0
SETBIT0
SETBIT1
CLRP3.0;闹钟关
SS:
LCALLCUTIN0
LCALLSSCAN
JNBPSW.5,LK
LCALLKEY0
LK:
JNB7FH,SS
LCALLKEY1
SJMPSS
CUTIN0:
PUSHPSW;显示单元译码
PUSHAcc
MOV25H,R0
MOVR0,#79H
MOVA,22H;秒单元
ACALLBCD
MOVA,21H;分单元
ACALLBCD
MOVA,20H;时单元
ACALLBCD
MOVR0,25H
POPAcc
POPPSW
RET
CUTIN1:
PUSHPSW;校时或闹钟小时显示单元译码
PUSHAcc
MOV25H,R0
MOVR0,#79H
MOVA,42H;秒单元
ACALLBCD
MOVA,41H;分单元
ACALLBCD
MOVA,40H;时单元
ACALLBCD
MOVR0,25H
POPAcc
POPPSW
RET
BCD:
MOVB,#0AH;十进制调整,转BCD码
DIVAB
MOV@R0,B
INCR0
MOV@R0,A
INCR0
RET
CLOCK:
JNBPSW.5,ZC;定时器T0中断
LJMPFH
ZC:
MOVTL0,#0B7H;重新设置初值
MOVTH0,#0ACH
PUSHPSW
PUSHAcc
INC23H
MOVA,23H
CJNEA,#10,RET0;一秒钟到了吗
MOV23H,#00H
INC22H
MOVA,22H
CJNEA,#60,RET0;一分钟到了吗
MOV22H,#00H
CLRP3.0
INC21H
MOVA,21H
CJNEA,#60,RET0;一小时到了吗
MOV21H,#00H
INC20H
MOVA,20H
CJNEA,#24,RET0;24小时到吗
MOV20H,#00H
RET0:
MOVA,21H
CJNEA,51H,B0;起闹时间,分相等吗
MOVA,20H
CJNEA,50H,B0;时相等吗
SETBP3.0;闹钟开
B0:
POPAcc
POPPSW
FH:
RETI
SSCAN:
MOVR1,#79H;显示子程序,显存起始地址
MOVR3,#06H;六位LED数码显示
MOV26H,#0FEH
DISP:
MOVA,#0FFH
MOVDPTR,#0100H
MOVX@DPTR,A
MOVDPTR,#0000H
MOVA,@R1
LCALLTABLE
MOVX@DPTR,A;写显示数据段码
MOVDPTR,#0100H
MOVA,26H
MOVX@DPTR,A
MOV28H,#2
D1MS:
MOV27H,#250
DJNZ27H,$
DJNZ28H,D1MS
RLA
MOV26H,A
INCR1
DJNZR3,DISP
MOVX@DPTR,A
RET
TABLE:
ADDA,#1
MOVCA,@A+PC
RET
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
KEY:
MOV42H,#00H;键盘扫描子程序
A0:
ACALLDELAY
MOVP1,#0FFH
JBP1.3,JJ1
INC41H
MOVR2,41H
CJNER2,#3CH,A1
MOV41H,#00H
A1:
ACALLDELAY
JNBP1.3,A1
SJMPA0
JJ1:
JBP1.4,ZHJ
DEC41H
MOVR2,41H
CJNER2,#0FFH,A2
MOV41H,#3BH
A2:
ACALLDELAY
JNBP1.4,A2
SJMPA0
ZHJ:
JBP1.5,A0
ACALLDELAY
JNBP1.5,ZHJ
SSR:
ACALLSSCAN
JBP1.3,JJ2
INC40H
MOVR2,40H
CJNER2,#18H,A4
MOV40H,#00H
A4:
ACALLDELAY
JNBP1.3,A4
SJMPSSR
JJ2:
JBP1.4,ZHH2
DEC40H
MOVR2,40H
CJNER2,#0FFH,A5
MOV40H,#17H
A5:
ACALLDELAY
JNBP1.4,A5
SJMPSSR
ZHH2:
JBP1.5,SSR
ZHH3:
ACALLDELAY
JNBP1.5,ZHH3
ACALLSSCAN
RET
KEY0:
ACALLSSCAN
JBP3.2,JZD
MOV41H,21H;校时
MOV40H,20H
CLRTR0
ACALLKEY
MOV22H,42H
MOV21H,41H
MOV20H,40H
MOVTH0,#0BCH
JZD:
CLRPSW.5
SETBTR0
RET
KEY1:
MOV41H,51H;闹钟校时
MOV40H,50H
ACALLDELAY
JBP3.3,JZD2
LCALLKEY
MOV51H,41H
MOV50H,40H
JZD2:
CLR7FH
RET
DELAY:
PUSHAcc;延时子程序
LCALLCUTIN1
LCALLSSCAN
POPAcc
RET
END
四Proteus和keil软件仿真
4.1注意事项
在Proteus7.4ISIS中进行放置元件、设置电路参数、连接各元件,经几次修改布线错误,画出数字定时闹钟总电路,并进行ERC检查。
然后加载用keil编译生成的A.HEX进行功能测试,仿真。
在仿真时注意不能用那种没有仿真功能的元器件。
比如SOUNDER,要用可以驱动发声的那种,而不能随便选用。
要注意本设计用的是7段共阴极LED数码管的驱动芯片。
在放置六位数码管LED时要选择7SEG-MPX6-CC(共阳极)而不是7SEG-MPX6-CA(共阴极)。
Keil软件是一款程序编辑软件,是目前最流行开发MCS-51系列单片机的软件,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统,本实验中需要将Proteus和keil联调,在keil上输入程序,编译并运行正确,然后将其下载到Proteus中,配合其电路图进行仿真。
4.2仿真步骤
(1)首先在Proteus上连接实验所需的电路,如下图:
(2)在keil上输入程序,并运行
程序正确后。
,下载到Proteus中,然后电路就可以运行了。
(3)单机Proteus中的
键,电路便开始工作了,如下图:
接下来是如何调节时间和闹钟。
(4)下面得三个开关K4、K5、K6打到左边电源边,点击开始按钮仿真,闹钟从零走时
K5打到右边接地边,点K1校分加1分,点K2校分减一分。
单击K3重新开始计时,使K3转为校时,每点K1一次计时加1小时,点K2一次计时减一小时
点K3回到时钟状态,从秒开始计时
K5打到左边电源边,K6打到右边接地边,点K1闹钟校分加1,点K2闹钟校分减1。
点K3转到闹钟校时,点K1闹钟时加1,点K2闹钟时减1
K4打到右边接地边,停止闹钟
五课程设计体会
时光飞逝,一转眼,一个学期又进尾声了,本学期的单片机综合课程设计也在终于完成。
俗话说“好的开始是成功的一半”。
说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。
其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。
最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
虽然这次的课程设计算起来在实验室的时间只有十六个小时,不过因为我们都有自己的电脑,所以在宿舍里做实验的时间一定不止这短短的十六个小时。
软件的编程也要我们不断的调试,由于没有方便的电路板,只能用仿真软件去仿真,当看到自己的课设有了结果的时候,我差点从床上跳起来,太兴奋了,虽然只是六个不断变换的数字,可是它背后包含的许多东西,不是几句话就能说清楚的。
当然,这其中也有很多问题,第一、由于对课本理论的不熟悉导致编程出现错误。
第二,是在学习态度上,这次课设是对我的学习态度的一次检验。
对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。
我们这次实习所遇到的多半问题多数都是由于我们不够严谨。
第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。
通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。
在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。
还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。
并且我们熟练掌握了有关器件的性能及测试方法。
再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。
课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。
参考文献
[1]冯育长.单片机系统设计与实例分析.西安电子科技大学出版社,2007,5
[2]何立民.单片机应用技术选编8.北京:
北京航空航天大学出版社,2000,10
[3]余发山.单片机原理及应用技术.中国矿业大学出版社,2003,21-30
[4]张迎新编著.单片微型计算机原理应用及接口技术.北京:
国防工业出版社,1993.67-89
[5]杨刚,周群.电子系统设计与实践.电子工业出版社.2004:
18-23341-347118-122
[6]涂时亮,张友德.单片微机控制技术.清华大学出版社.1994:
86-87146-147