ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:31.22KB ,
资源ID:9481102      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9481102.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(8位电子时钟课程设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8位电子时钟课程设计.docx

1、8位电子时钟课程设计 检测理论及应用 课程设计题 目 时钟计时器 学院(部) 工业制造学院 专 业 测控技术与仪器 学生姓名 刘娅 学 号 412* 年级 2012级1班 指导教师 职称 硕士 2014 年 12 月 7 日摘 要时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。本文利用单片机实现数字时钟计时功能的主要内容。它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上

2、。本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。关键词:STC89C52 ; LED数码管。电子时钟的设计设计要求利用单片机作为控制核心,完成一个时钟计时器。具体要求如下:(1)采用8位LED数码显示时、分、秒,开机流动显示学号。(2)时制式为24小时制,K1选择模式。(3)按键K1进行时钟调时 、调分、调年、调月、调日,闹钟调时、调分,均以按

3、下K1键的次数进行模式改变,调整的位相应闪烁,闪烁时按K2键相应加1,K3则减1。(4)正常显示时钟时,按住K2不放显示年月日,松开显示时钟。(5)正常显示时钟时,按下K3切换到秒表模式,此时K2键对秒表进行控制,K3键则为复位键,再按K3退出该模式。(6)K0对闹钟起启停控制。1设计方案此方案采用单片机内部定时器T0、T1进行计时、计数,STC89S52实时控制。外部用按键进行模式选择,时钟调整。2系统硬件电路的设计2.1单片机的选择及引脚功能介绍STC89C52具有如下特点:40个引脚(引脚图如图四所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(

4、RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,STC89C52RC设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。图 2 STC89C52芯片引脚图引脚功能介绍:VCC(40):5V; GND(20):接地; P0口(393

5、2):P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流; P1口(18):P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流; P2口(2128):P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流; P3口(1017):P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口; RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间; ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,

6、在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲; PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现; EA/VPP(31):当EA保持低电平时,外部程序存储器地址为(0000HFFFFH)不管是否有内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP); XTAL1(19):反向振荡器放大器

7、的输入及内部时钟工作电路的输入;XTAL2(18):来自反向振荡器的输出。2.2显示电路设计单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位!这种显示器有共阴和共阳两种!发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段),a_g,另一个小数点为dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。由于共阴极连接需加驱动,故在这里我采用的是共阳阳极连接。以8位共阴极LED

8、为例,各LED公共阴极接低电平,若向各控制端a,b,,g,dp顺次送入高平信号,便可进行显示。共阴极7段LED显示数字0 F、文字、符号及小数点的编码(a段为最地位,dp点为最高位)。 图 3 2.3电源电路设计在各种电子设备中,直流稳压电源是必不可少的组成部分,它是电子设备唯一能量来源,它的设计思路是根据我们以前学过的模电电子技术,要想得到我们所要的+6V输出电压,就需将交流220V的电压经过变压器、整流电路、滤波电路和稳压电路四个部分。3控制系统的软件设计3.1主程序流程图本设计中主程序主要实现显示的初始化和调用各子程序工作的功能,读取时间的子程序主要实现初始化,时间信息的采集和显示段码的

9、码的存取。分别对各个器件的功能进行编程设计,根据主程序流程图(如下)进行全面的分析。设计中计时主要以定时器T0中断完成,定点闹铃使用峰鸣器来完成。当端口有开关按下时,转入相应的功能程序。其主程序执行流程图如下图9:图4 主程序流程图3.2闹钟时间设定功能程序在时钟状态下,触发外中断1时,进入闹钟时间设定模式,且不影响T0计时器的功能状态,在键盘上输入对应的数字进行时间设定。当分别按下调节时钟、分钟和秒钟的个位时,时间自动确定,闹钟时间只精确到分钟。闹钟时间设定流程图如图11所示:图11 闹钟时间设定流程图4系统功能调试与整体指标4.1软件调试与分析软件调时在KEIL C51编译器下进行,源程序

10、编译及仿真调试应分段或以子程序为单位逐个进行,最后生成hex文件,并且能够完美仿真。4.2性能分析按照设计程序分析,LED显示器动态扫描的频率为167HZ,实际使用观察时完全没有闪烁。由于计时中断程序中加了中断延时误差处理,所以实际计时精度非常高,可满足多种场合的应用需要。5元件及元件介绍8位数码管:8位数码管属于LED发光器件的一种。LED发光器件一般常用的有两类:数码管和点阵。8位数码管又称为8字型数码管。分为8段:a、b、c、d、e、f、g、p。其中p为小数点。数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚位一个数码管的公共端,两根之间相互连通。用单片机驱动LED数码管有很多方

11、法,按显示方法分为静态显示和动态显示。前者:显示驱动电路具有输出锁存功能,单片机将所有要显示的数据送出后就不在控制LED,直到下一次显示时再传送一次新的显示数据。静态显示的数据稳定,占用的CPU时间少。静态显示中,每一个显示器都要占用单独的具有锁存功能的IO接口,该接口用于笔划段字型代码。这样单片机只要把要显示的字型代码发送到接口电路。该字段可以显示发送的字型。要显示新的数据时,单片机再发送新的字形码。后者:是用其接口电路把所有显示器的8个笔划段a-h同名端连在一起,而妹妹一个显示器的公共极COM各自独立的受控制。CPU向字段输出口送出字形码时,所有显示器接受到相同的字形码,但究竟是哪个显示器

12、亮,则取决于公共端,而这一段是有IO扣控制的,由单片机决定何时显示哪一位。电容器:通常简称其容纳电荷的本领为电容,用字母C表示。电容器是电子设备中大量使用的电子元件之一,广泛应用于电路中的隔直通交,耦合,旁路,滤波,调谐回路,能量转换,控制等方面。极性电容:有极性电容是指电解电容一类的电容。它是由阳极的铝箔和阴极的电解液分别形成两个电极,有阳极铝箔上产生的一层氧化铝膜作为电介质的电容,由于这种结构,使其具有极性,当电容正接的时候,氧化铝膜会由于电化反应而保持稳定,当反接的时候,氧化铝层会表薄,使电容容易被击穿损坏,所以电解电容在电路中必须注意极性,普通的电容是无极性的,也可以把两个电解电容阳极

13、或者阴极相对串连形成无极性电解电容。晶振:是指一块石英晶体上按一定方位切下薄片,石英晶体振荡器,简称为石英晶体或晶体、晶振;而在封装内部添加IC组成振荡电路的晶体元件成为晶体振荡器。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。电阻:在物理学中表示导体对电流阻碍作用的大小。导体电阻越大,表示导体对电流的阻碍作用越大。不同的导体,电阻一般不同,电阻是导体本身的一种特性。电阻会导致电子流通量的变化,电阻越小,电子流通量越大,反之亦然。三极管:全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种电流控制电流的半导体器件,其作用是把微弱信号放大成幅值较大的电信号,也用作无触点开关晶体

14、三极管,是半导体基本元器件之一,具有电流放大的作业,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有PNP和NPN两种。按键:控制作用蜂鸣器:是一种一体化结构的电子讯响器,采用电流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子厂品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。6总结与思考及致谢在老师的指导和同学的帮助之下,我完成了此次单片机课程设计。从开始接到课题要求到时钟的实现,再到论文的完成,每走一步对我来说都是

15、新的尝试与挑战。在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程。这次时钟计时器设计的经历也会使我终身受益,我感受到做设计是要用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。通过设计,我在老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力。最后,再一次感谢我的老师.,老师严谨细致、一

16、丝不苟的作风一直是我学习的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次时钟计时器设计的每个环节,都离不开老师您的细心指导。我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。参考文献1 张毅刚.单片机原理及接口技术 M.北京:人民邮电出版社, 20112 张毅刚.单片机原理及应用 M.北京:高等教育出版社,20043 张毅刚.单片机原理及应用 M.北京:高等教育出版社,20104 张毅刚.单片机原理及应用设计 M.北京:电子工业出版社,2008附录:程序#include unsigned char l

17、ed12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00; /用一维数组定义-9、横杠、全灭unsigned char num12=2,0,1,2,1,0,1,1,4,1,2,7 ;unsigned char a8; unsigned char second=0,minute=0,hour=0,year=0,mon=1,day=1,day1,hsec,sec_m,min_m,N,temp1;unsigned char minute1=0,hour1=0;unsigned char b8=0xfe,0xfd,0xfb,0xf

18、7,0xef,0xdf,0xbf,0x7f; /扫描unsigned char k=0;unsigned int temp; / 记录毫秒为秒的变量unsigned char M,S_flag; /M是模式,更新时间的种模式加上正常模式 S_flag闪烁标志sbit K0=P37; /K0是闹钟起停标志位sbit K1=P30;sbit K2=P31;sbit K3=P32;sbit BEEP=P33;void delay(unsigned n) /0.2毫秒 int x,y; for(x=0;xn;x+) for(y=0;y24;y+); void init1() S_flag=0; /闪烁

19、标志位 TMOD=0x10; /定时器以方式定时 TH1=0xfc; TL1=0x18; EA=1; /打开总中断 ET1=1; /允许定时器中断 TR1=1; /开启定时器(开始定时计数)void init0() TMOD=0x01; /定时器以方式定时 TH0=0xff; TL0=0xff; EA=1; /打开总中断 ET0=1; /允许定时器中断 TR0=0; /关闭定时器(关闭定时计数)void display_led() /流动显示学号 int x; char l,a,m; for(a=0;a21;a+) x=a-8; for(l=0;l6;l+) for(m=0;m=0&x12)

20、P1=lednumx; else P1=led11; delay(20); x+; x-=8; void display() /显示时钟及显示调节位 switch(M) case 0: a0=ledhour/10; a1=ledhour%10; a2=led10; a3=ledminute/10; a4=ledminute%10; a5=led10; a6=ledsecond/10; a7=ledsecond%10; break; case 1: if(S_flag=1) a0=ledhour/10; a1=ledhour%10; else a0=led11; a1=led11; a2=led

21、10; a3=ledminute/10; a4=ledminute%10; a5=led10; a6=ledsecond/10; a7=ledsecond%10; break; case 2: a0=ledhour/10; a1=ledhour%10; a2=led10; if(S_flag=1) a3=ledminute/10; a4=ledminute%10; else a3=led11; a4=led11; a5=led10; a6=ledsecond/10; a7=ledsecond%10; break; case 3: if(S_flag=1) a0=ledyear/10; a1=l

22、edyear%10; else a0=led11; a1=led11; a2=led10; a3=ledmon/10; a4=ledmon%10; a5=led10; a6=ledday/10; a7=ledday%10; break; case 4: a0=ledyear/10; a1=ledyear%10; a2=led10; if(S_flag=1) a3=ledmon/10; a4=ledmon%10; else a3=led11; a4=led11; a5=led10; a6=ledday/10; a7=ledday%10; break; case 5: a0=ledyear/10;

23、 a1=ledyear%10; a2=led10; a3=ledmon/10; a4=ledmon%10; a5=led10; if(S_flag=1) a6=ledday/10; a7=ledday%10; else a6=led11; a7=led11; break; case 6: if(S_flag=1) a0=ledhour1/10; a1=ledhour1%10; else a0=led11; a1=led11; a2=led10; a3=ledminute1/10; a4=ledminute1%10; a5=led10; a6=led11; a7=led11; break; ca

24、se 7: a0=ledhour1/10; a1=ledhour1%10; a2=led10; if(S_flag=1) a3=ledminute1/10; a4=ledminute1%10; else a3=led11; a4=led11; a5=led10; a6=led11; a7=led11; void key_prc() /时钟和闹钟调节 if(K1=0) delay(10); /延时去抖 if(K1=0) /按K1进行模式切换 M+; if(M=8) M=0; while(!K1);/等待按键释放 if(M!=0) switch(M) case 1: /模式-调时 if(K2=0)

25、 delay(10); /延时去抖 if(K2=0) /加键按下 if(hour 0) hour-; else hour=23; while(!K3); break; case 2: /模式-调分 if(K2=0) delay(10); if(K2=0) if(minute0) minute-; else minute=59; while(!K3); break; case 3: /模式-调年 if(K2=0) delay(10); if(K2=0) if(year0) year-; else year=99; while(!K3); break; case 4: /模式-调月 if(K2=0) delay(10); if(K2=0) if(mon12) mon+; else mon=0; while(!K2); if(K3=0) delay(10); if(K3=0)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1