课程设计---智能电子数字时钟的设计.doc_第1页
课程设计---智能电子数字时钟的设计.doc_第2页
课程设计---智能电子数字时钟的设计.doc_第3页
课程设计---智能电子数字时钟的设计.doc_第4页
课程设计---智能电子数字时钟的设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

数字电子时钟设计一、 摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域。单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。本次做的数字钟是以单片机(at89c51)为核心,结合相关的元器件(共阴极led数码显示器、数码管驱动器74ls164等),再配以相应的软件,是它具有星期,时,分,秒显示的功能,并且星期,时,分,秒还可以调整。通过电子数字钟的设计进一步了解和掌握单片机原理与使用方法。关键词:数字电子钟 单片机at89c51 共阴极led数码显示器 74ls164驱动芯片 二、 系统总体方案设计本次设计课题为智能电子数字时钟的设计,采用at89c51单片机内部定时器实现数字时钟的定时功能,采用单片机的串口和74ls164扩展并口实现led静态驱动。电子时钟系统的整体框图如图2-1所示。单片机at89c51电源按键输入74ls164驱动显 示 电 路晶振电路报时电路复位电路图2-1 电子时钟的整体框图2.1主控芯片at89c51简介at89c51是一个低功耗,高性能cmos 8位单片机,片内含4k bytes isp(in-system programmable)的可反复擦写1000次的flash只读程序存储器,器件采用atmel公司的高密度、非易失性存储技术制造,兼容标准mcs-51指令系统及80c51引脚结构,芯片内集成了通用8位中央处理器和isp flash存储单元,功能强大的微型计算机的at89c51可为许多嵌入式控制应用系统提供高性价比的解决方案。其引脚图如图2-2所示。图2-2 at89c51引脚图2.2.电子时钟功能及工作原理2.2.1电子时钟功能及方案介绍电子时钟设置6个按键通过程序控制来完成电子时钟的启、停及时间调整。调整时钟时只设计了星期加键、时加键、分加键以及秒加键,没有设置减秒减分减时键,可通过循环调节得到正确的调节数值。s/t键控制电子时钟的启、停; h键调整时;m键调整分; s键调整秒;w键设置星期; res键复位键。可调整运行的电子时钟具有三种工作状态:“p.”状态、运行状态、调整状态。(1)“p.”状态,依靠上电或按复位键res进入。在此状态下,按w、h、m、s键均无效,按s/h键有效,进入运行状态;(2)运行状态,按奇数次s/h键进入。在此状态下,按w、h、m、s键均无效,只有按s/h键有效,按下s/h键后,退出运行状态,进入调整状态;(3)调整状态,按偶数次s/h键进入。在此状态下,按s/h、w、h、m、s键均有效,如按下s/h键,则退出调整状态,进入运行状态;按下w、h、m、s键,则分别对星期、时、分、秒加1,调整结束后必须按s/h键,即可退出调整状态,进入运行状态;基本功能要求:“p.”稳定地显示在led显示器的最左端数码管(led6)上,无s/h键按下(在“p.”状态下,按下w、h、m、s键无效),则不进入电子时钟的运行状态,继续显示“p.”。按下s/h 键后,电子时钟以起始时间:0星期00时00分00秒开始运行。再次按下s/h 键后,电子时钟退出运行状态,进入调整状态,利用w、h、m、s键把电子时钟的显示时间修改为当前实时时间,时间修改正确后可再次按下s/h键,电子时钟则退出调整状态,进入运行状态。计时方案:利用at89c51单片机内部的定时/计数器进行中断定时,配合软件延时实现星期、时、分、秒的计时。键盘/显示方案:at89c51的p3.0、p3.1口外接一个74ls164扩展芯片,用74ls164芯片的八个端口作led的段码输出口。采用静态显示方式,通过对led八个端口输入的不同的二进制数据使得它的时间显示也不同,从而可以得到我们所要的时间显示。对于四十个管脚的at89c51来说,led八个段选管脚太多,于是我选用74ls164芯片来扩展主芯片的管脚。74ls164是数据移位寄存器,具有串行输入,并行输出的特点。p0.0p0.4端外接五个按键s/h、w、h、m、s,s/h键控制电子时钟的启、停,w、h、m、s键分别调整星期、时、分、秒。rst口接一个复位键res,当发现系统运行不正常,进入死循环,显示数值严重失真时,按复位键,其内部功能为使单片机复位,强行使单片机从头开始运行,跳出出错区。2.2.2时钟计时的基本方法利用at89c51单片机的可编程定时/计数器、中断系统来实现时钟计数。(1)计数初值计算:把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而计数可用软件方法实现。假设使用t/c0,方式1,50ms定时,fosc=12mhz。则初值x满足(216-x)1/12mhz12s =50000sx=1553600111100101100003cb0h,则th0=3ch,tl0=0boh。(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒),就让秒计数单元加1,当秒计数达到60时,就自动返回到0,重新秒计数;(4)从秒到分,从分到时和从时到星期的计时是通过累加和数值比较实现。2.2.3电子时钟的时间显示电子时钟的时钟时间在7个数码管上进行显示,因此,在内部ram中设置显示缓冲区共7个单元,数据存放在30h-37h内存单元中。其中30h、31h单元存放秒数据,32h-33h单元存放分数据,34h-35h单元存放时数据,36h单元存放星期数据。如表2-1所示。表2-1数码管的数据存储表led7led6led5led4led3led2led136h35h34h33h32h31h30h星期时十位时个位分十位分个位秒十位秒个位三、 系统硬件设计本系统共有两部分构成,其中硬件部分由电源输入部分、晶振部分、键盘输入部分、复位部分、显示部分、定时部分组成,软件部分对应的由主程序、初始化程序、led显示程序、键盘扫描程序、键功能程序、定时中断程序等组成。单片机上位复电后,从头开始执行程序,时钟频率由外部晶振频率提供。单片机控制整个装置的运行,对时钟芯片初始化;读时钟芯片;判断时钟芯片是否更新;对驱动芯片74ls164操作及数码管的显示;键盘扫描等。3.1电子时钟电路原理图电子时钟的电路图由电源输入电路、晶振电路、键盘输入电路、复位电路等电路组成。本系统采用at89c51单片机作为主控制芯片,led显示采用了静态扫描方式实现,采用共阴极数码管,由芯片74ls164进行驱动。为了提高计时精度,所采用的晶振频率为12mhz。电子时钟原理图 (见附录)。3.2电源输入的电路原理图电子时钟主控制部分电源需要用5v直流电源供电,把频率为50hz、有效值为220v过电源变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,所以需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需通过低通滤波电路滤波,使输出电压平滑。稳压电路的功能是使输出直流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流电压。本电路使用集成稳压芯片7805解决了电源稳压问题,如图3-1所示。图 3-1 电源输入的电路原理图3.3晶振电路晶振电路如图3-2所示。xtal1和xtal2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,xtal2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。图3-2 晶振电路的电路图3.4 整点报时电路3.4.1报时电路的原理(1)生活中我们常常到各种各样的报警声,例如“嘀、嘀、”就是常见的一种声音报警声,但对于这种报警声,嘀0.2秒钟,然后断0.2秒钟,如此循环下去,假设嘀声的频率为1khz,则报警声时序图如图3-3所示:1khz波形电平信号图3-3报警声时序图(2)由于要产生上面的信号,把上面的信号分成两部分,一部分为1khz方波,占用时间为0.2秒;另一部分为电平,也是占用0.2秒;因此,我们利用单片机的定时/计数器t0作为定时,可以定时0.2秒;同时,也要用单片机产生1khz的方波,对于1khz的方波信号周期为1ms,高电平占用0.5ms,低电平占用0.5ms,因此也采用定时器t0来完成0.5ms的定时;最后,可以选定定时/计数器t0的定时时间为0.5ms,而要定时0.2秒则是0.5ms的400倍,也就是说以0.5ms定时400次就达到0.2秒的定时时间了。3.4.2电路的接法lm386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。第一级为差分放大电路,使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益;第二级为共射放大电路,以增大放大倍数;第三级可以消除交越失真。(1)把“单片机系统”区域中的p3.4端口用导线连接到“音频放大模块lm386”区域中的spk in端口上。(2)在“音频放大模块”区域中的spk out端口上接上一个8欧或者是16欧的喇叭; 图 3-4 报时电路原理图3.5 键盘输入电路键盘可分为两类:非编码键盘和编码键盘;常见的非编码键盘有两种结构:独立式键盘和矩阵式键盘。本设计采用独立式键盘作为电子时钟的按键。单片机p1.0-p1.4接按键s/h、w、h、m、s,ret接按键res。按键电路如图3-5所示。图3-5 按键电路3.6显示电路clr9clk8a1b2qa3qb4qc5qd6qe10qf11qg12qh13u7显示驱动芯片的引脚功能如图3-6所示。该芯片具有串行输入,并行输出的特点,当单片机驱动的数码管较多时,用此芯片可以省去单片机很多引脚。sn74ls164图3-6 显示驱动芯片3.7复位电路电路如图3-6所示,当复位键s1被按下时,电容c1开始充电,按键放开时,c1开始放电,电流经电阻r3流向接地端,此时单片机复位端rst电平被拉高,当放电时间常数c1r3 2tcy(tcy时为机器周期)即给单机机持续两个机器周期的高电平时单片机被复位。图3-7 复位电路四、 系统软件设计4.1电子时钟程序流程框图4.1.1主程序流程框图开始内存单元清零t0,t1为16位计数器允许t0中断调时程序p1.0=0?调用显示子程序ny主程序功能主要是初始化、正常显示时间和判断功能转换键。初始化包括数据堆栈区、定时/计数器的初始化、at89c51芯片的初始化及时间、显示数据的初始化。定时/计数器的初始化:包括对tmod、tcon以及根据定时时间对时间初值的设置。显示时间调用显示子程序。当p1.0端口的s/h键按下时,转入调时功能。主程序流程图如图4-1所示。图4-1 主程序流程框图4.1.2键扫子程序流程框图键盘扫描程序是通过cpu来对外围键盘电路进行查询。该程序能够解决的问题有:(1)是否有键按下;(2)若有键按下,判断是哪一个键并确定其键值或键号;(3)去抖动:一个电压信号是通过机械触点的闭合、断开过程来实现信号传递的。抖动时间一般为510ms。按键的稳定闭合期为几百毫秒到几秒钟时间。为了保证cpu对按键闭合仅做一次键输入处理,必须去除抖动影响,通常硬件或软件延时10ms处理。返回yn开始保护现场保存键值有抖动?执行相应的功能yn键按下?去抖之后再次进行查询。然后通过按键的键号执行相应的功能。键扫子程序流程框图图4-2所示。 图4-2 键扫子程序流程框图4.1.3定时中断程序流程框图定时中断是电子时钟的核心。定时/计数器t0和t1的工作方式设置为:(1)t0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的t0,最大计数值为fosc/24,所以t1工作在定时状态下,每定时1秒中到,就停止t0的计数,而从t0的计数单元中读取计数的数值,然后进行数据处理。(2)t1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。时钟的最小计时单位是秒,60s进位为1min,60min进位为1h,24h进位为1天。t0用于产生最小单位1s,定时时间为50ms,中断累计20次即为1s。计数单元中每逢60进位。定时中断程序流程如图4-3所示。保护现场开始1s到?秒单元加160s到?秒单元清0,分单元加160min到?分单元清0,时单元加124h到?时单元清0,星期加1星期7到?星期单元清0现场恢复中断返回yyyyynnnnn图4-3 中断服务程序流程框图4.1.4调时程序流程框图进行时间调整时,正在被调整的时间的间隔符以闪烁的形式表现。调整时间的方法是:按下s/h键,进入调时状态,按下w键,星期单元加1,加至8时变为1(7过后即显示1,不显示8);按下h键,时单元加1,在加至24时变为00(23过后即显示0,不显示24);按下m键,分单元加1,加至60时变为00(59过后即显示00,不显示60);按下s键,秒单元加1,秒如分一样,加至60时变为00,在调节好时间后,按下s/h键,保存操作者对时钟时间的修改并退出调时模式进入正常运行状态,时间正常显示。调时程序流程图如图4-4所示。开始s/h键按下进入调整状态h键按下w键按下m键按下s键按下时单元加1星期单元加1秒单元加1分单元加1s/h键再次按下退出调整状态,进入运行状态图4-4 加1子程序流程框图4.2 程序清单本设计的程序主要采用大学所学的知识,参考课本单片机原理及应用一书,编写而成。汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机的所有硬件特性并能够直接控制硬件的唯一语言。程序当中包含p点显示、键扫子程序、键功能子程序、显示程序、中断定时程序等一些子程序,并且在程序中添加了适当的标注。具体程序如下:org 0000hajmp mainorg 000bhljmp intt0org 0030hmain: mov sp, #60h ;确立堆栈区 mov psw, #00h ; mov r0, #20h ;ram区首地址 mov r7, #5fh ;ram区单元个数ql: mov r0, #00h ;ram清零 inc r0 djnz r7, ql mov ip, #02h ;ip初始化,优先定时器0 mov ie, #82h ;ie初始化, mov tmod, #01h ;定时器0方式1工作lcall pp ;调p.子程序next: lcall key ;按键检测子程序 jb acc.0, runf ;s/h键按下运行 lcall disp ;调用显示子程序 sjmp nextrunf: lcall time ;开电子时钟jk: lcall disp ;调用显示子程序 lcall key ;按键检测子程序 jz jk lcall ankey lcall disp ;调用显示子程序sjmp jkend; p点显示 ;pp: mov r0, #30h ;p点编码送寄存器 mov r7, #07hppp: mov r0, #10 inc r0 djnz r7, ppp ret; 键扫子程序 ;key: lcall keys ;调键值处理子程序jz exit ;没有键按下转到返回 lcall disp ;调显示去抖动lcall keys jz exitmov b, 20h ;保存键值keysf: lcall keys ;调键值处理子程序jz keyy ;键释放,转到恢复键值lcall disp ;调显示子程序延时ajmp keysf ;等到键释keyy: mov a, b ;键值送20h单元保存exit: ret ;返回keys: mov p1, #0ffh ;先向p1口写1mov a, p1 ;p1口值送累加器acpl a ;a值取反anl a, #0fh ;保存p1口的低4位mov 20h, a ;a值送20h保存ret; 键功能子程序 ;ankey: clr ea ;关中断check: jb tr0, yxz ;判断是否运行k0: cjne a, #01h, k1 ajmp run ;转运行k1: cjne a, #02h, k2 ajmp key1 ;转星期调整k2: cjne a, #04h, k3 ajmp key2 ;转时调整k3: cjne a, #08h, k4 ajmp key3 ;转分调整k4: cjne a, #10h, out ajmp key3 ;转秒调整yxz: jb acc.0, stop ajmp out key1: mov r0, #46h ;星期调整 lcall add1 clr c cjne a, #8, outt acall clr0 ajmp outtkey2: mov r0, #44h ;时调整 lcall add1 clr c cjne a, #24, outt acall clr0 ajmp outtkey3: mov r0, #42h ;分调整 lcall add1 clr c cjne a, #60, outt acall clr0 ajmp outtkey4: mov r0, #40h ;秒调整 acall add1 clr c cjne a, #60, outt acall clr0; 显示子程序 ;disp: mov a,30h ;扫描显示位码载入a add a,#20h ;扫描显示位码作为偏移量,再加上显示缓冲区首地址20h,显示数据的实际地址 mov r1,a ;存入扫描显示指针r1 mov a,30h ;扫描显示位码载入a swap a ;a中低4位交换到高4位(p1高4位为显示位码,低4位为显示数据值) orl a,r1 ;得“显示位码显示段码” mov p2,a ;输出至p2显示 inc 30h ;扫描偏移量指针加1 mov a,30h cjne a,#07h,dspend ;扫描显示完否?不是,则跳至dspend mov 30h,#00h ;是,则扫描显示位移量置为0dspend: ret; 开、关时钟子程序 ;stop: clr tr0 ;关电子时钟并跳出 retrun: lcall time ;运行电子时钟out: setb ea ;无键按下或完成功能跳出 ret; 运行电子时钟 ;time: setb ea mov tl0, #0b0h mov th0, #3ch ;3cb0h mov r4, #20 ;50ms,20次循环 setb tr0 ;启动定时器0 ret ; 定时中断子程序 ;intt0: push accpush pswclr et0 clr tr0 mov tl0, #0b0h ;重新设定定时初值 mov th0, #3chsetb tr0 ;启动定时器0djnz r4, addss ;1秒到addss:mova, 30h;将秒寄存器的值放入a add a, #01 ;a的内容加1 da a ;十进制调整 mov 30h, a;将a的值放回秒寄存器 cjne a, #3ch, clr ;是否等于60秒?不是,则跳至clrajmp addmm;是则跳至addmm处addmm: mov30h, #ooh ;重新设置秒寄存器的值为00hmova, 32h;将分寄存器的值放入a add a, #01 ;a的内容加1 da a ;十进制调整 mov 32h, a;将a的值放回分寄存器 cjne a, #3ch, clr ;是否等于60分?不是,则跳至clrajmp addhh;是则跳至addhh处addhh: mov32h, #ooh ;重新设置分寄存器的值为00h lcallspeak;调用整点报时子程序mova, 34h;将时寄存器的值放入a add a, #01 ;a的内容加1 da a ;十进制调整 mov 34h, a;将a的值放回时寄存器 cjne a, #18h, clr ;是否等于24时?不是,则跳至clrajmp hour;是则跳至hour处hour: mov34h, #ooh ;重新设置时寄存器的值为00hmova, 36h;将星期寄存器的值放入a add a, #01 ;a的内容加1 da a ;十进制调整 mov 36h, a;将a的值放回星期寄存器 cjne a, #08h, clr ;是否等于8天?不是,则跳至clrmov36h, #o1h ;是则重新设置星期寄存器的值为01h pop psw pop acc setb et0 reti;中断返回; 报时设置 ;speak:t02sa equ 50ht02sb equ 51hflag bit 00horg 00hljmp startorg 0bhljmp int_t0start: mov t02sa, #00hmov t02sb, #00hclr flagmov tmod, #01hmov th0, #(65536-500) / 256mov tl0, #(65536-500) mod 256setb tr0setb et0setb easjmp $int_t0:mov th0, #(65536-500) / 256mov tl0, #(65536-5

温馨提示

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

评论

0/150

提交评论