单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx

上传人:b****6 文档编号:8156133 上传时间:2023-01-29 格式:DOCX 页数:18 大小:359.98KB
下载 相关 举报
单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx_第1页
第1页 / 共18页
单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx_第2页
第2页 / 共18页
单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx_第3页
第3页 / 共18页
单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx_第4页
第4页 / 共18页
单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx

《单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx(18页珍藏版)》请在冰豆网上搜索。

单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文.docx

单片机课程设计基于at89c52单片机的led点阵显示电子钟设计毕业论文

 

课程名称:

单片机课程设计

设计题目:

单片机LED点阵显示电子钟

院系:

电气工程系

专业:

电子信息工程

年级:

2010级

姓名:

指导教师:

赵琳

西南交通大学峨眉校区

2013年月日

 

1 绪论

1.1LED点阵显示电子钟的背景及意义

在日常生活中,大家见到的都是数码管制作的电子钟,LED点阵时钟则不多见。

用单片机控制的LED点阵显示电子钟具有结构简单、性能可靠、成本低廉、价格便宜和显示灵活等优点,其应用前景广阔。

之所以使用LED点阵电子屏显示,是与它本身所具有的优点分不开的[1]。

这些优点概括起来就是:

亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。

在实际应用中的显示屏由于成本和可靠性的因素常采用一种动态扫描的显示方法。

本文设计的是一个室内用16块8×8点阵时钟显示屏,数字采用静止显示方式。

电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。

由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟走时更准确、性能更稳定。

由于用LED点阵显示数据,在夜晚或黑暗的场合里也可以使用,具有一定的实用性。

随着人们生活环境的不断改善和美化,在许多场合都可以看到LED点阵显示电子钟。

在城市的主要营业场所、车站、码头等公共场所使用LED数字电子钟已经成为一种时尚[2]。

1.2设计任务及要求

任务:

利用AT89C52单片机结合LED点阵显示器设计一个电子钟。

电子时钟将在16块8×8点阵显示屏上分别显示(小时十位)、(小时个位)、(:

)、(分十位)、(分个位)(:

)(秒十位)、(秒个位)。

设计一种基于AT89C52单片机的LED点阵显示时钟,基本设计要求如下:

(1)电子钟的基本功能,也就是计时的功能,要保证电子钟的正常工作,正常计时。

(2)时钟的显示由LED点阵构成,格式为XX:

XX:

XX(时:

分:

秒),点阵为8×8点阵显示屏。

(3)能正确显示时间,上电显示为当前时间。

2总体方案设计及论证

在本章节中将对总体的方案进行阐述,同时将对可能用到的元器件进行详细介绍,以便接下来的设计工作能顺利,有效的进行打下结实的基础。

2.1系统方案

因为是应用AT89C52单片机来实现控制,所以系统总的方案集中在两个部分,一个是硬件结构的设计,一个是控制的总体思想。

在本小节中将对这两部分内容进行简单的叙述。

2.1.1硬件结构

根据项目的功能和要求,可采用AT89C52单片机作为核心控制器。

LED点阵电子钟系统组成包括:

晶振电路模块、显示电路模块、显示行驱动电路模块、电源模块。

2.1.2控制思想

LED点阵电子钟程序主要功能是屏幕显示时间稳定,精确。

所以按照分块设计的方法可以把程序分为主程序、显示程序、计时程序。

主程序主要是用来初始化系统和控制各个子程序之间执行的顺序。

显示程序用来完成数字在LED点阵上的显示,时钟的显示是使用16块8×8点阵显示屏。

计时程序用来完成计时,数时功能。

2.2设计方案论证

由时钟电路经转换子程序转换成适应LED点阵显示屏显示的数据,并通过单片机的输出功能输入到LED点阵显示屏,再通过显示扫描程序,显示出时钟的走时时间。

用计时程序来完成计时,数时功能,再通过单片机综合控制将数字显示出来。

由此可见,通过AT89C52单片机的控制功能,完全可以实现LED点阵显示电子钟。

