资源描述
课程设计(论文)课程综合实践报告课题名称: 基于单片机技术数字钟电路的设计 系 部: 电子工程系 2010年 6 月 13 目录 第1节 摘要4第2节 引言5第3节 设计方案的选择与论证6第4节 基于单片机的数字钟的电路设计7 4.1 设计思想74.2 电路设计及其工作原理7 4.2.1控制部分:AT89C51单片机7 4.2.2数码管显示部分9 PROTEL原理图11 PCB图12第5节 软件设计13 5.1 程序原理概述13 5.2 总的设计思想13第6节 结束语14附录1、数字钟控制程序152、数字钟模块器件焊接清单183、USB下载AT89C51单片机的使用说明194、照片215、自绘封装6、原理图 第1节 摘要 近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。本文介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。在文章的最后,给出了采用中断方式实现的数字钟的源程序。 关键字:单片机,数字钟,数据缓冲区,中断,定时,消抖AbstractIn recent years, with computers in the in filtration and the development of large-scale integrated circuits. SCM application is steadily deepening, as it has strong function, small size, low power dissipation, low prices, reliable, easy to use features, it is particularly suited to and control of the system, increasingly widely used in automatic control, intelligent instruments, gauges, data acquisition, military products and household appliances, and other areas, is often microcontroller as a core component to use, In light of specific hardware architecture, and application-specific software features object combine to make perfect. In this paper, based on single-chip digital clock design, discussed in detail from the software realize the process, focusing on the clock adjust in the way: queries and disruption of comparison, then, on the digital clock made of the stability and accuracy related discussion. In the last article, give way using interrupted realize the source of the digital clock. Keywords: MCU, digital clock, data buffer, interruption, timing, elimination Buffeting 第2节 引 言 本系统采用单片机AT89C51控制,以AT89C51为核心,它完成整个系统的信息处理及协调功能,本次设计我们选用ATMEL公司的AT89C51芯片,其功能强大,兼容性好,还支持软件选择的空间和掉电两种节电方式。本设计的软件,硬件都采用模块化的设计方法,提高了设计的效率。 本次设计通过对一个实现定时、时钟显示等功能的时间系统的设计,其中结合了数据转换显示、数码管显示、动态扫描、单片机定时中断等技术。系统由AT89C51、LED数码管、按键、三极管、VD5026、VD5027、电阻、晶振等组成。能实现时钟时、分、秒的显示,也具有时间设置。文章后附有电路图、程序清单。 第3节 设计方案的选择与论证 该课题主要有两种方案:一种是用数字电路通过硬件实现,另一种是用单片机通过软件编程实现。在以上两种方案中:第一种是直接采用的是数字电路,但是在外围电路和控制比较麻烦,需要比较多的器件来控制;第二种是采用软件来实现一些特定功能,硬件电路只需要一些显示部件和控制部件,其他的都是由软件来实现。第一种一切都由硬件实现,几乎没有软件编程,但电路复杂、芯片多、后续制板及硬件调试麻烦而且成本高;第二种虽电路简单、芯片少、成本低,但编写程序相当复杂。经过一番利弊的权衡及对今后电子业发展趋势的考量,最后敲定用单片机方案实现。总的来看,单片机已成为工控领域、尖端武器、日常生活中最广泛使用的计算机,且将进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格方向发展,因此敲定用单片机加软编程方案符合今后电子业发展趋势;另外运用此方案既能将自己以前学过的模拟电路、数字电路、单片机、汇编语言、Protel99等知识结合实践进行一次全面的检测,又能为将来实际制作电路积累宝贵的经验。另外用单片机实现本设计也有两种可选的子方案:第一种,用软件编程实现设计中的钟控功能;另一种则选用单片机加时钟芯片实现钟控功能。在本次主要的是时间的设计,因此对时间的精度要求是比较高的,竟量是误差减少到最小值,但是为了更好的练习复习自己在以前所学习的编程能力,所以不采用单片机加时钟芯片的方案,直接用软件编程实现钟控功能。第4节 基于单片机的数字钟电路的设计4.1 设计思想单片机控制系统是整个控制系统的核心,它完成整个系统的信息处理及协调功能。本次我们选用ATMEL公司的AT89C51芯片;其功能强大,兼容性好。AT89C51是与8051兼容的CHMOS微控制器。与CHMOS工艺的8051一样,支持软件选择的空闲和掉电两种节电方式。 在AT89C51的P0.0P0.7是数码管的段选;P2.0P2.5是数码管的位选。P1.0调时接开关;单片机9脚接开关。4.2电路设计及其工作原理4.2.1控制部分:AT89C51单片机AT89C51单片机概述:AT89C51单片机是国Atmel公司生产的采用高性能的静态89C51设计,是一个低电压,高性能CHMOS 8位单片机,片内含4kbytes的可反复擦写的只读Flash程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。 AT89C51是一个功能强大的单片机,但它只有40个引脚,32个双向输入/输出(I/O)端口,其中P1是一个完整的8位双向I/O口,两个外中断口,两个16位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。此外,由于器件采用了动态设计,可提供很宽的操作频率范围(频率0HZ24MHZ)。即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。图4-1 AT89C51时钟电路连接在本设计中AT89C51的时钟电路采用内部时钟方式,此方式是在XTAL1和XTAL2两端跨接晶体或陶瓷谐振器。在本设计中XTAL1和XTAL2两端跨接12MHz晶体振荡器,其发出的脉冲直接送入内部时钟电路。本设计采用按键手动复位的按键电平复位。图4-2 89C2051外部复位电路设计AT89C51在本设计中的I/O口应用:AT89C51的P0.0P0.7控制244译码实现数码管段选;AT89C51的P2.0P2.5控制三极管电路实现数码管位选;AT89C51的P1.0连接按钮,用于输入校时。4.2.2数码管显示部分 本设计中所涉及数码管皆采用共阳数码管,显示电路为动态扫描式显示。图4-3数码管及显示电路选择数码管显示位选:AT89C51的P2.0P2.5输出控制数码管位选,在本次设计的电路中,因为是使用的是共阳数码管,因此由AT89C51的P2.0P2.5的输出控制公共端,使之输出相应的端口为低电平,控制数码管点亮。 74ls138芯片简介:图4-4 74LS138芯片图4-6 数码管位选原理数码管段选AT89C51的P2.0P2.5控制7448译码实现数码管段选,在本次设计的电路中,由于二级管使用的是共阳数码管,在输出的是要低电平。在设计的时候,怕在芯片输出的电流信号过大,因此在输出的时候加了限流电阻,为保护数码管,防止烧坏。 图4-7 数码管段选原理图4-12 电路图图4-13 PCB图第5节 软件设计 5.1程序原理概述 在程序设计这一环节,本次将其分为时钟中断程序、时钟显示程序、键盘程序、主程序、各程序衔接程序。在以下几节中将根据实际各个部分的编程及调试顺序,依次介绍各程序的设计思想和流程。5.2总的设计思想 在本次主要是使用的是数字闹钟,因此主要部分是数字钟的实现,因此要实现这样的功能必须要在硬件的电路上实现数字钟的实现,然后在此基础上逐步实现其他的功能, 数字电子钟的程序大概可以分为三个部分:时钟主程序、时钟显示程序、时钟中断程序。时钟主程就是对时钟的各个模块的实现。时钟显示程序是将秒显示用发光二极管显示,每一秒点亮一次;将分个位、分十位、时个位、时十位数据存储单元的计时数据通过设置段选和位选、由74LS47段选译码,最后显示在相应的数码管上。时钟中断程序则通过重设计时、1秒计时与时钟程序相结合实现秒个位、秒十位、分个位、分十位、时个位、时十位数据存储单元的数据按计时规则加1进位和清零,以配合时钟显示程序实现数字电子钟。在实现数字电子钟的基础上,逐一添加调试键盘程序,最后实现设计目标。键盘程序就是通过软件扫描各按键状态来实现各按钮的功能。第6节 结束语快到设计的时候,我非常的担心,因为此次课程设计它是一个综合能能力的考核,实际操作的部分我并不担心,可是一想到要在短短的一上午之内画好原理图及PCB,我便紧张,一是因为我画图比较慢,二是因为我没有办法提前画好原理图。为了更好地完成此次任务,我在周一便紧张的准备着画原理图的之前准备,每个元件在库内的查找名称,量它们的封装大小,紧张的到了周二的晚上,我到老乡那里画原理图,从六点一直画到九点,画了好多,改了好多,原理图工作我只完成了1/3.,和老乡说了一下,借他的电脑回宿舍继续画图,不知不觉之中,已到十一点四十,看着画好的原理图,我高兴的躺了,可是精神高度紧张,躺在床上,脑子还是在想着明天怎么画PCB图。周三上午,大家都在紧张的画着自己的图,之前做好准备的同学,继续画图与完善,之前没做准备的同学,从别人那复制过来,也在继续继续着自己的工作。在短短的一个上午的时间里,我独立的完成了自己的工作,我很开心。有一个用了别人之前准备的同学,笑着对我说,“其实你昨晚没有必要睡得那么晚的,我们不都是画好课吗?”我没有作答,是的,大家都在规定的时间里完成了自己的任务,但我相信,每个人此刻的心情绝对是不同的,其实,成功不只是结果,而是我们为之付出努力的过程。通过一周的紧张的学习与生活,我学到了很多,懂得了很多,只要敢想,只要肯动脑筋,有条件的,利用条件,没条件的就创造条件,那我们终究会得到应有的收获。第 20 页 共 20 页附录1数字钟控制程序:DATA_SEGSEGMENTDATA ;定义一个DATA段STACKSEGMENTIDATA ;定义一个堆栈段BIT_SEGSEGMENTBIT;定义一个位段bKeyBITP1.0;IdleConstEQU50RSEG STACKDS10H ;16个字节的堆栈RSEGDATA_SEG;开始DATA_SEG段buffer:DS6 ;6个字节的显示缓冲区ms50:DS1;50ms计数ms250:DS1;250ms计数sec:DS1 ;秒min:DS1 ;分hour:DS1 ;时ms50_1:DS1;存放多少个50ms,用于记录按键时间SetPos:DS1;设置位置SetPos1:DS1;需要屏蔽的数码管RSEGBIT_SEGbIdle:DBIT1;省电模式bTwinkle:DBIT1;当前设置位置闪烁CSEGAT0;相当于小汇编的ORGLJMPMAINCSEGAT000BH;定时器T0中断处理入口地址LJMPINT_Timer0CSEGAT001BH;定时器T1中断处理入口地址LJMPINT_Timer1CSEGAT0100HMAIN:MOV SP,#STACK-1;堆栈CLRbIdleCLRbTwinkleMOVms50,A;清零ms50MOVms250,AMOVhour,#12;设定初值: 12:59:50MOVmin,#59MOVsec,#50MOVTH0,#60;定时中断计数器初值MOVTL0,#176 ; 定时250nsMOVTMOD,#11H;定时器0,1:方式一MOVIE,#8AH;中断初始化,EA=1,ET0=1, ET1 = 1SETBTR0;开定时器T0MOVSetPos,#0FFH;MAIN1:ACALLAdjustBuffer;调整显示缓冲区MAIN2:ACALLKey;调用键扫描ACALLDisplayJNBF0,MAIN2CLRF0SJMPMAIN1;需要刷新显示时间;中断服务程序INT_Timer0:MOVTL0,#176+5MOVTH0,#60PUSH01HMOVR1,#ms50INCR1;50ms单元加1CJNER1,#5,ExitIntMOVR1,#0;恢复初值INCR1MOVA,SetPosCJNEA,#0FFH,INT_Timer0_1SJMPINT_Timer0_2INT_Timer0_1:CPLbTwinkleSJMPExitInt1INT_Timer0_2:INCR1CJNER1,#4,ExitIntMOVR1,#0;恢复初值INCR1INCR1;秒加1CJNER1,#60,ExitInt1MOVR1,#0INCR1INCR1;分加1CJNER1,#60,ExitInt1MOVR1,#0INCR1INCR1;时加1CJNER1,#24,ExitInt1MOVR1,#0ExitInt1:SETBF0ExitInt:POP01HRETI;中断服务程序INT_Timer1:MOVTL0,#176+5MOVTH0,#60INCms50_1RETIHexToBCD:MOVB,#10DIVABMOVR0,BINCR0MOVR0,AINCR0RETAdjustBuffer:MOVR0,#bufferMOVA,secACALLHexToBCDMOVA,minACALLHexToBCDMOVA,hourACALLHexToBCDRET;显示Display:JNBbIdle,Display3RET;省电模式Display3:PUSHBPUSHACCPUSHDPLPUSHDPHPUSH00HMOVR0,#bufferMOVB,#0FEHMOVDPTR,#SEG_TABDisplay1:MOVA,R0MOVCA,A+DPTR;取段码MOVP0,AMOVA,BJNBbTwinkle,Display4ORLA,SetPos1 Display4:MOVP2,A ;选种数码管CALLDelay1msMOVA,BRLAJNBACC.6,Display2MOVB,AINCR0SJMPDisplay1Display2:POP00HPOPDPHPOPDPLPOPACCPOPBRETSEG_TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;段码DB080H,90H,88H,83H,0C6H,0A1H,86H,8EH DB0FFH,0BFH ;延时1msDelay1ms:PUSHACCMOVA,#230DJNZACC,$MOVA,#230DJNZACC,$POPACCRET;设置功能SetFunTab:AJMPNoSet;不需要调整AJMPSetHour;调整小时AJMPSetMin;调整分钟AJMPSetSec;调整秒钟NoSet:CLRbTwinkleRET;不在设置状态SetHour:INChourMOVA,hourCJNEA,#24,SetHour1MOVhour,#0SetHour1:SJMPSetFun1SetMin:INCminMOVA,minCJNEA,#60,SetMin1MOVmin,#0SetMin1:SJMPSetFun1SetSec:INCsecMOVA,secCJNEA,#60,SetFun1MOVsec,#0SetFun1:SETBF0RET;调整闪烁位置SetPosTab:AJMPNoSetPosAJMPSetHourPosAJMPSetMinPosAJMPSetSecPosNoSetPos:MOVSetPos1,#0RETSetHourPos:MOVSetPos1,#30HRETSetMinPos:MOVSetPos1,#0CHRETSetSecPos:MOVSetPos1,#03HRETKey:ACALLDisplayJNBbKey,Key4JNBTR1,Key3CLRTR1SETBbKeyMOVA,ms50_1CJNEA,#10,$+3JNCKey1;调整时间SetFun:MOVA,SetPosINCARLAMOVDPTR,#SetFunTabJMPA+DPTRKey1:CJNEA,#IdleConst,$+3JNCKey2;进入设置状态SetPosFun:INCSetPosMOVA,SetPosCJNEA,#3,SetPosFun1MOVSetPos,#0FFH ;退出设置状态SetPosFun1:MOVA,SetPosINCARLAMOVDPTR,#SetPosTabJMPA+DPTRKey2:SETBbIdle ;进入省电模式MOVP2,#0FFHKey3:RETKey4:JNBTR1,Key5MOVA,ms50_1CJNEA,#IdleConst,$+3JNCKey2RETKey5:ACALLDisplayACALLDisplayACALLDisplayACALLDisplayJNBbKey,Key6SJMPKey3Key6:CLRbIdleMOVTH1,#60MOVTL1,#176SETBTR1MOVms50_1,#0RETEND附录2 NO.4 数字钟模块器件焊接清单品名封装规格数量器件号功能焊接注意电阻直插(RJ 1/4W)1006R1,R4,R7,R10,R14,R17负载电阻2001R13限流1K1R20限流2K6R2,R5,R8,R11,R15,R18偏置电阻5.1K6R3,R6,R9,R12,R16,R19偏置电阻排阻10K*81RN1上拉电阻注意方向电容直插(间距2.54)30pF2C9,C11与晶体构成一个振荡型网络,完成对振荡频率的控制功能0.1F2C7, C10耦合电路(隔直通交)电解超小型(间距2.54)100F/25v2C6,C8CP电容复位注意正负极二极管直插41481D2产生稳定的高电平信号注意正负极稳压管5.1V/1W1D1稳压注意正负极三极管85506Q1,Q2,Q3,Q4,Q5,Q6驱动迭位注意方向数码块共阳LG5641BH1U1(12P座)动态显示注意方向LG5621DH1U3(10P座)动态显示注意方向晶振11.0592M1X1保证输出电压的稳定和准确小方键2S1,S2S1上电复位;S2调时,分,秒插件电源座1JP2接插座,接+5V稳压电源白色3芯座1JP3接插座,接+5V稳压电源注意方向IC座DIP201U4:HD74LS244P驱动作用注意方向DIP401U5:P89C52X2BN驱动数码管点亮注意方向数字钟实训模块使用说明单片机采用AT89C51RC, 设计有1个2位和1个4位0.5英寸共阳数码管和时间设置按键。可开设数字钟等实训项目。使用说明:配套提供的实验源程序所能实现的功能。模块通电后,6位数码管显示12:59:50秒,正常运行,长按“S2”键(约3秒)松开,第一第二位数码管闪烁,此时轻按“S2”键,可设置“时” (023),再长按“S2”键(约3秒)松开,第三第四位数码管闪烁,此时轻按“S2”键,可设置“分” (059), 再长按“S2”键(约3秒)松开,第五第六位数码管闪烁,此时轻按“S2”键,可设置“秒” (059),如此循环。设置完成后再长按“S2”键(约3秒)松开即进入正常运行状态。附录3USB下载AT89C51单片机的使用说明将USB串口线的驱动安装请看“关于USB转串口线和编程器连接的问题.pdf”文件。会显示USB-SERIAL CH340(COM7),记住COM?的端口号,要在STC-ISP软件中进行设置。将USB转串口线与编程器连接好,将单片机放入编程器ZIP1锁紧座上(芯片缺口朝上),打开STC-ISP软件(STC_ISP_V480.exe),选择STC单片机型号,打开要下载的程序文件,设置COM号,点击下载按钮,当出现给MCU上电提示时,插上USB取电线,进行正常下载。
展开阅读全文