基于单片机的LED数码管数字电子钟智能仪表课程设计

上传人:1777****777 文档编号:37540547 上传时间:2021-11-03 格式:DOC 页数:26 大小:377.50KB
返回 下载 相关 举报
基于单片机的LED数码管数字电子钟智能仪表课程设计_第1页
第1页 / 共26页
基于单片机的LED数码管数字电子钟智能仪表课程设计_第2页
第2页 / 共26页
基于单片机的LED数码管数字电子钟智能仪表课程设计_第3页
第3页 / 共26页
点击查看更多>>
资源描述
内蒙古科技大学智能仪表综合训练设计说明书题 目:基于单片机的LED数字电子钟摘要数字电子钟是采用电子电路实现对年、月、日、时、分、秒数字显示的计时装置,由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字电子钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,成为人们日常生活中不可缺少的必需品。 本次课程设计的是基于AT89C52单片机和实时时钟芯片DS1302在数码管上进行时钟显示,并能通过按键对其进行调时和校准,并且可以设置闹钟,且具有秒表功能。通过按键可以切换时钟和秒表功能,同时可以对闹钟进行设置。采用AT89C52单片机和DS1302实时时钟芯片,使用5V电源供电。DS1302是一种高性能、低功耗、带RAM的实时时钟芯片,它能够对时,分,秒进行精确计时,它与单片机的接口使用同步串行通信,仅用3条线与之相连接,就可以实现MCS-51单片机对其进行读写操作,把读出的时间数据送到数码管上显示。程序运行时,数码管将从当前时间开始显示,通过调节按键可以分别对小时和分钟进行调整,调整后,时钟以新的时间为起点继续刷新显示。这种实现方法的优点是电路简单,性能可靠,实时性好,时间和日期精度高,操作简单,编程容易。关键词:AT89C52单片机;DS1302;LED数码管;闹钟;秒表- 15 -目录目录- 1 -第1章 前言- 2 -1.1课题研究的现实性意义- 2 -1.2国内外研究现状- 2 -1.3课题基本概况- 3 -第2章 总体方案设计- 4 -2.1方案原理- 4 -2.2 硬件选择- 4 -2.2.1 DS1302简介- 4 -2.2.2单片机- 5 -2.2.3显示方案- 6 -第3章 硬件设计- 8 -3.1显示模块- 9 -3.2独立按键模块- 9 -3.3实时时钟芯片DS1302- 10 -第4章 软件设计- 11 -4.1 程序流程图- 11 -4.2 按键子程序- 12 -4.3 功能键按键程序流程图- 12 -4.4 时间调整程序- 13 -第5章 总结- 14 -附录A:硬件原理图- 15 -附录B:C语言源程序- 16 -参考文献- 23 -第1章 前言1.1课题研究的现实性意义20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。随着科技的发展和社会的进步,人们对钟表的要求也越来越高,传统的钟表已不能满足人们的需求。单片机在多功能电子钟中的应用已是非常普遍的,人们对电子钟的功能及工作顺序都非常熟悉。电子时钟是采用数字电路实现对时间、日期数字显示的计时装置,是人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、航站、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各个仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理;以及我们生活中广泛使用的各种智能IC卡等,这些都离不开单片机。以前没有单片机时,这些东西也能做,但是智能使用复杂的模拟电路、然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,与元件不断老化,控制精度自然也会达不到标准。在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。这样产品的体积变小了,成本也降低了。随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。根据这种实际情况,设计了一个单片机多功能电子钟系统,他可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制,同时又可以进行时钟校准,它可以任意设置时间。这种具有人们所需要的智能化特性的产品减轻了人们的劳动,扩大了数字化的范围,为家庭数字化提供了可能。1.2国内外研究现状单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片, 而是把一个计算机系统集成到一个芯片上。概括地讲, 一块芯片就成了一台计算机。它体积小、质量轻、价格便宜, 为学习、应用和开发提供了便利条件。世纪跨越了三个“电” 的时代, 即电气时代、电子时代和现已进人的电脑时代。不过, 这里的电脑, 通常是指个人计算机, 简称机。它由主机、键盘、显示器等组成。还有一类计算机, 大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机。顾名思义, 这种计算机的最小系统只用了一片集成电路, 即可进行简单运算和控制。因为它体积小, 通常都藏在被控机械的“肚子”里。它在整个装置中, 起着有如人类头脑的作用, 它出了毛病, 整个装置就瘫痪了。现在, 这种单片机的使用领域已十分广泛, 如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机, 就能起到使产品升级换代的功效, 常在产品名称前冠以形容词“智能型” , 如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品, 不是电路太复杂, 就是功能太简单且极易被仿制。究其原因, 可能就卡在产品未使用单片机或其它可编程逻辑器件上。单片机应用系统因其优异的性能、高可靠性以及成本低廉被广泛应用于航空航天、工业测控、机器人感觉、数字信号处理、通信等各个技术领域, 然而在比较特殊的应用系统中, 我们不仅希望单片机系统能够完成数据的采集处理, 而且同时还想知道产生这些数据的时刻, 以便于更详细地了解和掌握现场情况, 因此为单片机系统增加数字时钟将是不可回避的一项新型的工程技术。数字电子时钟,自从它发明的那天起,就成为人类的朋友,是人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、航站、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。1.3课题基本概况 本设计基于单片机原理,以单片机AT89C52芯片、DS1302时钟芯片及LED数码管为核心,通过硬件电路的制作以及软件程序的编制,设计制作出一个电子钟系统。该时钟系统主要由时钟模块、显示模块、控制模块组成。它的计时周期为24小时,显满刻度为“23时59分59秒”。能够准确显示时间,可随时进行时间调整,可设置闹钟,有秒表功能。设计以硬件软件化为指导思想,充分发挥单片机功能,大部分能通过软件编程来实现,电路简单明了,系统稳定性高。同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性。第2章 总体方案设计2.1方案原理使用串行接口时钟芯片DS1302设计时钟电路。该设计方案以MCS-51单片机为主控芯片,以串行时钟芯片DS1302为核心计时芯片,然后再通过一个74LS164缓冲器驱动两组数码管组(每个数码管组由四个数码管连在一起组成)组成数字时钟电路。更重要的是,DS1302时钟芯片的加入大大提高了数字钟时间的准确性,而且该电路在断电后不丢失时间和数据信息时也使得该方案的研究与提升更具有开发的意义。其功能如下:1.电子时钟用8位数码管静态显示;2.时间显示格式:XX-XX-XX,分别为时、分、秒。3.可以通过按键切换显示日历,格式:XX-XX-XX,分别为年、月、日。4.具有秒表和校时功能。2.2 硬件选择2.2.1 DS1302简介为了能够较精确的计时,选择了DS1302时钟芯片。 DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.55.5V。时钟可工作在24小时格式或12小时(AM/PM)格式。 DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的引脚功能如表2.1所示,外形及内部结构如图2.1所示。 表2.1 DS1302引脚功能表引脚号引脚名称功能1VCC2主电源2、3X1、X2振荡源,外接32768Hz晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源 图2.1 DS1302管脚图及内部结构图2.2.2单片机 本次设计选择的单片机为AT89C52。AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可提供许多较复杂系统控制应用场合。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 图2.2 AT89C52单片机 图2.3 AT89C52单片机引脚2.2.3显示方案根据设计要求,本次设计采用LED数码管静态显示。所谓静态显示,就是把多个LED显示器的每一段与一个独立的并行口连接起来,而公共端则根据数码管的种类确定连接VCC或GND。当显示器显示某一字符时,相应的发光二极管恒定的导通或截止,直至新的时钟信号到来。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。因此,通过移位寄存器74LS164可以减少所需的I/O口,可以用并行口的口线。通过移位寄存器74LS164将相应的数据发送到相应的数码管上。74LS164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。当清除段(clear)为低电平时,输出端均为低电平。数据通过两个输入端(A或B)之一串行输入;任意一个输出端为低电平,禁止新数据输入;在时钟端(clock)脉冲上升沿作用下Q0为低电平。当A、B有一个为高电平,则另一个就允许输入数据,并在clock上升沿作用下决定Q0的状态。8个LED数码管分别对应8个74LS164,而74LS164的七个输出分别对应一个数码管的段码。当有数据来时,74LS164就把数据发给相应的段码,从而显示出时间。 图2.4 静态显示第3章 硬件设计该设计以STC89C52RC单片机为中心,分别设计了键盘电路、时钟芯片电路、LED数码管显示电路。其总体框图和仿真原理图如图3.1和图3.2所示。AT89C52独立按键74LS164数码管DS1302 图3.1 总体框图 图3.2 仿真原理图3.1显示模块八段数码显示管有两种,一种是共阳数码管,其内部是由八个阳极相连接的发光二极管组成;另一种是共阴数码管,其内部是由八个阴极相连接的发光二极管组成。二者原理不同但功能相同。本设计的时间显示硬件部分用8只数码管为显示管,这些数码管为共阴极连接。其硬件连接图如图3.3。 图3.3 显示电路3.2独立按键模块 四个独立按键通过P1口进行连接,其公共端接地。第一个按键控制时间调整,第二个按键是加键,第三个按键是减键,最后一个是切换键。接通电源,数码管显示,000000。按一下k4键显示时、分、秒,并且走时显示,此为正常工作模式,按两次k4键显示年,月,日,按下三次后显示秒表。之后按下k1键一次显示秒可调,按两次显示分可调,按三次显示时可调,之后依次循环。其硬件连接如图3.4。 图3.4按键电路3.3实时时钟芯片DS1302DS1302采用三线接口与CPU进行同步通信,因此将3个P3口与DS1302进行连接。DS1302的X1和X2管脚外接标DS1302的复位引脚通过把输入驱动置高电平来启动所有的数据传送。 输入有两种功能:首先,接通控制逻辑,允许地址命令序列送入移位寄存器;其次,提供了终止单字节或多字节数据的传送手段。当为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。其连接线路如图3.5图3.5时钟芯片电路第4章 软件设计4.1 程序流程图本实验由C语言编写完成。主程序流程如下:开始初始化子程序初始化DS1302扫描按键程序是否有键按下 调用DS1302时间函数 否外部中断按键调时 是刷新数码管显示4.2 按键子程序小时加/减1加/减键有效等待按键程序控制键有效,进入小时调整程序控制键有效,进入分钟调整程序等待按键程序加/减键有效分钟加/减14.3 功能键按键程序流程图S1功能键是否按下Sinum累加S1num=1S1num=2S1num=5S1num=4S1num=3调整秒调整分清零闹钟调整时x清零4.4 时间调整程序中断Miao+=Miao59Miao=0,fen+Fen59Fen=0,shi+Shi23中断返回Shi=0第5章 总结 通过本次设计,我对单片机的了解又有了进一步的加深,并且系统的学习了DS1302的相关知识,我发现只有动手做才会让自己学到更多的东西,才会发现自己有那么多的不足,并且还让我更熟悉了对文档的整理的能力。这次设计运用到的知识很多方面,尤其是单片机,像AT89C52,引脚多,硬件内部线路接通,所以用起来很方便,还有ds1302芯片与单片机之间的连接,以及如入使用ds1302芯片。当然也要对这些元器件作相应调查。主要就是电路原理图,还有对引脚的作用熟悉。对于软件方面则是灵活运用单片机有关的程序语言,还有很多扩展功能,由于知识匮乏,但是理论知识还是比较详细的。我们最大的成功之处是在这整个过程,动脑寻求解决一个一个问题的办法,对程序是不断思索,务必写出很简单的程序来,使得电子时钟能做成功!同时,通过这次的设计,让我学会了去跟别人合作的精神,这将是我在以后的工作中的一笔巨大的财富。在这次设计中,非常感谢肖俊生老师及多位同学的帮助。由于我个人的知识学得不够好,经常遇到无法解决的问题。每次遇到这种情况,肖老师总能放下手上的工作,为我们悉心讲解,引导我们解决难题,并有针对性的提出要求,让我们加强对基础知识的认识,同时,同学们也耐心的给我作了详细的解答,使我发现了自己的好多需要加强学习的知识点,谢谢你们。附录A:硬件原理图附录B:C语言源程序#include#include#define uchar unsigned charuchar miao,shi,fen,s1num,s4num;uchar current_time6;#define uint unsignedsbit IO=P33; /ds1302输入输出口(数据线)sbit SCLK=P34; /ds1302时钟信号段(时钟线)sbit RST=P35; /ds1302复位端口sbit DISPLAY_DAT=P10;/LED数据端口sbit DISPLAY_CLK=P11;/LED信号端口sbit s1=P14; /功能键sbit s2=P15; /加键sbit s3=P16; /减键sbit s4=P17; /切换键bit flag,flag_time;char set_miao=0,set_fen=0,set_shi=12;uchar code SMG11=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /数码管位码uchar display_buffer=0x00,0x00,10,0x00,0x00,10,0x00,0x00;void delay() /延时5us_nop_();_nop_();_nop_();_nop_();_nop_();void delayxms(uint z)/延时程序uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_a_byte_to_1302 (uchar dat)/向DS1302写入一个字节unsigned char i;for(i=0;i1;IO=CY;SCLK=1;delay();uchar receive_a_byte_from_1302() /从DS1302读出一个字节unsigned char i;unsigned char temp=0x00;IO=1;for(i=0;i1;if(IO=1)temp=temp|0x80;SCLK=1;delay();return temp/16*10+temp%16;uchar read_data(uchar addr)/从DS1302指定位置读取数据unsigned char dat;RST=0;delay();SCLK=0;delay();RST=1;delay();write_a_byte_to_1302(addr);dat=receive_a_byte_from_1302();SCLK=1;RST=0;return dat;void write_data(uchar addr,uchar dat) /向DS1302某地址写数据RST=0;delay();SCLK=0;delay();RST=1;delay();write_a_byte_to_1302(addr);write_a_byte_to_1302(dat);SCLK=1;RST=0;void get_time() /从DS1302中读取当前时间current_time0=read_data(0x81); / 秒current_time1=read_data(0x83); / 分current_time2=read_data(0x85); / 时current_time3=read_data(0x87); /日current_time4=read_data(0x89); /月current_time5=read_data(0x8D); /年 void display1()/显示时分秒display_buffer0=current_time0%10; /秒个位display_buffer1=current_time0/10; /秒十位display_buffer2=10; /display_buffer3=current_time1%10;display_buffer4=current_time1/10;display_buffer5=10;display_buffer6=current_time2%10;display_buffer7=current_time2/10;void display2()/显示年月日display_buffer0=current_time3%10; /天各位display_buffer1=current_time3/10; /天十位display_buffer2=10; /display_buffer3=current_time4%10;display_buffer4=current_time4/10;display_buffer5=10;display_buffer6=current_time5%10;display_buffer7=current_time5%100/10;void display3()/显示秒表display_buffer0=current_time0%10; /秒个位display_buffer1=current_time0/10; /秒十位display_buffer2=10;display_buffer3=0;display_buffer4=0;display_buffer5=10;display_buffer6=0;display_buffer7=0;void keyscan() /功能设定if(s1=0) /判断K1键是否按下delayxms(1);if(s1=0)while(!s1);s1num+;/功能键按下次数记录switch(s1num)case 1: /调秒TR0=0;write_data(0x8e,0x00);/取消写保护write_data(0x8e,0x80);write_data(0x80,0x00);break;case 2: /调分write_data(0x8e,0x00);write_data(0x82,0x00);break;case 3: /调时write_data(0x8e,0x00);write_data(0x84,0x00);break;case 4:/清零s1num=0;write_data(0x8e,0x80);/禁止写TR0=1;break;void changetime() /调整时间if(s1num!=0) /只有功能键被按下后,加和减键才有效if(s2=0) /加键delayxms(1);if(s2=0)while(!s2);switch(s1num)case 1: /若功能键第一次被按下miao+; /则调整秒加1if(miao=60) /若满60后清零miao=0;write_data(0x80,(miao/10*16+miao%10);/将调整后的秒写入1302(BCD码的转换)break;case 2:/若功能键第二次被按下fen+;/则调整分加1if(fen=60)/若满60后清零fen=0;write_data(0x82,(fen/10*16+fen%10);/将调整后的分写入1302break;case 3:/若功能键第三次被按下shi+;/则调整时加1if(shi=24)/若满24后清零shi=0;write_data(0x84,(shi/10*16+shi%10);/将调整后的时写入1302break;if(s3=0)/减键delayxms(1);if(s3=0)while(!s3);switch(s1num)case 1:miao-;if(miao=-1)miao=59;write_data(0x80,(miao/10*16+miao%10);break;case 2:fen-;if(fen=-1)fen=59;write_data(0x82,(fen/10*16+fen%10);break;case 3:shi-;if(shi=-1)shi=23;write_data(0x84,(shi/10*16+shi%10);break;void init()TMOD=0x01;TH0=0;TL0=0;EA=1;ET0=1;TR0=1;void display()/显示调整switch(s4num)case 1:display1(); /显示时分秒break;case 2: display2(); /显示年月日break;case 3:display3(); /显示秒表break; void key4() /k4键if(s4=0)delayxms(1); if(s4=0)s4num+;if(s4num3)s4num=0;void main()char i,j;uchar ddd;init();while(1) keyscan();changetime();get_time();key4();if(s4num!=0)display();for(j=0;j8;j+) ddd=SMGdisplay_bufferj;for(i=0;i8;i+) DISPLAY_CLK=0; if(ddd&0x80)=0x80) DISPLAY_DAT=1; else DISPLAY_DAT=0; ddd=1; DISPLAY_CLK=0; DISPLAY_CLK=1;delayxms(1000);参考文献1 王平.单片机应用设计与制作.M.北京:清华大学出版社,2012.2 郑锋 王巧芝.51单片机典型应用开发范例大全.M.北京:中国铁道出版社出版社,2011.3 朱清慧.Proteus教程.M.北京:清华大学出版社,2011.4 杨欣.51单片机应用从零开始.M.北京:清华大学出版社,2008.5 郭志勇.单片机应用技术项目教程.M.北京:中国水利水电出版社,2011.6 刘建清.从零开始学单片机技术.M.北京:国防工业出版社,2008.7 彭伟.单片机C语言程序设计实训100例.M.北京:电子工业出版社,2009.8 张友德 涂时亮 赵志英.单片微型机原理、应用与实验.M.上海:复旦大学出版社,2010.9 王静霞.单片机应用技术.M.北京:电子工业出版社,2012.10 王明顺,赵德平.可涓流充电的串行实时时钟芯片DS1302及应用设计J.国外电子元器件,1997,(2)11 黄明强.DS1302在单片机系统中的应用J.保定师范专科学校学报,2004, 17(2)12 赵海兰,朱剑,赵祥伟.DS1302实时显示时间的原理与应用J.电子技术,2002,(1)13邓红,张越编著.单片机实验与应用设计教程M.冶金工业出版社,2004,514 孙安青编著. AT89S51单片机实验及实践教程M15 基于DS1302的数码管时钟电路设计_杨占军,电子世界2005年9期16 盛蒙蒙,葛亦斌等.基于单片机实现多功能数字钟的系统设计J.硅谷,2009,27(20):67-69.17.马丽萍,肖渊.基于Proteus的数字钟设计及仿真J. 西安工程大学学报,2009,23(3):59-62.18.黄明,黄艳.多功能数字钟电路的设计与制作J.机械与电子,2009(27):71-72.19.彭容修,刘泉,马建国.数字电子技术基础.武汉理工大学出版社.2006.120 刘建英;基于单片机的时钟设计J;内蒙古石油化工;2005年01期- 24 -
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 任务书类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!