2.3主要元器件选择

主要用到的硬件有:

AT89C52单片机,8×8点阵屏,74HC245总线收发器,DS1302实时时钟电路,74HC154译码器,12MHz晶振。

2.3.18×8点阵显示屏

图2.2为8×8点阵LED外观及引脚图,其等效电路如图2.3所示,只要其对应的DC、DR轴顺向偏压,即可使LED发亮。

例如如果想使图2.3左上角LED点亮,则DC8=1,DR1=0即可。

应用时限流电阻可以放在DC轴或DR轴。

8×8点阵LED外观及引脚如图2.2[4]。

图2.2

图2.3为8×8点阵LED等效电路,由此可以看出点阵是用64个LED组成的。

点阵LED扫描法介绍:

从图2.3中可以看出,8×8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。

频率必须大于128赫兹,周期小于7.8毫秒即可符合视觉暂留要求。

此外一次驱动一列或一行(8盏LED)时需外加驱动电路提高电流,否则LED亮度会不足。

图2.3

2.3.274HC245总线收发器

总线收发器(bustransceiver),典型的CMOS型三态缓冲门电路。

由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。

第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。

第2~9脚“A”信号输入输出端,A0=B0、、、、、、A7=B7,A0与B0是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。

如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。

第11~18脚“B”信号输入输出端,功能与“A”端一样,不再描述。

第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。

第10脚GND,电源地。

第20脚VCC,电源正极。

2.3.3DS1302实时时钟电路

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引脚变为高阻态。

上电运行时,在Vcc>2.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.474HC154译码器

74HC154是一款高速CMOS器件,74HC154引脚兼容低功耗肖特基TTL(LSTTL)系列。

74HC154译码器可接受4位高有效二进制地址输入,并提供16个互斥的低有效输出。

74HC154的两个输入使能门电路可用于译码器选通,以消除输出端上的通常译码“假信号”,也可用于译码器扩展。

该使能门电路包含两个“逻辑与”输入,必须置为低以便使能输出端。

任选一个使能输入端作为数据输入,74HC154可充当一个1-16的多路分配器。

当其余的使能输入端置低时,地址输出将会跟随应用的状态。

引脚说明

1-1113-17:

输出端。

(outputs(activeLOW))

12:

Gnd电源地(ground(0V))

18-19:

使能输入端、低电平有效(enableinputs(activeLOW))

20-23:

地址输入端(addressinputs)

24:

VCC电源正(positivesupplyvoltage)

2.3.5AT89C52单片机

微处理器采用AT89C52系列单片机,AT89C52单片机是这几年在我国非常流行的单片机,是一种带8K字节闪存器的高性能单片机,可擦除存储器可以反复擦除100次,具有低功耗,高性能的特点,并且可与工业标准的MSC-51指令集和输出管脚相兼容,对于本设计需要实现的功能,完全可胜任[7]

3硬件电路设计

元器件表

元件名称型号个数用途

单片机AT89C521控制核心

LED点阵8×816显示电路

总线收发器74HC2454信号功率放大

实时时钟电路DS13021记时

集成块74HC1544行扫描

排阻10K*81上拉电阻

4软件部分设计

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineset_out(X)X=1

#defineclr_out(X)X=0

sbite0=P3^0;

sbite1=P3^1;

sbite2=P3^2;

sbite3=P3^3;

sbitds1302_RST=P3^5;

sbitds1302_IO=P3^7;//定义DS1302引脚

sbitds1302_SCLK=P3^6;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

chardone,count,temp,flag,up_flag,down_flag,count;

idatauintm,z,l,d;

idatauintc0,c1,c2,c3,c4,c5,c6,c7;

ucharread_Byte();

ucharread_data_ds1302(uchartaddr);

voidwrite_Byte(uchartdata);

voidwrite_data_ds1302(uchartaddr,uchartdata);

voidset_ds1302(uchar*P1302);

voidget_ds1302();

