收藏 分销(赏)

led显示电子钟设计学士学位论文.doc

上传人:胜**** 文档编号:2050626 上传时间:2024-05-14 格式:DOC 页数:23 大小:1.08MB 下载积分:10 金币
下载 相关 举报
led显示电子钟设计学士学位论文.doc_第1页
第1页 / 共23页
led显示电子钟设计学士学位论文.doc_第2页
第2页 / 共23页


点击查看更多>>
资源描述
摘要 毕业论文 题 目 LED显示电子钟 二〇一〇年七月 摘要 随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。 然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。来自英国Labcenter Electronics公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。它包括PROTEUS VSM(Virtual System Modelling)、PROTEUS PCB DESIGN两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。 单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面, 其调试过程一般分为软件调试、硬件测试、系统调试3个过程。如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。 关键词: 数字电子钟; AT89C2051 ;LED; 电子钟; 目 录 第一章 前言1 1.2基本参数 1 1.3注意事项 1 第二章 模块特性简介 2 2.1 AT89C2051单片机 2 2.2 LED简介 3 2.2.1 LED概述 3 2.2.2 LED优势 3 2.2.3 LED显示屏 3 2.3 系统总体方案介绍 3 第三章 系统硬件设计 5 3.1 Proteus 电路图设计 5 第四章 系统软件设计 6 4.1软件的结构 6 4.2 概述 6 4.2.1主程序 6 4.2.2中断服务程序 6 4.2.3调时程序 7 第五章 程序设计 11 5.1 部分程序一览 11 第六章 结论 13 参考文献 14 致 谢 15 附录一 软件编写程序 16 附录二 主要元器件清单 17 19 前言 第一章 前言 1.1系统功能 此课程设计要求用单片机AT89C2051定时功能,中断系统,按键及LED数码管显示,设计一个能显示时、分、秒的数字时钟。数字时钟通过数码管显示,使用按键开关来实现调时功能。 1.2基本参数 1.工作电压:4.5V(3节干电池); 2.日期显示范围:2001-2100年; 3.时间采用24小时制。 1.3注意事项 2. 在安装电池时注意正负极,否则容易烧坏芯片; 3.在印制电路板上的焊接元器件前要认真对照原理图,仔细查看印制电路板,找到对应的元器件功能区; 4.在电源测试期间请勿将单片机芯片插入座中,以免电源部分有问题造成芯片烧坏。 模块特性简介 第二章 模块特性简介 2.1 AT89C2051单片机 AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。 AT89C2051是一个有20个引脚的芯片,引脚配置如图2-1所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。 图2-1 AT89C2051引脚配置 AT89C2051芯片的20个引脚功能为: VCC 电源电压。 GND 接地。 RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。 XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2 来自反向振荡放大器的输出。 P1口 8位双向I/O口。引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。 P3口 引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。 2.2 LED简介 在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN结加反向电压,少数载流子难以注入,故不发光。这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。 2.2.1 LED优势 资料显示,LED光源比白炽灯节电87%、比荧光灯节电50%,而寿命比白炽灯长20~30倍、比荧光灯长10 倍。LED光源因具有节能、环保、长寿命、安全、响应快、体积小、色彩丰富、可控等系列独特优点, 被认为是节电降能耗的最佳实现途径。 2.2.2 LED显示屏 LED显示屏(LED panel):LED就是light emitting diode ,发光二极管的英文缩写,简称LED。它是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。 2.3系统总体方案介绍 电脑钟的原理框图如图1所示。它由以下几个部件组成:单片机89C2051、电源、时分显示部件。 时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。时分显示模块以及显示驱动都通过89C2051的I/O口控制。 电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作。 图2 电子钟系统原理框图 图3电子钟基本部分参考电路原理图 硬件电路设计 第三章 硬件电路设计 3.2 Proteus 电路图设计 运行Proteus的ISIS 后出现程序主窗口界面,鼠标左键单击窗口左侧的元器件工具栏的component.按钮, 接着再点击窗口左侧的元器件选择区的Pick Divices.按钮,弹出如图1所示的Pick Devices窗口,再在Categ栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到 AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。 用同样的方法依次把 DS130、MAX7219、数码管、晶振以及多个电阻、电容也添加到器件列表区里。 然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。连线时当鼠标的指针靠近一个对象的引脚时,跟着鼠标的指针r ICs就会出现一个“×”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的 Inter-sheeTerminal.按钮,添加上电源和接地符号,原理图的绘制就完成了。 图4 Proteus中设计的电子时钟系统原理图 系统软件设计 第四章 系统软件设计 4.1软件的结构 4.2概述 本系统的软件系统主要可分为主程序和定时器中断程序两大模块。在程序过程中,加入了抗干扰措施。下面对部分模块作介绍。 4.2.1主程序 主程序的功能是完成系统的初始化,程序流程如图4所示。 4.2.2中断服务程序 中断程序(如图6所示)完成时间计数,时间调整,误差消除等功能。中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125ms×8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器HOURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。 图5 系统主程序流程图 图6 定时中断程序 4.2.3调时程序 给三个按键,当P2.0口的按键K0按下,则进入调时状态,按K1,K2加1减1操作,再按K0,调分,再按K0,调秒,再按K0,则退出调时功能,进行正常计数运行。 4.2.5 LED显示模组显示数字 由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图7所示。 二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。 图7 LED数码管结构原理图 众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的转换。从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。各段码位与显示段的对应关系如表1。 表1 各段码位的对应关系 段码位 D7 D6 D5 D4 D3 D2 D1 D0 显示段 dp g f e d c b a 需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。通常数据口的D0位与a段连接,D1位与b段连接,……D7位与dp段连接,如表1所示,表2为用于LED数码管显示的十六进制数和空白字符与P的显示段码。 表2 LED显示段码 字型 共阳极段码 共阴极段码 字型 共阳极段码 共阴极段码 0 C0H 3FH 9 90H 6FH 1 F9H 06H A 88H 77H 2 A4H 5BH B 83H 7CH 3 BOH 4FH C C6H 39H 4 99H 66H D A1H 5EH 5 92H 6DH E 86H 79H 6 82H 7DH F 84H 71H 7 F8H 07H 空白 FFH 00H 8 80H 7FH P 8CH 73H 注:(1)本表所列各字符的显示段码均为小数点不亮的情况。 (2)“空白”字符即没有任何显示。 根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将AT89C2051的P1.0~P1.7分别与共阳数码管的a~g及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。例如:当P0口输出的段码为1100 0000,数码管显示的字符为0。 数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。 为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制。这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态。 系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只LED数码管倒置摆放,这样就形成了两个很自然的闪烁点。与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由P1.7单独控制,每隔一秒使P1.7发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。 第五章 程序设计 5.1部分程序预览 以下为部分源程序: #include "AT89X51.H" #include "delay.h" #include "max7219.c" #include "music.c" #define uchar unsigned char #define uint unsigned int idata sbit ADD=P1^1; sbit SUB=P1^0; sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; void showDay(void);//显示时间 void showData(void);//显示日期 void showDishi(void);//显示定时 void int_0(void);//中断0 void int_1(void);//中断1 void flash_max7219(unsigned char n);//闪一个位max7219 /*********************************************************************/ /* 实时时钟模块 时钟芯片型号:DS1302 */ /*/ /*********************************************************************/ sbit T_CLK = P2^3; /*实时时钟时钟线引脚 */ sbit T_IO = P2^4; /*实时时钟数据线引脚 */ sbit T_RST = P2^5; /*实时时钟复位线引脚 */ /********************************************************************/ void v_RTInputByte(uchar ucDa); //往DS1302写入1Byte数据 uchar uc_RTOutputByte(void);// 从DS1302读取1Byte数据 void v_W1302(uchar ucAddr, uchar ucDa);//往DS1302写入数据 uchar uc_R1302(uchar ucAddr);//读取DS1302某地址的数据 //void v_BurstW1302T(uchar *pSecDa);//往DS1302写入时钟数据(多字节方式) //void v_BurstR1302T(uchar *pSecDa);//读取DS1302时钟数据 //void v_BurstW1302R(uchar *pReDa);//往DS1302寄存器数写入数据(多字节方式) //void v_BurstR1302R(uchar *pReDa);//读取DS1302寄存器数据 void v_Set1302(uchar *pSecDa) ;//设置初始时间,,输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 void v_Get1302(uchar ucCurtime[]) ;//读取DS1302当前时间 uchar showTime[8]={0,0,10,0,0,10,0,0};//显示的时间**********************************************全局变量 uchar setTime[2]={0,0};//定时的设定 uchar time[7]={0,0x59,0x19,0x24,0x7,0x01,0x08};//秒 分 时 日 月 星期 年 uchar Tmod=7;//此时的调节模式 void main() { delay_ms(200); //sound(); initMAX7219();//初始化max7219 cls();//清屏max7219 //v_Get1302(& time); //v_Set1302(& time); EX0=1; EX1=1; IT1=1;//下降沿触发 IT0=1; EA=1;//开中断 v_Get1302(& time); showDay(); //int_1(); //int_0(); while(1) { v_Get1302(& time); showDay(); if ((setTime[0]==time[2])&&(setTime[1]==time[1]))sound(); } } //************************************************显示时间 void showDay(void) { //将数据转化为显示格式 showTime[7]=time[0] & 0x0f;//个位 showTime[6]=time[0]>>4;//十位 showTime[4]=time[1] & 0x0f; showTime[3]=time[1]>>4; showTime[1]=time[2] & 0x0f; showTime[0]=time[2]>>4; showTime[2]=showTime[5]=10; disp_88(& showTime); } //*************************************************显示日期 void showData(void) { showTime[7]=time[3] & 0x0f; showTime[6]=time[3]>>4; showTime[4]=time[4] & 0x0f; showTime[3]=time[4]>>4; showTime[1]=time[6] & 0x0f; showTime[0]=time[6]>>4; showTime[2]=showTime[5]=10; disp_88(& showTime); } //*************************************************显示定时 void showDishi(void) { showTime[1]=setTime[0] & 0x0f; showTime[0]=setTime[0]>>4; showTime[4]=setTime[1] & 0x0f; showTime[3]=setTime[1]>>4; showTime[6]=12; showTime[7]=13; showTime[2]=showTime[5]=10; disp_88(& showTime); } 参考文献 结论 此实验利用protues仿真软件实现,基本实现了要求的功能。为了校准时钟增加了按键,便于调节。在本次实验中对单片机内部结构有一定了解,熟悉了各个引脚的功能,同时熟知了LED数码管的使用及各种电路的功能。 通过此次课程设计,无论是从软件方面还是硬件方面,都进一步学习和巩固了程序的总体设计。在软件方面,进一步熟悉了各条指令的功能及用法,定时、中断的用法,更深一步学习了用汇编语言编写实现数字时钟功能。在硬件方面,了解并学习使用keil软件和proteus软件,在keil中编程,调试,运行,在Proteus中进行硬件设计、仿真。在整一个设计过程中,从设计到实现,从编程到调试,每一步都是自己亲力亲为,虽然从中遇到各种问题,有时叫人很烦,但在发现问题后去解决,并成功了,此时会有一种快乐和成就感。只有自己亲自去操作,才能将学习的知识变成自己的。 程序不要光看不写,一定要自己写一次。最开始的时候,啥都不懂,可以抄人家的程序过来,看看每一句是干什么用的,达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次,你会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。 单片机提高重在实践,想要学好单片机,软件编程必不可少。但是熟悉硬件对于学好单片机的也是非常重要的。如何学习好硬件,动手实践是必不可少的。我们可以通过自己动手做一个自己的电子制作,通过完成它,以提高我的对一些芯片的了解和熟练运用它。这样我们就可以多一些了解芯片的结构。 我对程序设计课程的学习的目标是在若干年以后能够独立设计一个复杂的系统,包括硬件电路和软件部分。所以,这次课程设计我付出了比别人跟多的努力,同样也学习到了更多的知识。在我能够独立设计更复杂的实用系统的时候,回想现在我连设计一个简单的数字钟系统都没有很好的把握时,我一定会为自己的成长感到喜悦。 参考文献 [1] 张迎新 单片微型计算机原理、应用接口技术. 北京:国防工业出版社,2004.1 [2] 何利民 单片机高级教程. 北京:航空航天大学出版社,2000.8 [3] 谢维成 单片机原理及应用与51程序设计. 北京:清华大学出版社,2006.8 [4] 余永权 单片机在控制系统中的应用. 北京:电子工业出版社,2003.10 [5] 李朝青 单片机原理及接口技术. 北京:航空航天大学出版社,1999.3 [6] 夏继强 单片机实验与实践教程. 北京:航空航天大学出版社,2001.11 [7] 曹洪奎;马莹莹 基于Proteus单片机系统设计与仿真 辽宁工学院学报07年04期 [8] 侯玉宝 基于Proteus的51系列单片机设计与仿真[M]电子工业出版社,2008.270~288 [9] 蔡希彪,曹洪奎; 单片机电子时钟系统的设计与仿真 [J];中国科技信息; 2007年04期 [10] 方怡冰.单片机课程的教学与实验改革[J].电气电子教学学报.2006,第3期. [11] 刘文秀.单片机应用系统仿真的研究[J].现代电子技术.2005, 第286 期 [12] 张友德.单片微型机原理、应用与实验[M].上海:复旦大学出版社,2003.225~256. 致 谢 在论文完成之际,我首先向关心帮助和指导我的指导老师朱静表示衷心的感谢并致以崇高的敬意 在我即将完成学业之际,我深深地感谢我的家人给予我的全力支持! 最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位专家、教授! 参考文献 附 录 2 附录1 软件编写程序 附录2 主要元器件清单 名称 数量 备注 AT89C2051 1 按扭 3 4插脚 晶振 1 6MHZ LED数码管 4 共阴 蜂鸣器 1 5V 电容 2 30pf 电容 3 104 电容 2 22uF 三极管 5 9012或5401(PNP) 电阻 4.7K 10 电阻 200 10 线路板 不定 64×77mm
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服