您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 单片机汇编程序电子闹钟
电子闹钟课程设计摘要:本课程设计主要是通过单片机系统,综合运用定时器、中断、数码显示等知识设计一个可定时的电子钟。它包括系统总体方案及硬件设计,软件设计,Proteus软件仿真等部分。硬件设计的主要任务是根据总体设计要求,以及在所选机型的基础上,确定系统扩展所要用的存储器,I/O电路及有关外围电路等然后设计出系统的电路原理图。合理的软件结构是设计出一个性能优良的单片机应用性系统软件的基础,因此必须充分重视。编写完程序后在用Proteus软件仿真检查设计是否合理。一.课程设计的概况通过对51单片机的扩展,接键盘,显示器等相应的外围器件。在LED显示器中分成静态显示和动态显示两类,在本设计中主要用了它的动态显示功能,动态显示利用了人视觉的短暂停留,在数据的传输中是一个一个传输的,且先传输低位。键盘是由若干个按键组成的开关矩阵,是一种廉价的输入设备。键盘通常包括有数字键,字母键以及一些功能键。操作人员可以通过对键盘向计算机输入数据,地址,指令或其他的控制命令,实现简单的人机对话。这里采用非编码式键盘。通过51单片机的P1口扩展出独立连接式键盘。外围扩展复位,时钟电路,利用软件源程序代码实现相应的功能。二.课程设计实现的功能:1.能显示时时-分分-秒秒。2.能够设定定时时间,修改定时时间。3.定时时间到能发出警报声或者启动继电器,从而控制电器的起停。三.设计方案使用是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。本系统采用单片机AT89C51作为本设计的核心元件,利用7段共阴LED作为显示器件。接入共阴LED显示器,可显示时,分钟,秒,单片机外围接有定时报警系统,定时时间到,扬声器发出报警声,提示预先设定时间电器的起停时间到,从而控制电器的起停。报警器数码显示时钟电路AT89C51键盘电路电路由下列部分组成:时钟电路、复位电路、控制电路、LED显示,报警电路,芯片选用AT89C51单片机。系统框图:四.硬件设计1.单片机AT89C51AT89C51是一个低电压,高性能CMOS型8位单片机,片内含4KB的可反复擦写的Flash只读程序存储器(ROM)和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。引脚使用说明:I/O端口的编程实际上就是根据应用电路的具体功能和要求对I/O寄存器进行编程。具体步骤如下:l)根据实际电路的要求,选择要使用哪些I/O端口。2)初始化端口的数据输出寄存器,应避免端口作为输出时的开始阶段出现不确定状态,影响外围电路正常工作。3)根据外围电路功能,确定FO端口的方向,初始化端口的数据方向寄存器。对于用作输入的端口可以不考虑方向初始化,因为FO的复位缺省值为输入。4)用作输入的FO管脚,如需上拉,再通过输入上拉使能寄存器为其内部配置上拉电阻。5)最后对I/O端口进行输出(写数据输出寄存器)和输入(读端口)编程,完成对外围电路的相应功能。几个特殊管脚:XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。2.时钟电路单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。本系统中AT89C51单片机采用内部时钟方式。最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHz~12MHz之间。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在20pF~100pF之间取值。时钟电路图如下:3.数码管显示电路单片机中通常使用7段LED,LED是发光二极管显示器的缩写。LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,颜色鲜艳,配置灵活,与单片机接口方便而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。LED显示器有多种形式,在单片机系统中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管的连接形式不同,LED有共阴极和共阳极两种,如下图所示引脚和其内部结构:五.软件设计1.设计流程图判断闹钟时间到否程序初始化调用显示程序开始P1.1是否按下?调用时间设定程序P1.2是否按下?Y调用闹钟时间设定程序NNY2.程序模块ORG0000HLJMPMAINORG000BHLJMPTIME//主程序部分ORG0100HMAIN:MOVSP,#50HMOV20H,#00H;秒钟BINMOV21H,#00H;分钟BINMOV22H,#00H;小时BINMOV23H,#01HMOV24H,#01HMOV25H,#00HMOV30H,#00HMOV31H,#00HMOV32H,#00HMOV33H,#00HMOV34H,#00HMOV35H,#00HMOV36H,#01HMOV37H,#00HMOV38H,#01HMOV39H,#00HMOVTMOD,#01H;16位计数器MOVTH0,#03CH;赋计数初值MOVTL0,#0B0HMOVIE,#10000111BSETBTR0;T0启动计数MOVR2,#14HMOVP2,#0FFHLOOP:LCALLTIMEPROLCALLDISPLAY1JBP1.1,M1LCALLSETTIME;调用设定时间程序LJMPLOOPM1:JBP1.2,M2LCALLSETATIME;调用设定时间程序LJMPLOOPM2:JBP1.4,M4LCALLLOOKATIME;调用设定闹钟时间程序M4:LJMPLOOPDELAY:MOVR4,#030H;延时时间DL00:MOVR5,#0FFHDL11:MOVR6,#9HDL12:DJNZR6,DL12DJNZR5,DL11DJNZR4,DL00RET//设定时间程序SETTIME:L0:LCALLDISPLAY1;调用时间允许程序MM1:JBP1.2,L1MOVC,P1.2JCMM1LCALLDELAY1;调用延时JCMM1MSTOP1:MOVC,P1.2JNCMSTOP1;判断P1.2是否释放?释放则继续LCALLDELAY1;调用延时MOVC,P1.2JNCMSTOP1INC22H;小时增加1MOVA,22HCJNEA,#18H,GO12;判断小时是否到24时?未到继续循环MOV22H,#00H;小时复位MOV34H,#00HMOV35H,#00HLJMPL0L1:JBP1.3,L2MOVC,P1.3JCL1LCALLDELAY1;延时JCL1MSTOP2:MOVC,P1.3JNCMSTOP2;判断P1.3是否释放?释放则继续LCALLDELAY1;调用延时MOVC,P1.3JNCMSTOP2INC21H;分钟增加一MOVA,21HCJNEA,#3CH,GO11MOV21H,#00H;分钟复位MOV32H,#00HMOV33H,#00HLJMPL0GO11:MOVB,#0AH;将A中的内容分成高低两部分DIVABMOV32H,BMOV33H,ALJMPL0GO12:MOVB,#0AHDIVABMOV34H,BMOV35H,ALJMPL0L2:JBP1.4,L0MOVC,P1.4JCL2LCALLDELAY1;调用延时MOVC,P1.4JCL2STOP1:MOVC,P1.4;判断按键P1.4是否释放?JNCSTOP1LCALLDELAY1;调用延时//设置闹钟时间SETATIME:LCALLDISPLAY2;调用时间运行N0:LCALLDISPLAY2MM2:JBP1.3,N1;判断P1.3是否按下?MOVC,P1.3JCMM2LCALLDELAY1JCMM2MSTOP3:MOVC,P1.3;判断P1.3是否释放?JNCMSTOP3LCALLDELAY1MOVC,P1.3JNCMSTOP3INC24H;设定小时增加1MOVA,24HCJNEA,#24,GO22MOV24H,#00H;时钟复位MOV38H,#00HMOV39H,#00HLJMPN0N1:JBP1.1,N2;判断P1.1是否按下?MOVC,P1.1JCN1LCALLDELAY1JCN1MSTOP4:MOVC,P1.1;判断P1.1是否释放?JNCMSTOP4LCALLDELAY1MOVC,P1.1JNCMSTOP4INC23H;设定闹钟分钟增加1MOVA,23HCJNEA,#60,GO21;判断A是否到60分?MOV23H,#00H;分钟复位MOV36H,#00HMOV37H,#00HLJMPN0GO21:MOVB,#0AH;将A中的内容分成高低两部分DIVABMOV36H,BMOV37H,ALJMPN0GO22:MOVB,#0AHDIVABMOV38H,BMOV39H,ALJMPN0N2:JBP1.4,N0;判断P1.4是否按下?MOVC,P1.4JCN2LCALLDELAY1MOVC,P1.4JCN2STOP2:MOVC,P1.4;判断P1.4是否释放?JNCSTOP2LCALLDELAY1MOVC,P1.4JNCSTOP2LJMPLOOPTIMEPRO:MOVA,21HMOVB,23HCJNEA,B,BK;判断分钟是否运行到设定的闹钟的分钟?MOVA,22HMOVB,24HCJNEA,B,BK;判断时钟是否运行到设定的闹钟的时钟?SETB25H.0MOVC,25H.0JCXXXX:LCALLTIMEOUT;调用时间闹钟响应程序BK:RETTIMEOUT:X1:LCALLBZ;调用喇叭响应程序LCALLDISPLAY2CLR25H.0JBP1.4,X1;判断P1.4是否按下?LCALLDELAYCLR25H.0LJMPDISPLAY1BZ:CLRP3.7;喇叭响应程序MOVR7,#250;响应延时时间T2:MOVR6,#124T3:DJNZR6,T3DJNZR7,T2SETBP3.7RETLOOKATIME:LCALLDISPLAY2;调用时间运行程序MM:JBP1.4,LOOKATIME;判断按键P1.4是否按下MOVC,P1.4JCMMLCALLDELAY1MOVC,P1.4JCMMSTOP3:MOVC,P1.4JNCSTOP3LCALLDELAY1MOVC,P1.4JNCSTOP3LJMPLOOPDELAY1:MOVR4,#14H;时间延时DL001:MOVR5,#0FFHDL111:DJNZR5,DL111DJNZR4,DL001RET//延时时间DL1:MOVR7,#02H;延时时间DL:MOVR6,#0200HDL6:DJNZR6,$DJNZR7,DLRETDSEG1:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FHEND六.系统仿真1.操作过程首先将几个按键从上往下为k1,k2,k3,k4。k1与p1.4相连,k2与p1.3相连,k3与p1.3相连,k4与p1.1相连。当需要设定当前时间时,按一下k4键,进入时间设定状态,按一下k2,分加1;按一下k3,小时加1。如此反复来设定当前时间。调好时间后按k1退出当前时间设定状态。当要设定定时时间时,按下k3,进入定时时间设定状态,按一下k2,小时加1;按一下k4,分钟加1。如此反复来设定要设定的定时时间。设好后,按下k1退出定时时间设定状态。2.系统总体电路图XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3
本文标题:单片机汇编程序电子闹钟
链接地址:https://www.777doc.com/doc-7025974 .html