毕业设计(论文)基于单片机的数字钟的设计.doc

上传人:文库蛋蛋多 文档编号:3980605 上传时间:2023-03-30 格式:DOC 页数:24 大小:1.12MB
返回 下载 相关 举报
毕业设计(论文)基于单片机的数字钟的设计.doc_第1页
第1页 / 共24页
毕业设计(论文)基于单片机的数字钟的设计.doc_第2页
第2页 / 共24页
毕业设计(论文)基于单片机的数字钟的设计.doc_第3页
第3页 / 共24页
毕业设计(论文)基于单片机的数字钟的设计.doc_第4页
第4页 / 共24页
毕业设计(论文)基于单片机的数字钟的设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《毕业设计(论文)基于单片机的数字钟的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机的数字钟的设计.doc(24页珍藏版)》请在三一办公上搜索。

1、X X 职 业 学 院毕 业 设 计基于单片机的数字钟的设计院 (系) _专 业 _班 级 _学生姓名 _ 学 号 指导教师 201 年 月目 录摘 要.2一、设计意义和方案.31.1任务要求.31.2设计意义.31.3设计方案.3二、硬件设计.42.1单片机的介绍及特点.42.1.1单片机的特点.52.2单片机选择.5 2.2.1单片机的引脚说明.6 2.2.2定时/计数器.82.3显示方案.92.4时钟电路.102.5复位电路.10三、软件设计.11四、仿真原理图.12五、系统测试.125.1硬件测试.125.2软件测试.13六、总结.13参考文献.14附录.15程序完整代码.15摘 要多

2、功能数字钟的应用非常普遍,由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。本设计具有计时、校时等功能的数字时钟,是以单片机AT89S51为核心元件同时采用LCD显示器动态显示“时”、“分”、“秒”、“年”、“月”、“日”的现代计时装置。另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。关键词:多功能、AT89S51、LCD一、设计意义和方案1.1 任务要求 通过单片机内部定时器控制走时,准确持续走时,调时不影响走时。 在LCD液晶显示屏上显示时、分、秒及年、月、日。1.2 设计意

3、义用单片及制作数字钟是单片机的一个典型应用。数字钟是采用数字电路实现对“时、分、秒” 数字显示的计时装置, 广泛应用于个人家庭、车站、码头、办公室等公共场所, 已成为人们日常生活中不可缺少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便。利用单片机设计一个时钟, 单片机扩展的LCD 显示器用来显示秒、分、时计数单元中的值,可以非常准确地显示标准时间。1.3 设计方案采用AT89S51芯片作为硬件核心,其内部采用Flash ROM,具有4KB ROM 存储空间,能于3V的超低压工作,本系统的计时方案是利用单

4、片机内部的定时/计数器进行中断定时, 配合软件延时实现对时、分、秒的计时。整个系统的控制方案是:上电后系统自动进入时间显示,从00:00:00 开始计时,并且显示“年”、“月”、“日”,通过按下时间设定/启动计时键KEY,系统停止计时,进入到时间设定状态,系统保持原有的显示,等待键入当前时间, 通过按键KUP和KDOWN调节各数值,根据需要按相应的数字键可以顺序设置时、分、秒,并在相应的LCD 上显示设计值,设置完毕后,系统将从设定后的时间开始计时显示;RS调节是否显示时间,LCDEN表示显示器使能,使之暂停。二、硬件设计2.1 单片机的介绍及特点单片微型计算机简称单片机,又成为控制器。他是在

5、一块半导体上,集成了CPU、ROM、RAM、I/O接口、定时器/计数器、中断系统等功能部件,构成了一台完整的数字计算机。单片机在生产生活中的许多方面得到广泛的应用,例如,生活中五彩变幻的霓虹灯,手机通信,温度检测,流量控制等都涉及到单片机。单片机的应用结束了计算机专业人员“垄断”计算机系统开发与应用的时代,他既给各种专业人员、特别是许多工程技术人员带来了学习和掌握计算机技术的紧迫性,同时也带来了可能性,因为组成计算机应用系统变得容易、“平凡”,增强了人们进入这一领域的信心单片机的历史非常短暂,然而发展十分迅猛。自1971年美国Intel公司首先研制出4位单片机4004以来,他的发展可粗略划分为

