单片机电子钟课程设计---数字电子钟.doc_第1页
单片机电子钟课程设计---数字电子钟.doc_第2页
单片机电子钟课程设计---数字电子钟.doc_第3页
单片机电子钟课程设计---数字电子钟.doc_第4页
单片机电子钟课程设计---数字电子钟.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机技术课程设计说明书 数字电子钟 摘 要:at89c52 atmel公司生产的低电压,高性能cmos 8位单片机片内含8k bytes的可反复擦写的只读程序存储器(perom)和256 bytes 。的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,与标准mcs-51指令系统及8052 产品引脚兼容,片内置通用8位中央处理器(cpu )和flash由存储单元,功能强大at89c52单片适用于许多较为复杂控制应用场合。主要性能参数:与mcs-51产品指令和引脚完全兼容。8字节可重擦写flash闪速存储器1000 次擦写周期全静态操作:0hz-24mhz三级加密程序存储器256x8字节内部ram32个可编程i/0口线3个16 位定时计数器8个中断源可编程串行uart通道低功耗空闲和掉电模式电子钟是一种用电子电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。电子钟从原理上讲是一种典型的电子电路,其中包括了组合逻辑电路和时序电路。目前,电子钟的功能越来越强,并且有多种专门的大规模集成电路可供选择。从有利于学习的角度考虑,这里主要介绍以中小规模集成电路设计电子钟的方法。经过了电子电路设计这门课程的系统学习,特别经过了关于组合逻辑电路与时序逻辑电路部分的学习,我们已经具备了设计小规模集成电路的能力,借由本次设计的机会,充分将所学的知识运用到实际中去。本次课程设计要求设计一个电子钟,基本要求为电子钟的时间周期为24小时,电子钟显示时、分、秒,电子钟的时间基准一秒对应现实生活中的时钟的一秒。因此,研究电子钟,有着非常现实的意义。目 录 摘要2 第一章 系统的组成及工作原理4 1.1 设计要求41.2 系统的组成41.3 系统的工作原理4第二章 系统硬件电路方案设计72.1 电子时钟方案72.2 数码显示方案7 2.3 单元电路设计8 2.2.1 晶体振荡电路8 2.2.2 复位电路8 2.2.3 显示电路9 2.2.4 键盘电路9第三章 系统的软件设计103.1 程序流程图103.2 源程序11第四章 系统调试174.1 软件调试174.2 硬件调试17第五章 设计体会和结论18 参考文献19 致谢20 附录一:电路原理图21附录二:pcb图22附录三:数码管元件清单23 第一章 系统组成及工作原理1.1 系统设计要求设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“p.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。1.2 系统的组成数字钟实际上是一个对标准频率(1hz)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1mhz时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟. (1) 晶体振荡器 晶体振荡器给数字钟提供一个频率稳定准确的11.0592mhz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器。(2) 复位电路 时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器,时个位和时十位电路构成,秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,时个位和时十位计数器为24进制计数器。(3) 数码管 数码管通常有发光二极管(led)数码管和液晶(lcd)数码管,本设计提供的为led数码管。(4) 键盘 键盘是控制和修改时钟的重要输入模块,通过键盘可以修改时间,修改年月日,修改闹钟时间,控制显示等。1.3 系统工作原理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)这是由于上拉的缘故。p3口第二功能口。 rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。 psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。 ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出。数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale第二章 系统硬件电路方案设计2.1 电子时钟方案电子时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用dallas公司的专用时钟芯片ds12887a。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设6个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.2 数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的i/o口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了i/o口,降低了能耗。从节省i/o口和降低能耗出发,本设计采用方案二。2.3 单元电路设计2.3.1 晶体振荡电路时钟电路原理图。如图2.1所示,在at89s51芯片内部有一个高增益反相放大器,其输入端为芯片引脚xtal1,输出端为引脚xtal2。而在芯片内部,xtal1和xtal2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经 过触发器进行二分频之后,才成为单片机的时钟脉冲信号。 图2.1 晶体振荡电路2.3.2 复位电路单片机复位的条件是:必须使rst/vpd 或rst引脚加上持续两个机器周期(即24个振荡周期)的高电平。例如,若时钟频率为12 mhz,每机器周期为1s,则只需2s以上时间的高电平,在rst引脚出现高电平后的第二个机器周期执行复位。单片机常见的复位如图2.2所示。电路为上电复位电路,它是利用电容充电来实现的。在接电瞬间,reset端的电位与vcc相同,随着充电电流的减少,reset的电位逐渐下降。只要保证reset为高电平的时间大于两个机器周期,便能正常复位。 该电路除具有上电复位功能外,若要复位,只需按图中的reset键,此时电源vcc经电阻r1、r2分压,在reset端产生一个复位高电平。 图2.2 复位电路2.3.3 显示电路系统采用动态显示方式,用p0口来控制led数码管的段控线,而用p2口来控制其位控线。如图2.3所示。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。 图2.3 数码管电路2.3.4 键盘电路键盘的操作,无论是按键或键盘都是利用机械触点的合、断作用。一个电压信号通过机械触点的闭合、断开过程。由于机械触点的弹性作用,在闭合及断开瞬间均有抖动过程,会出现一系列负脉冲。抖动时间的长短,与开关的机械特性有关,一般为510ms。 图2.4 独立式键盘 第三章 系统软件设计3.1程序流程图数字电子钟主要包括初始化程序,中断服务程序和键处理程序。程序流程图如图3.1,图3.2,图3.3,图3.4所示。电子时钟初始化定时器设置上电默认显示p.键盘扫描及处理yesyesnoyesnono定时器1中断服务程序中断是否达100次(1s)秒是否满60秒加1分是否满60分清0,小时加1小时是否满24小时清0reti秒清0,分加1yes图3.1电子时钟初始化定时器0中断服务程序重设定时器值关闭所有位,更新段码选通下一位数码管增量位索引reti图3.3定时1服务中断程序图3.2 定时0中断服务程序 图3.4 键处理程序3.2源程序;伪指令定义区 seclequ30hsechequ31hminutelequ32hminutehequ33hhourlequ34hhourhequ35hs2bzbit2fh.0s3bzbit2fh.1s4bzbit2fh.2s5bzbit2fh.3s6bzbit2fh.4;*;起始程序org0000hstart:ljmpmainorg000bhljmptc0;*;监控程序org0030h main:movsp,#7fh;堆栈初始化movpsw,#00h;当前通用寄存器组初始化movr0,#20h;movr2,#96;循环次数,用户ram单元个数cl:movr0,#00h;清零incr0;djnzr2,cl;用户ram ,20h-7fh清零movtmod,#01h;定时器0方式1工作movth0,#3chmovtl0,#0b0h ;定时器初始化 定时50mssetbeasetbet0mov40h, #20tcc:movdptr,#disbh ;系统初始化后p.字符代码首地址movr0,#78h ;显示子程序入口首地址movr5,#8h ;8位数码管,故需要循环8次clradisptsf:pushacc ;保护amovca,a+dptr movr0,a ;将p.字符代码送入显示缓冲区popacc ;恢复ainca incr0 ;为送下一个字符代码序号做准备djnzr5,disptsf ml0:lcalldisp ;调用显示子程序lcallkeykey0:jb20h.0,s2functionjb20h.1,s3functionjb20h.2,s4functionjb20h.3,s5functionljmpml0;*;键功能程序;s2function:cpls2bz;1代表开始jbs2bz,starttime1clrtr0ljmpup1starttime1:setbtr0 ;开始计时up1:lcallupdatelcalldisp ljmpml0s3function:jbtr0,ml0;判断时钟停止后进行调整movr0,#sech;入口为秒位ssss: lcalldaad1;秒加1mova,r2;判断秒是否计满到60xrla,#60hjnztttt;没满则转移更新显缓lcallclr0;满则清零tttt:lcallupdateljmpml0s4function:jbtr0,ml0 ;判断时钟停止后进行调整movr0,#minuteh ;入口为分位ljmpsssss5function:jbtr0,ml0 ;判断时钟停止后进行调整movr0,#hourh ;入口为时位ffff: lcalldaad1mova,r2xrla,#24h ;判断时是否计满到24jnztttt ;没满则转移更新显缓lcallclr0 ;满则清零;*;中断服务程序;tc0:pushpswpushaccsetbrs1setbrs0 movth0,#3ch ;定时器初值重装 定时50msmovtl0,#0b0hmova,40hdecamov40h,a ;jnzret0 ;不为0则转移mov40h, #20 ;为零则1s到,秒加一movr0,#sech ;秒位送加一子程序入口lcalldaad1 ;mova,r2 ;xrla,#60h ;判断秒位是否到60jnzret0 ;没到则更新显缓lcallclr0 ;到了则清零显缓movr0,#minuteh ;同时分为也该加一lcalldaad1mova,r2xrla,#60h ;判断分位是否到60jnzret0 ;没到则更新显缓lcallclr0 ;到了则清零显缓movr0,#hourh ;同时时为也该加一lcalldaad1mova,r2xrla,#24h ;判断分位是否到24jnzret0 ;没到则更新显缓lcallclr0 ;到了则清零显缓ret0:lcallupdate ;更新显缓 popaccpop pswreti;*;常数表格区;系统初始化后1-8字符代码表disbh: db 10h,10h,10h,10h,10h,10h,10h,11h ;提示符“p.”字符序号;显示字符段选码表(共阳极代码) tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h ;0-8 db 90h,88h,83h,0c6h,0a1h,86h,8eh,0ffh,0ch ,0bfh ;9,a,b,c,d,e,f,灭,p. ,-;*;加1子程序 由r0进入 daad1:mova,r0decr0 ;指向个位swapa ;个位互换到第四位orla,r0 ;合字adda,#01hdaa ;加一并调整movr2,a ;保存数值到r2anla,#0fh ;屏蔽高4位movr0,a ;此时r0指向个位显缓 incr0 ;指向十位mova, r2 ;将数值重新取出anla,#0f0h ;屏蔽低4位swapa ;压缩为bcd码movr0,a ;此时r0指向十位显缓ret;清零子程序 由r0进入clr0:clra movr0,a ;此时r0指向十位显缓清零decr0movr0,a ;此时r0指向个位显缓清零ret;更新显示缓冲区子程序update:mov78h, seclmov79h, sechmov7ah,#12hmov7bh,minutelmov7ch,minutehmov7dh,#12hmov7eh,hourlmov7fh,hourhret;键扫描子程序key: lcall keychuli;调p1口数据处理子程序 jz exit1;没有键按下,转返回 lcall disp;调显示子程序去抖动 lcall disp lcall keychuli;调p1口数据处理子程序 jz exit1;没有键按下,转返回 mov b,20h ;保存取反后的键值keysf: lcall keychuli;调p1口数据处理子程序 jz key1;键释放,转恢复键值 lcall disp;调显示子程序延时 ljmp keysf;等待释放key1:mov 20h,b;键值送20h保存exit1:ret;p1口数据处理子程序keychuli:push psw;保护现场clrrs1;改变当前寄存器组为组1setbrs0movp1,#0ffh;先向p1口写1mov a,p1;读p1口数据cpla;p1口数据取反mov20h,a ;保存取反后的键值clrrs1;恢复当前寄存器组为组0clr rs0 poppsw ;恢复现场 ret ;子程序返回;数码管显示子程序disp入口:7fh,7eh,7dh,7ch,7bh,7ah,79h,78h(led7-led0)disp:pushdphpushdplpushaccpushpswclrrs1setbrs0;改变当前通用寄存器组为1movr1,#78h;显示缓冲存取单元首地址movr2,#0feh;从右至左显示(11111110b)movr5,#8h;循环次数,即为数码管的个数disp1:mova,r1;movdptr,#tab;movc a,a+dptr;movp0,a;送段控movp2,r2;送位控lcalldl;延时1msmov a,r2;送位控码rla;获得新的位控码movr2,a;保存新的位控码incr1;获得新的现实缓冲单元地址djnzr5,disp1;循环没有结束则继续disp2:poppsw ;恢复当前通用寄存器组序号popaccpopdplpopdph ;恢复现场ret;*;延时1ms子程序(晶振频率12mhz)dl dl:movr7, #02h dl1:movr6, #0ffh dl2:djnzr6, dl2djnzr7, dl1retend第四章 系统调试4.1软件调试步骤1、打开软件后,在project菜单中选择new project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。2、为项目文件选择一个目标器件,即选择8051的类型。在data base 列表框中选择“atml 89c52”,确定。3、上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文件/保存”。4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。5、开始编译,对项目文件进行编译。若没有错误后进行硬件调试4.2硬件调试 按照此次课程设计的要求调试过程如下:按键key0,key1,key2,key3分别对应led流水灯,数码管,音乐三个功能。1、led流水灯测试通过按按键key0,观察到led流水灯显示,并循环2次;与相应的程序代码相比较,结果正确。 2、数码管测试 通过按按键key2,观察到数码管从“1000” 开始计时,依次显示“1001” ,“1002” ,“1003” ;与相应的程序代码相比较,结果正确。 3、温度传感器测试通过连接短路帽2,观察到数码管显示温度,比较几次;与相应的程序代码相比较,联系18b20附近温度.结果。第五章 设计体会和结论在硬件电路制作阶段,我到图书馆、网上查阅各种资料,在电脑上使用 protel99se 进行以及相关的绘图软件,使自己在理论分析设计和动手操作能 力等各方面得到了极大提高。我通过对设计任务书的具体要求分析思考,再加 上以前在学校进行的各种相关实践和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论