单片机课程设计-基于AT89C52单片机的LED点阵显示电子钟设计.doc_第1页
单片机课程设计-基于AT89C52单片机的LED点阵显示电子钟设计.doc_第2页
单片机课程设计-基于AT89C52单片机的LED点阵显示电子钟设计.doc_第3页
单片机课程设计-基于AT89C52单片机的LED点阵显示电子钟设计.doc_第4页
单片机课程设计-基于AT89C52单片机的LED点阵显示电子钟设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

课程名称:单片机课程设计设计题目: 单片机led点阵显示电子钟 院 系: 电气工程系 专 业: 电子信息工程 年 级: 2010 级 姓 名: 指导教师: 赵琳 西南交通大学峨眉校区 2013年 月 日 1绪论 1.1 led点阵显示电子钟的背景及意义在日常生活中,大家见到的都是数码管制作的电子钟,led点阵时钟则不多见。用单片机控制的led点阵显示电子钟具有结构简单、性能可靠、成本低廉、价格便宜和显示灵活等优点,其应用前景广阔。之所以使用led点阵电子屏显示,是与它本身所具有的优点分不开的1。这些优点概括起来就是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。在实际应用中的显示屏由于成本和可靠性的因素常采用一种动态扫描的显示方法。本文设计的是一个室内用16块88点阵时钟显示屏,数字采用静止显示方式。电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟走时更准确、性能更稳定。由于用led点阵显示数据,在夜晚或黑暗的场合里也可以使用,具有一定的实用性。随着人们生活环境的不断改善和美化,在许多场合都可以看到led点阵显示电子钟。在城市的主要营业场所、车站、码头等公共场所使用led数字电子钟已经成为一种时尚2。 1.2 设计任务及要求任务:利用at89c52单片机结合led点阵显示器设计一个电子钟。电子时钟将在16块88点阵显示屏上分别显示(小时十位)、(小时个位)、(:)、(分十位)、(分个位)(:)(秒十位)、(秒个位)。设计一种基于at89c52单片机的led点阵显示时钟,基本设计要求如下:(1) 电子钟的基本功能,也就是计时的功能,要保证电子钟的正常工作,正常计时。(2) 时钟的显示由led点阵构成,格式为xx:xx:xx(时:分:秒),点阵为88点阵显示屏。(3) 能正确显示时间,上电显示为当前时间 。 2 总体方案设计及论证在本章节中将对总体的方案进行阐述,同时将对可能用到的元器件进行详细介绍,以便接下来的设计工作能顺利,有效的进行打下结实的基础。 2.1 系统方案因为是应用at89c52单片机来实现控制,所以系统总的方案集中在两个部分,一个是硬件结构的设计,一个是控制的总体思想。在本小节中将对这两部分内容进行简单的叙述。 2.1.1 硬件结构根据项目的功能和要求,可采用at89c52单片机作为核心控制器。led点阵电子钟系统组成包括:晶振电路模块、显示电路模块、显示行驱动电路模块、 电源模块。 2.1.2 控制思想led点阵电子钟程序主要功能是屏幕显示时间稳定,精确。所以按照分块设计的方法可以把程序分为主程序、显示程序、计时程序。主程序主要是用来初始化系统和控制各个子程序之间执行的顺序。显示程序用来完成数字在led点阵上的显示,时钟的显示是使用16块88点阵显示屏。计时程序用来完成计时,数时功能。 2.2 设计方案论证 由时钟电路经转换子程序转换成适应led点阵显示屏显示的数据,并通过单片机的输出功能输入到led点阵显示屏,再通过显示扫描程序,显示出时钟的走时时间。用计时程序来完成计时,数时功能,再通过单片机综合控制将数字显示出来。由此可见,通过at89c52单片机的控制功能,完全可以实现led点阵显示电子钟。2.3 主要元器件选择主要用到的硬件有:at89c52单片机,88点阵屏,74hc245总线收发器,ds1302实时时钟电路 , 74hc154译码器,12mhz晶振。2.3.1 88点阵显示屏图2.2为88点阵led外观及引脚图,其等效电路如图2.3所示,只要其对应的dc、dr轴顺向偏压,即可使led发亮。例如如果想使图2.3左上角led点亮,则dc8=1,dr1=0即可。应用时限流电阻可以放在dc轴或dr轴。88点阵led外观及引脚如图2.24。dc3 dc6 dr4 dc8 dr6 dr7 dc7 dc5dc1 dr5 dr3 dc4 dr8 dc2 dr2 dr188点阵焊接面引脚 图2.2图2.3为88点阵led等效电路,由此可以看出点阵是用64个led组成的。点阵led扫描法介绍:从图2.3中可以看出,88点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。频率必须大于128赫兹,周期小于7.8毫秒即可符合视觉暂留要求。此外一次驱动一列或一行(8盏led)时需外加驱动电路提高电流,否则led亮度会不足。 图2.32.3.2 74hc245总线收发器 总线收发器(bus transceiver),典型的cmos型三态缓冲门电路。由于单片机或cpu的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。 第1脚dir,为输入输出端口转换用,dir=“1”高电平时信号由“a”端输入“b”端输出,dir=“0”低电平时信号由“b”端输入“a”端输出。第29脚“a”信号输入输出端,a0=b0、a7=b7,a0与b0是一组,如果dir=“1”oe=“0”则a1输入b1输出,其它类同。如果dir=“0”oe=“0”则b1输入a1输出,其它类同。第1118脚“b”信号输入输出端,功能与“a”端一样,不再描述。第19脚oe,使能端,若该脚为“1”a/b端的信号将不导通,只有为“0”时a/b端才被启用,该脚也就是起到开关的作用。第10脚gnd,电源地。第20脚vcc,电源正极。2.3.3 ds1302实时时钟电路 ds1302的引脚排列,其中vcc1为后备电源,vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302由vcc1或vcc2两者中的较大者供电。当vcc2大于vcc1+0.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。x1和x2是振荡源,外接32.768khz晶振。rst是复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种功能:首先,rst接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供终止单字节或多字节数据传送的方法。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.0v之前,rst必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。i/o为串行数据输入输出端(双向),后面有详细说明。sclk为时钟输入端。 下图为ds1302的引脚功能 : 小时寄存器d7位为12小时/24小时制的选择位,当为1时选12小时制,当为0时选24小时制。当为1时钟暂停,为0时钟开启。写保护寄存器的wp为写保护位,当wp=1,写保护,当wp=0未写保护,当对日历、时钟寄存器或片内ram进行写时wp应清零,当对日历、时钟寄存器或片内ram进行读时wp一般置1. 2.3.4 74hc154译码器74hc154是一款高速cmos器件,74hc154引脚兼容低功耗肖特基ttl(lsttl)系列。74hc154译码器可接受4位高有效二进制地址输入,并提供16个互斥的低有效输出。74hc154的两个输入使能门电路可用于译码器选通,以消除输出端上的通常译码“假信号”,也可用于译码器扩展。该使能门电路包含两个“逻辑与”输入,必须置为低以便使能输出端。任选一个使能输入端作为数据输入,74hc154可充当一个1-16的多路分配器。当其余的使能输入端置低时,地址输出将会跟随应用的状态。引脚说明1-11 13-17 :输出端。(outputs (active low))12:gnd电源地 (ground (0 v))18-19:使能输入端、低电平有效 (enable inputs (active low)20-23:地址输入端 (address inputs)24:vcc电源正 (positive supply voltage)2.3.5 at89c52单片机微处理器采用at89c52系列单片机,at89c52单片机是这几年在我国非常流行的单片机,是一种带8k字节闪存器的高性能单片机,可擦除存储器可以反复擦除100次,具有低功耗,高性能的特点,并且可与工业标准的msc-51指令集和输出管脚相兼容,对于本设计需要实现的功能,完全可胜任73 硬件电路设计 元器件表 元件名称 型号 个数 用途 单片机 at89c52 1 控制核心led点阵 88 16 显示电路总线收发器 74hc245 4 信号功率放大实时时钟电路 ds1302 1 记时集成块 74hc154 4 行扫描 排阻 10k*8 1 上拉电阻 4 软件部分设计#include#define uchar unsigned char#define uint unsigned int#define set_out(x) x = 1#define clr_out(x) x = 0sbit e0=p30;sbit e1=p31;sbit e2=p32;sbit e3=p33;sbit ds1302_rst=p35;sbit ds1302_io=p37; /定义ds1302引脚sbit ds1302_sclk=p36;sbit acc0=acc0;sbit acc7=acc7;char done,count,temp,flag,up_flag,down_flag,count;idata uint m,z,l,d;idata uint c0,c1,c2,c3,c4,c5,c6,c7;uchar read_byte();uchar read_data_ds1302(uchar taddr);void write_byte(uchar tdata);void write_data_ds1302(uchar taddr,uchar tdata);void set_ds1302(uchar *p1302);void get_ds1302() ;void init_ds1302();uchar initial_time=0x30,0x57,0x17,0x18,0x05,0x01,0x11 / 秒 分 时 日 月 周 年uchar data now_time7;/*字模0-9*/uchar code led1116= /*0 char_30 */0x00,0x00,0xe0,0x0f,0xf0,0x1f,0x18,0x30,0x08,0x20,0x18,0x30,0xf0,0x1f,0xe0,0x0f,/*1 char_31 */0x00,0x00,0x10,0x20,0x10,0x20,0xf8,0x3f,0xf8,0x3f,0x00,0x20,0x00,0x20,0x00,0x00,/*2 char_32 */0x00,0x00,0x70,0x30,0x78,0x38,0x08,0x2c,0x08,0x26,0x88,0x23,0xf8,0x31,0x70,0x30,/*3 char_33 */0x00,0x00,0x30,0x18,0x38,0x38,0x88,0x20,0x88,0x20,0xc8,0x31,0x78,0x1f,0x30,0x0e,/*4 char_34 */0x00,0x00,0x00,0x07,0xc0,0x07,0xe0,0x24,0x30,0x24,0xf8,0x3f,0xf8,0x3f,0x00,0x24,/*5 char_35 */0x00,0x00,0xf8,0x19,0xf8,0x39,0x88,0x21,0x88,0x20,0x88,0x31,0x08,0x1f,0x08,0x0e,/*6 char_36 */0x00,0x00,0xe0,0x0f,0xf0,0x1f,0x98,0x31,0x88,0x20,0x98,0x31,0x18,0x1f,0x00,0x0e,/*7 char_37 */0x00,0x00,0x38,0x00,0x38,0x00,0x08,0x3f,0xc8,0x3f,0xf8,0x00,0x38,0x00,0x08,0x00,/*8 char_38 */0x00,0x00,0x70,0x1c,0xf8,0x3e,0x88,0x23,0x08,0x21,0x88,0x23,0xf8,0x3e,0x70,0x1c,/*9 char_39 */0x00,0x00,0xe0,0x00,0xf0,0x31,0x18,0x33,0x08,0x22,0x18,0x33,0xf0,0x1f,0xe0,0x0f,/*: char_3a */0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x30,0xc0,0x30,0xc0,0x30,0x00,0x00,0x00,0x00;/*ds1302模块部分*/uchar read_byte()/从1302中读出一字节数据 uchar i; for(i=8;i0;i-) acc=acc1; acc7=ds1302_io;/由于ds1302读数据的时候,第一个数据读取在发一个byte命令后,在第八位的下降沿 ds1302_sclk=1; ds1302_sclk=0;/产生下降沿输出一位数据 return(acc);void write_byte(uchar tdata)/向1302中写入一字节数据 uchar i; acc=tdata; for(i=8;i0;i-) ds1302_io=acc0; ds1302_sclk=1; ds1302_sclk=0;/产生上升沿输入数据 acc=acc1; void write_data_ds1302(uchar taddr,uchar tdata)/向1302中写入 地址为taddr的空间 写入数据tdata ds1302_rst=0; ds1302_sclk=0; ds1302_rst=1; write_byte(taddr); write_byte(tdata); ds1302_rst=0; ds1302_sclk=1;uchar read_data_ds1302(uchar taddr)/从1302中读出地址为taddr的空间数据 uchar tdata; ds1302_rst=0; ds1302_sclk=0; ds1302_rst=1; write_byte(taddr); tdata=read_byte(); ds1302_rst=0; ds1302_sclk=1; return(tdata);void set_ds1302(uchar *p1302)/ uchar i; uchar taddr = 0x80; write_data_ds1302(0x8e,0x00); /* 控制命令,wp=0,写操作*/ for(i =7; i0; i-) write_data_ds1302(taddr,*p1302); /* 秒 分 时 日 月 星期 年 */ p1302+; taddr+=2; write_data_ds1302(0x8e,0x80); /* 控制命令,wp=1,写保护*/void get_ds1302() uchar k; uchar taddr = 0x81; for (k=0; k0;z-)for(y=20;y0;y-); voiddisplay() c0=now_time2/16; /显示时十c1=now_time2%16;c2=10;c3=now_time1/16; /显示分十c4=now_time1%16; /显示分c5=10;c6=now_time0/16; /显示秒十c7=now_time0%16; /显示秒 e0=0;e1=1; e2=1;e3=1;for(m=0;m8;m+) p0=p2=0x00;p1=0xff;p1=m; p0=ledc02*m;p2=ledc02*m+1;delay(1);for(m=8;m16;m+) p0=p2=0x00;p1=0xff;p1=m; p0=ledc12*(m-8);p2=ledc12*(m-8)+1;delay(1); e0=1; e1=0; e2=1; e3=1; for(z=0;z8;z+) p0=p2=0x00;p1=0xff;p1=z; p0=ledc22*z;p2=ledc22*z+1;delay(1); for(z=8;z16;z+) p0=p2=0x00;p1=0xff;p1=z; p0=ledc32*(z-8);p2=ledc32*(z-8)+1;delay(1); e0=1; e1=1; e2=0; e3=1;for(l=0;l8;l+) p0=p2=0x00;p1=0xff;p1=l; p0=ledc42*l;p2=ledc42*l+1;delay(1); for(l=8;l16;l+) p0=p2=0x00;p1=0xff;p1=l; p0=ledc52*(l-8);p2=ledc52*(l-8)+1;delay(1); e0=1; e1=1; e2=1; e3=0;for(d=0;d8;d+) p0=p2=0x00;p1=0xff;

温馨提示

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

评论

0/150

提交评论