6、四个阶段:第一阶段19711976年,属萌芽阶段。发展了各种4位单片机,多用于家用电器、计算器、高级玩具。第二阶段 19761980年,为初级8位机阶段,发展了各种中、低档8位单片机,典型的如MCS-48系列单片机,片内含多个8位并行I/O接口、一个8位定时器/计数器,不带串行接口,其功能可以满足一般工业控制和智能化仪器仪表等的需要。第三阶段 19821983年,高级8位机阶段,发展了高性能的8位单片机,例如MCS-51系列单片机,它带有串行I/O接口和多个16位定时器/计数器,具有多级中断功能。这一阶段进一步拓宽了单片机的应用范围,使之能用于智能终端、局部网络接口,并挤入了个人计算机领域。第

7、四阶段 1983年以后,16位单片机阶段。发展了MCS-96系列等16位单片机。功能很强,价格却迅速下降。片内有A/D转换器;可快速输入、输出;可用于电机控制;网络通信能力有显著提高。2.1.1单片机的特点单片机的集成度很高,他将微型计算机的主要部件都集成在一块芯片上,具有下列特点:体积小、重量轻、价格便宜、耗电少;根据工程环境要求设计,且许多功能部件集成在芯片内部,其信号通道受外界影响小,故可靠性高,抗干扰性能优于采用一般的CPU;控制功能强,运行速度快。其结构组成与指令系统都着重满足工控要求,又极丰富的条件分支指令,有很强的位处理功能和I/O口逻辑操作功能。片内存储器的容量不可能很大;引脚

8、也嫌少,I/O引脚常不够用,且兼第二功能,第三功能但存储器和I/O口都易于扩展。2.2 单片机选择本课程选用AT89S51型号的单片机。 AT89S51 是美国ATMEL 公司生产的低电压,高性能CMOS8 位单片机,片内含4k bytes 的可反复擦写的只读程序存 储器(PEROM)和128 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产, 兼容标准MCS-51 指令系统,片内置通用8 位 央处理器(CPU)和Flash 存储单元,功能强大AT89S51 单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。主要性能参数: 与

9、MCS-51 产 指令系统完全兼容 4k 字节可重擦写Flash 闪速存储器 1000 次擦写周期 全静态操作:0Hz24MHz 三级加密程序存储器 1288 字节内部RAM 32 个可编程I O 口线 2 个16 位定时计数器 2.2.1 单片机的引脚说明单片机(microcontroller,又称微控制器)是在一块硅片上集成了各种部件的微型计算机。这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。AT89S51 是一款单片封装的微控制器,适合于许多要求高集成度、低成本的场合。可以满足多方面的性能要求。采用了高性能的处理器结构,指令执行时间

10、只需2 到4 个时钟周期(6倍于标准51单片机器件)。AT89S51 提供以下标准功能:4k 字节Flash 闪速存储器,128 字节内部RAM,32 个IO 口线,两个16位定时计数器,一个5向量两级断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89S51 可降至0Hz 的静态逻 辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU 的工作,但允许RAM,定时计数器,串行通信口及 断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。其引脚图如下图1:图1 AT89S51引脚图引脚功能介绍:P0: P0是一组8 位漏极

11、开路型双向IO口,也即地址数据总线复用口。作为输出口用时,位能吸收电流的方式驱动8 个TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。 在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1: P1是一个带内部上拉电阻的8 位双向I O 口,P1 的输出缓冲级可驱动 (吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚

12、被外部信号拉低时会输出一个电流(IIL)。 Flash 编程和程序校验期间,P1 接收低8 位地址。 P2: P2是一个带有内部上拉电阻的8 位双向I O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻 辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上 拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。 在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器时,P2 口线上的内容,在整个访问期间不改变。Flash 编程

13、或校验时,P2 亦接收高位地址和其它控制信号。P3:P3口是一组带有内部上拉电阻的8 位双向IO 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3上拉电阻输出电流(IIL)。 P3口除了作为一般的IO口线外,更重要的用途是它的第二功能。如下表所示: P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 RST 复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位。 ALE PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)