voidinit_ds1302();

ucharinitial_time[]={0x30,0x57,0x17,0x18,0x05,0x01,0x11}

//秒分时日月周年

uchardatanow_time[7];

/*字模0-9*/

ucharcodeled[11][16]={

/*0CHAR_30*/

{0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x18,0x30,0x08,0x20,0x18,0x30,0xF0,0x1F,0xE0,0x0F},

/*1CHAR_31*/

{0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00},

/*2CHAR_32*/

{0x00,0x00,0x70,0x30,0x78,0x38,0x08,0x2C,0x08,0x26,0x88,0x23,0xF8,0x31,0x70,0x30},

/*3CHAR_33*/

{0x00,0x00,0x30,0x18,0x38,0x38,0x88,0x20,0x88,0x20,0xC8,0x31,0x78,0x1F,0x30,0x0E},

/*4CHAR_34*/

{0x00,0x00,0x00,0x07,0xC0,0x07,0xE0,0x24,0x30,0x24,0xF8,0x3F,0xF8,0x3F,0x00,0x24},

/*5CHAR_35*/

{0x00,0x00,0xF8,0x19,0xF8,0x39,0x88,0x21,0x88,0x20,0x88,0x31,0x08,0x1F,0x08,0x0E},

/*6CHAR_36*/

{0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x98,0x31,0x88,0x20,0x98,0x31,0x18,0x1F,0x00,0x0E},

/*7CHAR_37*/

{0x00,0x00,0x38,0x00,0x38,0x00,0x08,0x3F,0xC8,0x3F,0xF8,0x00,0x38,0x00,0x08,0x00},

/*8CHAR_38*/

{0x00,0x00,0x70,0x1C,0xF8,0x3E,0x88,0x23,0x08,0x21,0x88,0x23,0xF8,0x3E,0x70,0x1C},

/*9CHAR_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模块部分*/

ucharread_Byte()//从1302中读出一字节数据

{

uchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;

ACC7=ds1302_IO;//由于ds1302读数据的时候,第一个数据读取在发一个Byte命令后,在第八位的下降沿

ds1302_SCLK=1;

ds1302_SCLK=0;//产生下降沿输出一位数据

}

return(ACC);

}

voidwrite_Byte(uchartdata)//向1302中写入一字节数据

{

uchari;

ACC=tdata;

for(i=8;i>0;i--)

{

ds1302_IO=ACC0;

ds1302_SCLK=1;

ds1302_SCLK=0;//产生上升沿输入数据

ACC=ACC>>1;

}

}

voidwrite_data_ds1302(uchartaddr,uchartdata)//向1302中写入地址为taddr的空间写入数据tdata

{

ds1302_RST=0;

ds1302_SCLK=0;

ds1302_RST=1;

write_Byte(taddr);

write_Byte(tdata);

ds1302_RST=0;

ds1302_SCLK=1;

}

ucharread_data_ds1302(uchartaddr)//从1302中读出地址为taddr的空间数据

{

uchartdata;

ds1302_RST=0;

ds1302_SCLK=0;

ds1302_RST=1;

write_Byte(taddr);

tdata=read_Byte();

ds1302_RST=0;

ds1302_SCLK=1;

return(tdata);

}

voidset_ds1302(uchar*P1302)//

{

uchari;

uchartaddr=0x80;

write_data_ds1302(0x8e,0x00);/*控制命令,WP=0,写操作*/

for(i=7;i>0;i--)

{

write_data_ds1302(taddr,*P1302);/*秒分时日月星期年*/

P1302++;

taddr+=2;

}

write_data_ds1302(0x8e,0x80);/*控制命令,WP=1,写保护*/

}

voidget_ds1302()

{

uchark;

uchartaddr=0x81;

for(k=0;k<7;k++)

{

now_time[k]=read_data_ds1302(taddr);/*格式为:

秒分时日月星期年*/

taddr+=2;

}

}

voiddelay(uintz)

