单片机课程设计基于AT89C52单片机的LED点阵显示电子钟设计.docx
- 文档编号:14704340
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:23
- 大小:360.72KB
单片机课程设计基于AT89C52单片机的LED点阵显示电子钟设计.docx
《单片机课程设计基于AT89C52单片机的LED点阵显示电子钟设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于AT89C52单片机的LED点阵显示电子钟设计.docx(23页珍藏版)》请在冰点文库上搜索。
单片机课程设计基于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仿真
三、指导教师评语
四、成绩
指导教师(签章)
年月日目录
第一章总论1
第一节项目背景1
第二节项目概况2
第三节可研报告编制依据及研究范围4
第二章项目建设的必要性6
第三章外部和内部环境分析8
第一节外部环境分析8
第二节xx镇社会经济环境分析11
第三节xx镇发展的机遇与挑战分析14
第四节xx镇发展的优势与劣势分析16
第五节项目风险分析18
第四章建设条件20
第一节项目选址20
第二节场址条件20
第五章发展战略和总体规划22
第一节发展战略目标22
第二节战略实施措施22
第三节规划原则23
第四节总体规划24
第六章基础设施建设内容30
第七章环境保护32
第一节项目场址现状32
第二节项目建设与运营对环境的影响32
第三节环境保护措施33
第四节环境评价结论36
第八章组织机构和项目实施进度37
第一节组织机构37
第二节人力资源配置38
第三节项目实施进度39
第九章投资估算及资金筹措41
第一节投资估算41
第二节投资使用计划与资金筹措45
第十章财务评价47
第一节财务评价基础数据与参数选取47
第二节经营收入估算47
第三节成本费用估算50
第四节财务评价51
第五节财务评价结论55
第十一章社会评价56
第一节项目对社会的影响分析56
第二节项目与所在地互适性分析57
第三节社会评价结论58
第十二章结论与建议59
第一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 基于 AT89C52 LED 点阵 显示 电子钟 设计
文档标签
- 基于单片机LED点阵
- 单片机课程设计基于51单片机的简约电子钟单片机课程设计
- 基于at89c52单片机风力发电机
- AT89C52单片机介绍
- 单片机课程设计报告LED点阵显示单片机课程设计报告
- 单片机课程设计LED来回
- 整理基于AT89C52单片机
- 单片机课程设计44矩阵
- 基于单片机设计LED
- 基于单片机电子钟课程
- 单片机课程设计利用矩阵
- 基于单片机1616的点阵显示毕业设计精品基于单片机
- 基于AT89C52单片机函数
- 基于AT89C52单片机小区
- 单片机课程设计LED点阵
- 单片机课程设计实验LED
- 单片机课程设计基于LED
- 单片机课程设计电子日历时钟显示器设计讲解单片机课程设计
- 单片机课程设计led来回
- 基于单片机LED流水
- 基于单片机1616点阵
- 基于单片机1616点阵
- 基于单片机16点阵
- 基于51单片机点阵
- 基于单片机LED广告
- 基于AVR单片机LED
- 基于51单片机点阵