14、输出脉冲用于锁存地址的低8 位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的l6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时, 个机器周期两次PSEN有 ,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有 的PSEN信号不出现。 EA VPP 外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000HFFFFH)

15、,EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA 端状态。如EA 端为高电平 (接VCC 端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp 。XTAL1 振荡器反相放大器的及内部时钟发生器的输入端。XTAL2 振荡器反相放大器的输出端。2.2.2 定时/计数器8051系列单片机至少有两个16位内部定时器/计数器。8052有三个定时器/计数器,其中连个基本定时器/计数器是定时器/计数器0和定时器/计数器1。他们既可以编程为定时器使用,也可以编程

16、为计数器使用。若是计数内部晶振驱动时钟,则它是定时器;若是计数8051的输入引脚的脉冲信号,则它是计数器。8051的T/C时加一计数的。定时器实际上也是工作在技术方式下的,只不过对固定频率的脉冲计数;由于脉冲周期固定,由计数值可以计算出时间,有定时功能。当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加一,频率加=fosc/12。晶振为6MHz,计数频率=500KHz,每2Us计数加一。当T/C工作在计数器时,计数脉冲来自外部脉冲输入引脚T0或T1。当T0或T1脚上负跳变需2个机器周期,即24个振荡周期。所以T0或T1脚输入的计数外部脉冲的最高频率为fosc/12。当晶

17、振为12MHz时,最高技术频率为500KHz,高于此频率将计数出错。2.3 显示方案本课程采用的是LCD液晶显示屏来显示时间。液晶是一种既有液体流动性,又有光特性的有机化合物。它的透明程度和呈现的颜色受外加电场的影响。利用这一特点,便可做城电场控制的七段数码显示器件。下图2为LCD液晶显示屏。 图2 LCD液晶显示屏1602在单片机系统中作为液晶显示器输出器件有以下几个优点:1显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。2 体积小、重量轻液晶显示器通过显示屏上的电极控制

18、液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。3 功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。2.4 时钟电路晶体振荡器电路给数字钟提供一个频率稳定准确的12MHz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。本设计采用石英晶体产生11.0592MHZ的时钟。时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器电路构成,秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器。如图3。图32.5 复位电路 当上电时,电源对电容充电,对单片机复位,

19、当死机时按复位开关,使单片机从00H开始执行程序。电路如图4。图4 上电与按钮复位电路三、软件设计数字电子钟设计中主要使用定时器T0 中断ET0,利用ET0 中断进行计时时间的自增,从而实现计时功能。AT89S51 有两个通用定时/计数器。两者均可配置为定时器或事件计数器。另外增加了定时器T0/T1,溢出时T0/T1 脚自动翻转的功能选项。用作“定时器”功能时,每经过一个机器周期,寄存器值加1。用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1 上每发生一次1 到0 的跳变时加1。使用该功能时,外部输入每个机器周期被采样一次。本课题采用C语言做为软件,采用循环扫描的方式点亮LCD的日期

20、、时期发光数码管,调用一秒的中断子程序使之达到正确的时间走时,通过P0口控制各个发光数码管的数字(09)。软件结构图如下图5。图5 软件结构图四、仿真原理图本设计先利用Keil C51 uVision2编译C程序,然后用Proteus软件画出电路原理图,将工程文件.Hex加载到AT89S51中运行,得到仿真图,验证其原理图和C程序的准确性。仿真图如下图6。图6 整体仿真图五、系统测试5.1 硬件测试该数字钟的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺破带有封皮的导线,使电路造成

21、短路现象。另外,买来的元器件要先进行检测,如果有坏的器件要进行更换,还有就是要注间元器件的正确放置与安装以及布线的合理,便于成品电路的检测与维护。在本数字钟的设计调试中遇到了很多的问题。回想这些问题,其实只要认真思考很多功能都是可以避免的,电路做成后,LCD有显示,但是不能正常计时走钟通过检测,查出单片机AT89S51的31脚EA 引脚 没有接5V的电源作为高电平(因为该系统中没有扩展外部程序存储器,故电路通电工作后,其内部程序执行应该从内部程序存储单元开始,也即EA引脚要接高电平。通常引脚悬空也可看成是接高电平,但是本次设计中选的用芯片AT89S51内部采用的是CMOS结构,不能将悬空等同为

22、接高电平,而必须接5V的电源作为高电平才能正常工作),用导线将31脚接到电源,问题就得到解决了。5.2 软件测试数字钟的功能虽然比较少,但是程序也较为复杂,特别对于初学者的我来说更是如此,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。在软件的调试过程中主要遇到的问题是烧入程序后,LCD管能显示,也能走钟,但时间明显跳动很快,时,是由于从“秒”、“时”、“分”的循环次数太少,加大其循环次数能解决抖动问题。六、总结通过这次单片机课程设计,发现了自身所学知识存在许多的不足和问题,同时也学到了不少东西,提高了动手实践的能力.在整个设计过程中

23、,从设计方案的确定,到具体电路的设计,最后到总体电路的联接构建以及程序的编写烧制,整个设计工程量是比较大的,单靠个人能力,很多方面考虑不周,有的地方甚至毫无头绪,想不出具体方案。因此,绝对不能心急,不明白的地方和其它的同学共同讨论研究,同时也感谢黄艳华老师对本次设计的指导,是我更快的解决问题,完善设计。在这次设计过程中,我还查阅了许多相关资料,通过参考和研究别人的一些设计,使自己的设计思路更加周密、全面,从而使设计出来的作品也更加完善和高质量。参考文献1 赵亮 、侯国锐等编著单片机C语言编程与实例 人民邮电出版社2 李玉梅 基于MCS51系列单片机原理的应用设计 国防工业出版社3 王德彪 MC

24、S-51单片机原理及接口技术 电子工业出版社 4 张洪润、蓝清华 单片机应用技术教程 清华大学出版社 附录程序完整代码#include#define uint unsigned int#define uchar unsigned char#define lcd_data P2#define lcd_com P2sbit lcd_en=P01;sbit lcd_rs=P00;sbit KEY=P05;sbit KUP=P06;sbit KDOWN=P07;uchar code disp1= 2011-10-01;uchar code disp2= 00:00:00;uchar aa,shi,fe

25、n,miao,ri=1,yue=1,nian=9,KNUM;void delay(uint);void write_com(uchar);void write_data(uchar);void write_str(uchar,uchar *str);void init();void sfmdisplay(uchar,uchar);void keyscan();void shanping();void main()init();write_str(0x80,disp1);write_str(0x80+0x40,disp2);while(1)keyscan();/键盘扫描if(aa=20)aa=0

26、;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;ri+;if(yue=2&ri=29)ri=0;yue+;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)&ri=32)ri=0;yue+;if(yue=13)yue=0;nian+;if(yue=4|yue=6|yue=9|yue=11)&ri=31)ri=0;yue+; if(yue=13)yue=0;nian+;sfmdisplay(0x05,nian);sfmdisplay(0x08,yue);sfmdisp