{

uintx,y;

for(x=z;z>0;z--)

for(y=20;y>0;y--);

}

voiddisplay()

{

c0=now_time[2]/16;//显示时十

c1=now_time[2]%16;

c2=10;

c3=now_time[1]/16;//显示分十

c4=now_time[1]%16;//显示分

c5=10;

c6=now_time[0]/16;//显示秒十

c7=now_time[0]%16;//显示秒

e0=0;

e1=1;

e2=1;

e3=1;

for(m=0;m<8;m++)

{

P0=P2=0x00;

P1=0xff;

P1=m;P0=led[c0][2*m];

P2=led[c0][2*m+1];

delay

(1);

}

for(m=8;m<16;m++)

{

P0=P2=0x00;

P1=0xff;

P1=m;P0=led[c1][2*(m-8)];

P2=led[c1][2*(m-8)+1];

delay

(1);

}

e0=1;

e1=0;

e2=1;

e3=1;

for(z=0;z<8;z++)

{

P0=P2=0x00;

P1=0xff;

P1=z;

P0=led[c2][2*z];

P2=led[c2][2*z+1];

delay

(1);

}

for(z=8;z<16;z++)

{

P0=P2=0x00;

P1=0xff;

P1=z;

P0=led[c3][2*(z-8)];

P2=led[c3][2*(z-8)+1];

delay

(1);

}

e0=1;

e1=1;

e2=0;

e3=1;

for(l=0;l<8;l++)

{

P0=P2=0x00;

P1=0xff;

P1=l;

P0=led[c4][2*l];

P2=led[c4][2*l+1];

delay

(1);

}

for(l=8;l<16;l++)

{

P0=P2=0x00;

P1=0xff;

P1=l;

P0=led[c5][2*(l-8)];

P2=led[c5][2*(l-8)+1];

delay

(1);

}

e0=1;

e1=1;

e2=1;

e3=0;

for(d=0;d<8;d++)

{

P0=P2=0x00;

P1=0xff;

P1=d;

P0=led[c6][2*d];

P2=led[c6][2*d+1];

delay

(1);

}

for(d=8;d<16;d++)

{

P0=P2=0x00;

P1=0xff;

P1=d;

P0=led[c7][2*(d-8)];

P2=led[c7][2*(d-8)+1];

delay

(1);

}

}

voidmain()

{

set_ds1302(initial_time);

while

(1)

{

get_ds1302();

display();

}

}

5系统仿真

根据设计要求时钟的显示由LED点阵构成,格式为XX:

XX:

XX(时:

分:

秒),点阵为8×8点阵显示屏能正确显示时间,仿真电路开机画面如下图所示。

从图中可以看出显示的时间为23点1分34秒。

 

结束语

本次课程设计到现在已经有几个月,回顾其中学到了很多东西。

本设计是一个基于AT89C52的LED点阵显示电子钟,是将电子钟的数字显示用LED点阵的方式来实现的。

本系统硬件少,结构简单,容易实现,性能稳定,成本低。

总结本文的研究工作,主要做了一下几点工作:

通过阅读大量的相关资料,详细了解LED发光原理和LED点阵显示原理,了解LED现状,清楚的了解LED与其他显示器的区别。

并且通过多单片机资料的查阅,更进一步增加了对单片机只是的理解和运用能力。

在本次设计中学会了PROTEUS和KEIL的基本使用,感到PROTUES在电子制图,仿真上的重要性和KEIL作为编程软件的实用性。

 

课程设计任务书

专业电子信息工程姓名学号

开题日期:

2013年3月1日完成日期:

2012年6月15日

题目单片机LED点阵显示电子钟

一、设计的目的

设计一部基于AT89C52单片机的LED点阵显示电子钟,熟练的运用单片机知识

二、设计的内容及要求

●各部分硬件及其概念

●对应的程序

●Protues仿真

三、指导教师评语

四、成绩

指导教师(签章)

年月日

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

当前位置:首页 > 高等教育 > 工学

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

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