27、lay(0x0b,ri);sfmdisplay(0x40+0x03,shi);sfmdisplay(0x40+0x06,fen);sfmdisplay(0x40+0x09,miao);void timer0() interrupt 1TH0=(65535-50000)/256;TL0=(65535-50000)%256;aa+;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/写控制字lcd_rs=0;lcd_en=0;delay(1);lcd_en=1;lcd_com=com

28、;delay(1);lcd_en=0;void write_data(uchar lcddata)/显示字符lcd_rs=1;lcd_en=0;delay(1);lcd_en=1; lcd_data=lcddata;delay(1);lcd_en=0;void write_str(uchar addr,uchar *str)/显示字符串write_com(addr);dowrite_data(*str);str+;while(*str!=0);void init()write_com(0x38); /设置显示模式write_com(0x08); /关闭显示屏write_com(0x01); /

29、清楚显示屏write_com(0x0c); /开启显示屏(无光标)write_com(0x06); /读写字符时指针自动加1(整屏不移动)TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;void sfmdisplay(uchar addr,uchar date)write_com(0x80+addr);write_data(date/10+0x30);write_data(date%10+0x30);void keyscan()if(KEY=0)delay(5);if(KEY=0)while(!KEY

30、);KNUM+;switch(KNUM)case 1:TR0=0;write_com(0x80+0X40+0x0a);write_com(0x0f);break;case 2:write_com(0x80+0x40+0x07);break;case 3:write_com(0x80+0x40+0x04);break;case 4:write_com(0x80+0x0b);break;case 5:write_com(0x80+0x08);break;case 6:write_com(0x80+0x05);break;case 7:write_com(0x0c);TR0=1;KNUM=0;bre

31、ak;if(KNUM=1)if(KUP=0)delay(5);if(KUP=0)while(!KUP);miao+;if(miao=60) miao=0;sfmdisplay(0x40+0x09,miao);write_com(0x80+0X40+0x0a);write_com(0x0f);if(KDOWN=0)delay(5);if(KDOWN=0)while(!KDOWN);miao-;if(miao=-1) miao=59;sfmdisplay(0x40+0x09,miao);write_com(0x80+0X40+0x0a);write_com(0x0f);if(KNUM=2)if(K

32、UP=0)delay(5);if(KUP=0)while(!KUP);fen+;if(fen=60) fen=0;sfmdisplay(0x40+0x06,fen);write_com(0x80+0X40+0x07);write_com(0x0f);if(KDOWN=0)delay(5);if(KDOWN=0)while(!KDOWN);fen-;if(fen=-1) fen=59;sfmdisplay(0x40+0x06,fen);write_com(0x80+0X40+0x07);write_com(0x0f);if(KNUM=3)if(KUP=0)delay(5);if(KUP=0)wh

33、ile(!KUP);shi+;if(shi=24) shi=0;sfmdisplay(0x40+0x03,shi);write_com(0x80+0X40+0x04);write_com(0x0f);if(KDOWN=0)delay(5);if(KDOWN=0)while(!KDOWN);shi-;if(shi=-1) shi=23;sfmdisplay(0x40+0x03,shi);write_com(0x80+0X40+0x04);write_com(0x0f);if(KNUM=4)if(KUP=0)delay(5);if(KUP=0)while(!KUP);ri+;if(yue=2&ri

34、=29) ri=1;if(yue=1|yue=3|yue=5|yue=5|yue=8|yue=10|yue=12)&ri=32)ri=1;if(yue=4|yue=6|yue=9|yue=11)&ri=31)ri=1;sfmdisplay(0x0a,ri);write_com(0x80+0x0b);write_com(0x0f);if(KDOWN=0)delay(5);if(KDOWN=0)while(!KDOWN);ri-;if(yue=2&ri=0) ri=28;if(yue=1|yue=3|yue=5|yue=5|yue=8|yue=10|yue=12)&ri=00)ri=31;if(y

35、ue=2|yue=4|yue=6|yue=9|yue=11)&ri=00)ri=30;sfmdisplay(0x0a,ri);write_com(0x80+0x0b);write_com(0x0f);if(KNUM=5)if(KUP=0)delay(5);if(KUP=0)while(!KUP);yue+;if(yue=13) yue=1;sfmdisplay(0x07,yue);write_com(0x80+0x08);write_com(0x0f);if(KDOWN=0)delay(5);if(KDOWN=0)while(!KDOWN);yue-;if(yue=0) yue=12;sfmdisplay(0x07,yue);write_com(0x80+0x08);write_com(0x0f);if(KNUM=6)if(KUP=0)delay(5);if(KUP=0)while(!KUP);nian+;sfmdisplay(0x04,nian);write_com(0x80+0x05);write_com(0x0f);if(KDOWN=0)delay(5);if(KDOWN=0)while(!KDOWN);nian-;sfmdispla

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号